//===--- ConstraintGraphScope.h - Constraint Graph Scope --------*- C++ -*-===//
//
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2014 - 2016 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See http://swift.org/LICENSE.txt for license information
// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
//
//===----------------------------------------------------------------------===//
//
// This file defines the \c ConstraintGraphScope class, an RAII object that
// introduces a new scope in which changes to the constraint graph are
// capture and will be reverted when the scope disappears.
//
//===----------------------------------------------------------------------===//
#ifndef SWIFT_SEMA_CONSTRAINT_GRAPH_SCOPE_H
#define SWIFT_SEMA_CONSTRAINT_GRAPH_SCOPE_H

namespace swift {
namespace constraints {

class ConstraintGraph;

/// RAII object that introduces a new constraint graph scope to capture
/// modifications made to the constraint graph.
///
/// Scopes are arranged in a stack, where the active scope is the top of the
/// stack. All changes made to the constraint graph are recorded in the
/// active scope. When the scope is popped (via the RAII object destructor),
/// those changes are reverted.
class ConstraintGraphScope {
  ConstraintGraph &CG;

  /// The parent scope, or null if this is the topmost scope.
  ConstraintGraphScope *ParentScope;

  /// The number of recorded changes that existed at the time this scope was
  /// formed.
  ///
  /// When this scope exits, any changes beyond this will be reverted to
  /// bring the graph back to its state prior to the introduction of this
  /// variable.
  unsigned NumChanges;

  ConstraintGraphScope(const ConstraintGraphScope&) = delete;
  ConstraintGraphScope &operator=(const ConstraintGraphScope&) = delete;

public:
  explicit ConstraintGraphScope(ConstraintGraph &CG);
  ~ConstraintGraphScope();
};

} // end namespace swift::constraints
} // end namespace swift

#endif // LLVM_SWIFT_SEMA_CONSTRAINT_GRAPH_SCOPE_H
