smt_util/boolean_simplification.h
smt_util/nary_builder.cpp
smt_util/nary_builder.h
- smt_util/node_visitor.h
theory/arith/approx_simplex.cpp
theory/arith/approx_simplex.h
theory/arith/arith_ite_utils.cpp
node_trie.h
node_value.cpp
node_value.h
+ node_visitor.h
symbol_table.cpp
symbol_table.h
term_canonize.cpp
--- /dev/null
+/********************* */
+/*! \file node_visitor.h
+ ** \verbatim
+ ** Top contributors (to current version):
+ ** Dejan Jovanovic, Morgan Deters, Liana Hadarean
+ ** This file is part of the CVC4 project.
+ ** Copyright (c) 2009-2019 by the authors listed in the file AUTHORS
+ ** in the top-level source directory) and their institutional affiliations.
+ ** All rights reserved. See the file COPYING in the top-level source
+ ** directory for licensing information.\endverbatim
+ **
+ ** \brief A simple visitor for nodes
+ **
+ ** A simple visitor for nodes.
+ **/
+
+#pragma once
+
+#include "cvc4_private.h"
+
+#include <vector>
+
+#include "expr/node.h"
+
+namespace CVC4 {
+
+/**
+ * Traverses the nodes reverse-topologically (children before parents),
+ * calling the visitor in order.
+ */
+template<typename Visitor>
+class NodeVisitor {
+
+ /** For re-entry checking */
+ static thread_local bool s_inRun;
+
+ /**
+ * Guard against NodeVisitor<> being re-entrant.
+ */
+ template <class T>
+ class GuardReentry {
+ T& d_guard;
+ public:
+ GuardReentry(T& guard)
+ : d_guard(guard) {
+ Assert(!d_guard);
+ d_guard = true;
+ }
+ ~GuardReentry() {
+ Assert(d_guard);
+ d_guard = false;
+ }
+ };/* class NodeVisitor<>::GuardReentry */
+
+public:
+
+ /**
+ * Element of the stack.
+ */
+ struct stack_element {
+ /** The node to be visited */
+ TNode d_node;
+ /** The parent of the node */
+ TNode d_parent;
+ /** Have the children been queued up for visitation */
+ bool d_childrenAdded;
+ stack_element(TNode node, TNode parent)
+ : d_node(node), d_parent(parent), d_childrenAdded(false)
+ {
+ }
+ };/* struct preprocess_stack_element */
+
+ /**
+ * Performs the traversal.
+ */
+ static typename Visitor::return_type run(Visitor& visitor, TNode node) {
+
+ GuardReentry<bool> guard(s_inRun);
+
+ // Notify of a start
+ visitor.start(node);
+
+ // Do a reverse-topological sort of the subexpressions
+ std::vector<stack_element> toVisit;
+ toVisit.push_back(stack_element(node, node));
+ while (!toVisit.empty()) {
+ stack_element& stackHead = toVisit.back();
+ // The current node we are processing
+ TNode current = stackHead.d_node;
+ TNode parent = stackHead.d_parent;
+
+ if (visitor.alreadyVisited(current, parent)) {
+ // If already visited, we're done
+ toVisit.pop_back();
+ }
+ else if (stackHead.d_childrenAdded)
+ {
+ // Call the visitor
+ visitor.visit(current, parent);
+ // Done with this node, remove from the stack
+ toVisit.pop_back();
+ }
+ else
+ {
+ // Mark that we have added the children
+ stackHead.d_childrenAdded = true;
+ // We need to add the children
+ for(TNode::iterator child_it = current.begin(); child_it != current.end(); ++ child_it) {
+ TNode childNode = *child_it;
+ if (!visitor.alreadyVisited(childNode, current)) {
+ toVisit.push_back(stack_element(childNode, current));
+ }
+ }
+ }
+ }
+
+ // Notify that we're done
+ return visitor.done(node);
+ }
+
+};/* class NodeVisitor<> */
+
+template <typename Visitor>
+thread_local bool NodeVisitor<Visitor>::s_inRun = false;
+
+}/* CVC4 namespace */
#include <vector>
#include "expr/node.h"
+#include "expr/node_visitor.h"
#include "smt/smt_statistics_registry.h"
-#include "smt_util/node_visitor.h"
#include "theory/rewriter.h"
#include "theory/theory.h"
#include <typeinfo>
#include <vector>
-#include "expr/expr.h" // for ExprSetDepth etc..
-#include "expr/node_manager_attributes.h" // for VarNameAttr
-#include "options/language.h" // for LANG_AST
+#include "expr/expr.h" // for ExprSetDepth etc..
+#include "expr/node_manager_attributes.h" // for VarNameAttr
+#include "expr/node_visitor.h"
+#include "options/language.h" // for LANG_AST
#include "printer/dagification_visitor.h"
#include "smt/command.h"
-#include "smt_util/node_visitor.h"
#include "theory/substitutions.h"
using namespace std;
#include "expr/dtype.h"
#include "expr/expr.h" // for ExprSetDepth etc..
#include "expr/node_manager_attributes.h" // for VarNameAttr
-#include "options/language.h" // for LANG_AST
+#include "expr/node_visitor.h"
+#include "options/language.h" // for LANG_AST
#include "options/smt_options.h"
#include "printer/dagification_visitor.h"
#include "smt/command.h"
#include "smt/smt_engine.h"
-#include "smt_util/node_visitor.h"
#include "theory/arrays/theory_arrays_rewriter.h"
#include "theory/substitutions.h"
#include "theory/theory_model.h"
#include "expr/dtype.h"
#include "expr/node_manager_attributes.h"
+#include "expr/node_visitor.h"
#include "options/bv_options.h"
#include "options/language.h"
#include "options/printer_options.h"
#include "printer/dagification_visitor.h"
#include "smt/smt_engine.h"
#include "smt_util/boolean_simplification.h"
-#include "smt_util/node_visitor.h"
#include "theory/arrays/theory_arrays_rewriter.h"
#include "theory/quantifiers/quantifiers_attributes.h"
#include "theory/substitutions.h"
#include "base/check.h"
#include "context/context.h"
+#include "expr/node_visitor.h"
#include "options/bv_options.h"
#include "options/proof_options.h"
#include "proof/clause_id.h"
#include "smt/smt_engine.h"
#include "smt/smt_engine_scope.h"
#include "smt/smt_statistics_registry.h"
-#include "smt_util/node_visitor.h"
#include "theory/arrays/theory_arrays.h"
#include "theory/output_channel.h"
#include "theory/term_registration_visitor.h"
#include "base/check.h"
#include "context/context.h"
+#include "expr/node_visitor.h"
#include "options/bv_options.h"
#include "options/proof_options.h"
#include "proof/arith_proof.h"
#include "prop/sat_solver_types.h"
#include "smt/smt_engine.h"
#include "smt/smt_engine_scope.h"
-#include "smt_util/node_visitor.h"
#include "theory/arrays/theory_arrays.h"
#include "theory/bv/theory_bv.h"
#include "theory/output_channel.h"
#include "expr/node_algorithm.h"
#include "expr/node_builder.h"
#include "expr/node_self_iterator.h"
+#include "expr/node_visitor.h"
#include "options/arith_options.h"
#include "options/arrays_options.h"
#include "options/base_options.h"
#include "smt/update_ostream.h"
#include "smt_util/boolean_simplification.h"
#include "smt_util/nary_builder.h"
-#include "smt_util/node_visitor.h"
#include "theory/booleans/circuit_propagator.h"
#include "theory/bv/theory_bv_rewriter.h"
#include "theory/logic_info.h"
+++ /dev/null
-/********************* */
-/*! \file node_visitor.h
- ** \verbatim
- ** Top contributors (to current version):
- ** Dejan Jovanovic, Morgan Deters, Liana Hadarean
- ** This file is part of the CVC4 project.
- ** Copyright (c) 2009-2019 by the authors listed in the file AUTHORS
- ** in the top-level source directory) and their institutional affiliations.
- ** All rights reserved. See the file COPYING in the top-level source
- ** directory for licensing information.\endverbatim
- **
- ** \brief A simple visitor for nodes
- **
- ** A simple visitor for nodes.
- **/
-
-#pragma once
-
-#include "cvc4_private.h"
-
-#include <vector>
-
-#include "expr/node.h"
-
-namespace CVC4 {
-
-/**
- * Traverses the nodes reverse-topologically (children before parents),
- * calling the visitor in order.
- */
-template<typename Visitor>
-class NodeVisitor {
-
- /** For re-entry checking */
- static thread_local bool s_inRun;
-
- /**
- * Guard against NodeVisitor<> being re-entrant.
- */
- template <class T>
- class GuardReentry {
- T& d_guard;
- public:
- GuardReentry(T& guard)
- : d_guard(guard) {
- Assert(!d_guard);
- d_guard = true;
- }
- ~GuardReentry() {
- Assert(d_guard);
- d_guard = false;
- }
- };/* class NodeVisitor<>::GuardReentry */
-
-public:
-
- /**
- * Element of the stack.
- */
- struct stack_element {
- /** The node to be visited */
- TNode d_node;
- /** The parent of the node */
- TNode d_parent;
- /** Have the children been queued up for visitation */
- bool d_childrenAdded;
- stack_element(TNode node, TNode parent)
- : d_node(node), d_parent(parent), d_childrenAdded(false)
- {
- }
- };/* struct preprocess_stack_element */
-
- /**
- * Performs the traversal.
- */
- static typename Visitor::return_type run(Visitor& visitor, TNode node) {
-
- GuardReentry<bool> guard(s_inRun);
-
- // Notify of a start
- visitor.start(node);
-
- // Do a reverse-topological sort of the subexpressions
- std::vector<stack_element> toVisit;
- toVisit.push_back(stack_element(node, node));
- while (!toVisit.empty()) {
- stack_element& stackHead = toVisit.back();
- // The current node we are processing
- TNode current = stackHead.d_node;
- TNode parent = stackHead.d_parent;
-
- if (visitor.alreadyVisited(current, parent)) {
- // If already visited, we're done
- toVisit.pop_back();
- }
- else if (stackHead.d_childrenAdded)
- {
- // Call the visitor
- visitor.visit(current, parent);
- // Done with this node, remove from the stack
- toVisit.pop_back();
- }
- else
- {
- // Mark that we have added the children
- stackHead.d_childrenAdded = true;
- // We need to add the children
- for(TNode::iterator child_it = current.begin(); child_it != current.end(); ++ child_it) {
- TNode childNode = *child_it;
- if (!visitor.alreadyVisited(childNode, current)) {
- toVisit.push_back(stack_element(childNode, current));
- }
- }
- }
- }
-
- // Notify that we're done
- return visitor.done(node);
- }
-
-};/* class NodeVisitor<> */
-
-template <typename Visitor>
-thread_local bool NodeVisitor<Visitor>::s_inRun = false;
-
-}/* CVC4 namespace */
#include "expr/node.h"
#include "expr/node_algorithm.h"
#include "expr/node_builder.h"
+#include "expr/node_visitor.h"
#include "options/bv_options.h"
#include "options/options.h"
#include "options/proof_options.h"
#include "proof/theory_proof.h"
#include "smt/logic_exception.h"
#include "smt/term_formula_removal.h"
-#include "smt_util/node_visitor.h"
#include "theory/arith/arith_ite_utils.h"
#include "theory/bv/theory_bv_utils.h"
#include "theory/care_graph.h"