void SharedTermsDatabase::markNotified(TNode term, Theory::Set theories) { // Find out if there are any new theories that were notified about this term Theory::Set alreadyNotified = 0; AlreadyNotifiedMap::iterator theoriesFind = d_alreadyNotifiedMap.find(term); if (theoriesFind != d_alreadyNotifiedMap.end()) { alreadyNotified = (*theoriesFind).second; } Theory::Set newlyNotified = Theory::setDifference(theories, alreadyNotified); // If no new theories were notified, we are done if (newlyNotified == 0) { return; } Debug("shared-terms-database") << "SharedTermsDatabase::markNotified(" << term << ")" << endl; // First update the set of notified theories for this term d_alreadyNotifiedMap[term] = Theory::setUnion(newlyNotified, alreadyNotified); // Mark the shared terms in the equality engine theory::TheoryId currentTheory; while ((currentTheory = Theory::setPop(newlyNotified)) != THEORY_LAST) { d_equalityEngine.addTriggerTerm(term, currentTheory); } // Check for any conflits checkForConflict(); }
void SharedTermsDatabase::assertEquality(TNode equality, bool polarity, TNode reason) { Debug("shared-terms-database::assert") << "SharedTermsDatabase::assertEquality(" << equality << ", " << (polarity ? "true" : "false") << ", " << reason << ")" << endl; // Add it to the equality engine d_equalityEngine.assertEquality(equality, polarity, reason); // Check for conflict checkForConflict(); }
bool ItemBank::addToBank(Item* itemPtr) { //if(bank.empty()) { bank.push_back(itemPtr); //} else { // vector<Item*>::iterator iter = findLocationToInsert(itemPtr); // bank.insert(iter, itemPtr); //} update(); return checkForConflict(itemPtr); }
void SharedTermsDatabase::addEqualityToPropagate(TNode equality) { d_registeredEqualities.insert(equality); d_equalityEngine.addTriggerEquality(equality); checkForConflict(); }