Branch data Line data Source code
1 : : /****************************************************************************** 2 : : * Top contributors (to current version): 3 : : * Aina Niemetz, Andrew Reynolds, Gereon Kremer 4 : : * 5 : : * This file is part of the cvc5 project. 6 : : * 7 : : * Copyright (c) 2009-2024 by the authors listed in the file AUTHORS 8 : : * in the top-level source directory and their institutional affiliations. 9 : : * All rights reserved. See the file COPYING in the top-level source 10 : : * directory for licensing information. 11 : : * **************************************************************************** 12 : : * 13 : : * The base class for everything that nees access to the environment (Env) 14 : : * instance, which gives access to global utilities available to internal code. 15 : : */ 16 : : 17 : : #include "cvc5_private.h" 18 : : 19 : : #ifndef CVC5__SMT__ENV_OBJ_H 20 : : #define CVC5__SMT__ENV_OBJ_H 21 : : 22 : : #include <memory> 23 : : 24 : : #include "expr/node.h" 25 : : 26 : : namespace cvc5::context { 27 : : class Context; 28 : : class UserContext; 29 : : } // namespace cvc5::context 30 : : 31 : : namespace cvc5::internal { 32 : : 33 : : class Env; 34 : : class LogicInfo; 35 : : class NodeManager; 36 : : class Options; 37 : : class StatisticsRegistry; 38 : : 39 : : namespace options { 40 : : enum class OutputTag; 41 : : } 42 : : using OutputTag = options::OutputTag; 43 : : 44 : : class EnvObj 45 : : { 46 : : protected: 47 : : /** Constructor. */ 48 : : EnvObj(Env& env); 49 : : EnvObj() = delete; 50 : : /** Destructor. */ 51 : 20502852 : virtual ~EnvObj() {} 52 : : 53 : : /** Get a pointer to the node manager */ 54 : : NodeManager* nodeManager() const; 55 : : 56 : : /** 57 : : * Rewrite a node. 58 : : * This is a wrapper around theory::Rewriter::rewrite via Env. 59 : : */ 60 : : Node rewrite(TNode node) const; 61 : : /** 62 : : * Rewrite a node. 63 : : * This is a wrapper around theory::Rewriter::rewriteEqualityExt via Env. 64 : : */ 65 : : Node rewriteEqualityExt(TNode node) const; 66 : : /** 67 : : * Extended rewrite a node. 68 : : * This is a wrapper around theory::Rewriter::extendedRewrite via Env. 69 : : */ 70 : : Node extendedRewrite(TNode node, bool aggr = true) const; 71 : : /** 72 : : * Evaluate node n under the substitution args -> vals. 73 : : * This is a wrapper about theory::Rewriter::evaluate via Env. 74 : : */ 75 : : Node evaluate(TNode n, 76 : : const std::vector<Node>& args, 77 : : const std::vector<Node>& vals, 78 : : bool useRewriter = true) const; 79 : : /** Same as above, with a visited cache. */ 80 : : Node evaluate(TNode n, 81 : : const std::vector<Node>& args, 82 : : const std::vector<Node>& vals, 83 : : const std::unordered_map<Node, Node>& visited, 84 : : bool useRewriter = true) const; 85 : : 86 : : /** Get the options object (const version only) via Env. */ 87 : : const Options& options() const; 88 : : 89 : : /** Get a pointer to the Context via Env. */ 90 : : context::Context* context() const; 91 : : 92 : : /** Get a pointer to the UserContext via Env. */ 93 : : context::UserContext* userContext() const; 94 : : 95 : : /** Get the resource manager owned by this Env. */ 96 : : ResourceManager* resourceManager() const; 97 : : 98 : : /** Get the current logic information. */ 99 : : const LogicInfo& logicInfo() const; 100 : : 101 : : /** Get the statistics registry via Env. */ 102 : : StatisticsRegistry& statisticsRegistry() const; 103 : : 104 : : /** Convenience wrapper for Env::isOutputOn(). */ 105 : : bool isOutputOn(OutputTag tag) const; 106 : : 107 : : /** Convenience wrapper for Env::output(). */ 108 : : std::ostream& output(OutputTag tag) const; 109 : : 110 : : /** Convenience wrapper for Env::isVerboseOn(). */ 111 : : bool isVerboseOn(int64_t level) const; 112 : : 113 : : /** Convenience wrapper for Env::verbose(). */ 114 : : std::ostream& verbose(int64_t) const; 115 : : 116 : : /** Convenience wrapper for Env::verbose(0). */ 117 : : std::ostream& warning() const; 118 : : 119 : : /** The associated environment. */ 120 : : Env& d_env; 121 : : }; 122 : : 123 : : } // namespace cvc5::internal 124 : : #endif