public ExplorationState(Path path, CallSiteStack callSiteStack, SmtSolverHandler solverHandler)
        {
            Contract.Requires(path != null);
            Contract.Requires(solverHandler != null);

            this.Path          = path;
            this.CallSiteStack = callSiteStack;
            this.SolverHandler = solverHandler;
        }
        public SmtSolverHandler Clone()
        {
            var cloned = new SmtSolverHandler(this.contextHandler, this.smtSolver, this.pathConditionHandler);

            cloned.lastResult     = this.lastResult;
            cloned.LastResultKind = this.LastResultKind;

            // TODO: Clone the underlying SMT solver and path condition handler!
            // TODO: Clone the variable versions of the latter! (we need to make the overlay cloneable/enumerable)
            // TODO: Clone the symbolic heap!
            throw new NotImplementedException();
        }
        public void Merge(ExplorationState state, SmtSolverHandler solverHandler)
        {
            Contract.Requires(state != null);
            Contract.Requires(solverHandler != null);
            Contract.Requires(state.Path.Node == this.Path.Node);
            Contract.Requires(state.CallSiteStack.Equals(this.CallSiteStack));

            this.Path = new Path(
                this.Path.Preceeding.AddRange(state.Path.Preceeding),
                Math.Max(this.Path.Depth, state.Path.Depth),
                this.Path.Node,
                this.Path.LeadingEdges.AddRange(state.Path.LeadingEdges));
            this.SolverHandler = solverHandler;
        }
 public SolverSymbolicHeapContext(SmtSolverHandler owner)
 {
     this.owner = owner;
 }