Branch data Line data Source code
1 : : /****************************************************************************** 2 : : * Top contributors (to current version): 3 : : * Andrew Reynolds 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 : : * Term context stack. 14 : : */ 15 : : 16 : : #include "expr/term_context_stack.h" 17 : : 18 : : #include "expr/term_context.h" 19 : : 20 : : namespace cvc5::internal { 21 : : 22 : 1944620 : TCtxStack::TCtxStack(const TermContext* tctx) : d_tctx(tctx) {} 23 : : 24 : 1944620 : void TCtxStack::pushInitial(Node t) 25 : : { 26 [ - + ][ - + ]: 1944620 : Assert(d_stack.empty()); [ - - ] 27 : 1944620 : d_stack.push_back(std::pair<Node, uint32_t>(t, d_tctx->initialValue())); 28 : 1944620 : } 29 : : 30 : 390711 : void TCtxStack::pushChildren(Node t, uint32_t tval) 31 : : { 32 [ + + ]: 1062200 : for (size_t i = 0, nchild = t.getNumChildren(); i < nchild; i++) 33 : : { 34 : 671491 : pushChild(t, tval, i); 35 : : } 36 : 390711 : } 37 : : 38 : 13930900 : void TCtxStack::pushChild(Node t, uint32_t tval, size_t index) 39 : : { 40 [ - + ][ - + ]: 13930900 : Assert(index < t.getNumChildren()); [ - - ] 41 [ + - ]: 27861900 : Trace("tctx-debug") << "TCtxStack::pushChild: computing " << t << "[" << index 42 : 13930900 : << "] / " << tval << std::endl; 43 : 13930900 : uint32_t tcval = d_tctx->computeValue(t, tval, index); 44 [ + - ]: 27861900 : Trace("tctx-debug") << "TCtxStack::pushChild: returned " << t << "[" << index 45 : 13930900 : << "] / " << tval << " ---> " << tcval << std::endl; 46 : 13930900 : d_stack.push_back(std::pair<Node, uint32_t>(t[index], tcval)); 47 : 13930900 : } 48 : : 49 : 0 : void TCtxStack::pushOp(Node t, uint32_t tval) 50 : : { 51 : 0 : Assert(t.hasOperator()); 52 : 0 : uint32_t toval = d_tctx->computeValueOp(t, tval); 53 : 0 : d_stack.push_back(std::pair<Node, uint32_t>(t.getOperator(), toval)); 54 : 0 : } 55 : : 56 : 461187 : void TCtxStack::push(Node t, uint32_t tval) 57 : : { 58 : 461187 : d_stack.push_back(std::pair<Node, uint32_t>(t, tval)); 59 : 461187 : } 60 : : 61 : 16336700 : void TCtxStack::pop() { d_stack.pop_back(); } 62 : : 63 : 0 : void TCtxStack::clear() { d_stack.clear(); } 64 : 0 : size_t TCtxStack::size() const { return d_stack.size(); } 65 : : 66 : 23188900 : bool TCtxStack::empty() const { return d_stack.empty(); } 67 : : 68 : 23185600 : std::pair<Node, uint32_t> TCtxStack::getCurrent() const 69 : : { 70 : 23185600 : return d_stack.back(); 71 : : } 72 : : 73 : 0 : TCtxNode TCtxStack::getCurrentNode() const 74 : : { 75 : 0 : std::pair<Node, uint32_t> curr = TCtxStack::getCurrent(); 76 : 0 : return TCtxNode(curr.first, curr.second, d_tctx); 77 : : } 78 : : 79 : : } // namespace cvc5::internal