void ToSATAIG::mark_variables_as_frozen(SATSolver& satSolver) { for (ArrayTransformer::ArrType::iterator it = arrayTransformer->arrayToIndexToRead.begin(); it != arrayTransformer->arrayToIndexToRead.end(); it++) { const ArrayTransformer::arrTypeMap& atm = it->second; for (ArrayTransformer::arrTypeMap::const_iterator arr_it = atm.begin(); arr_it != atm.end(); arr_it++) { const ArrayTransformer::ArrayRead& ar = arr_it->second; ASTNodeToSATVar::iterator it = nodeToSATVar.find(ar.index_symbol); if (it != nodeToSATVar.end()) { const vector<unsigned>& v = it->second; for (size_t i = 0, size = v.size(); i < size; ++i) satSolver.setFrozen(v[i]); } ASTNodeToSATVar::iterator it2 = nodeToSATVar.find(ar.symbol); if (it2 != nodeToSATVar.end()) { const vector<unsigned>& v = it2->second; for (size_t i = 0, size = v.size(); i < size; ++i) satSolver.setFrozen(v[i]); } } } }
void getSatVariables(const ASTNode& a, vector<unsigned>& v_a, SATSolver& SatSolver, ToSATBase::ASTNodeToSATVar& satVar) { ToSATBase::ASTNodeToSATVar::iterator it = satVar.find(a); if (it != satVar.end()) v_a = it->second; else if (!a.isConstant()) { assert(a.GetKind() == SYMBOL); // It was ommitted from the initial problem, so assign it freshly. for (unsigned i = 0; i < a.GetValueWidth(); i++) { uint32_t v = SatSolver.newVar(); // We probably don't want the variable eliminated. SatSolver.setFrozen(v); v_a.push_back(v); } satVar.insert(make_pair(a, v_a)); } }