Branch data Line data Source code
1 : : /****************************************************************************** 2 : : * Top contributors (to current version): 3 : : * Tim King, Dejan Jovanovic, Morgan Deters 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 : : * AttributeManager implementation. 14 : : */ 15 : : #include "expr/attribute.h" 16 : : 17 : : #include <utility> 18 : : 19 : : #include "base/output.h" 20 : : #include "expr/node_value.h" 21 : : 22 : : using namespace std; 23 : : 24 : : namespace cvc5::internal { 25 : : namespace expr { 26 : : namespace attr { 27 : : 28 : 27558 : AttributeManager::AttributeManager() : 29 : 27558 : d_inGarbageCollection(false) 30 : 27558 : {} 31 : : 32 : 231129000 : bool AttributeManager::inGarbageCollection() const { 33 : 231129000 : return d_inGarbageCollection; 34 : : } 35 : : 36 : 0 : void AttributeManager::debugHook(int debugFlag) { 37 : : /* DO NOT CHECK IN ANY CODE INTO THE DEBUG HOOKS! 38 : : * debugHook() is an empty function for the purpose of debugging 39 : : * the AttributeManager without recompiling all of cvc5. 40 : : * Formally this is a nop. 41 : : */ 42 : 0 : } 43 : : 44 : 123501000 : void AttributeManager::deleteAllAttributes(NodeValue* nv) { 45 [ - + ][ - + ]: 123501000 : Assert(!inGarbageCollection()); [ - - ] 46 : 123501000 : d_bools.erase(nv); 47 : 123501000 : deleteFromTable(d_ints, nv); 48 : 123501000 : deleteFromTable(d_tnodes, nv); 49 : 123501000 : deleteFromTable(d_nodes, nv); 50 : 123501000 : deleteFromTable(d_types, nv); 51 : 123501000 : deleteFromTable(d_strings, nv); 52 : 123501000 : } 53 : : 54 : 27558 : void AttributeManager::deleteAllAttributes() { 55 : 27558 : d_bools.clear(); 56 : 27558 : deleteAllFromTable(d_ints); 57 : 27558 : deleteAllFromTable(d_tnodes); 58 : 27558 : deleteAllFromTable(d_nodes); 59 : 27558 : deleteAllFromTable(d_types); 60 : 27558 : deleteAllFromTable(d_strings); 61 : 27558 : } 62 : : 63 : 0 : void AttributeManager::deleteAttributes(const AttrIdVec& atids) { 64 : : typedef std::map<uint64_t, std::vector< uint64_t> > AttrToVecMap; 65 : 0 : AttrToVecMap perTableIds; 66 : : 67 [ - - ]: 0 : for(AttrIdVec::const_iterator it = atids.begin(), it_end = atids.end(); it != it_end; ++it) { 68 : 0 : const AttributeUniqueId& pair = *(*it); 69 : 0 : std::vector< uint64_t>& inTable = perTableIds[pair.getTableId()]; 70 : 0 : inTable.push_back(pair.getWithinTypeId()); 71 : : } 72 : 0 : AttrToVecMap::iterator it = perTableIds.begin(), it_end = perTableIds.end(); 73 [ - - ]: 0 : for(; it != it_end; ++it) { 74 : 0 : Assert(((*it).first) <= LastAttrTable); 75 : 0 : AttrTableId tableId = (AttrTableId) ((*it).first); 76 : 0 : std::vector< uint64_t>& ids = (*it).second; 77 : 0 : std::sort(ids.begin(), ids.end()); 78 : : 79 [ - - ][ - - ]: 0 : switch(tableId) { [ - - ][ - - ] 80 : 0 : case AttrTableBool: 81 : 0 : Unimplemented() << "delete attributes is unimplemented for bools"; 82 : : break; 83 : 0 : case AttrTableUInt64: 84 : 0 : deleteAttributesFromTable(d_ints, ids); 85 : 0 : break; 86 : 0 : case AttrTableTNode: 87 : 0 : deleteAttributesFromTable(d_tnodes, ids); 88 : 0 : break; 89 : 0 : case AttrTableNode: 90 : 0 : deleteAttributesFromTable(d_nodes, ids); 91 : 0 : break; 92 : 0 : case AttrTableTypeNode: 93 : 0 : deleteAttributesFromTable(d_types, ids); 94 : 0 : break; 95 : 0 : case AttrTableString: 96 : 0 : deleteAttributesFromTable(d_strings, ids); 97 : 0 : break; 98 : : 99 : 0 : case AttrTableCDBool: 100 : : case AttrTableCDUInt64: 101 : : case AttrTableCDTNode: 102 : : case AttrTableCDNode: 103 : : case AttrTableCDString: 104 : : case AttrTableCDPointer: 105 : 0 : Unimplemented() << "CDAttributes cannot be deleted. Contact Tim/Morgan " 106 : 0 : "if this behavior is desired."; 107 : : break; 108 : : 109 : 0 : case LastAttrTable: 110 : : default: 111 : 0 : Unreachable(); 112 : : } 113 : : } 114 : 0 : } 115 : : 116 : : } // namespace attr 117 : : } // namespace expr 118 : : } // namespace cvc5::internal