X-Git-Url: http://plrg.eecs.uci.edu/git/?p=satune.git;a=blobdiff_plain;f=src%2FASTTransform%2Fintegerencoding.cc;h=2a7b9012f74eae6272ef4a97d23545060028a67a;hp=50cb29b27ec0adc86f7d7e54c8ccbae348914f6d;hb=cbd921ee35b6a29934fd7cecccde7f160228af17;hpb=c03a7980279026fd542e55df0aca8cd5eaa2c4a5 diff --git a/src/ASTTransform/integerencoding.cc b/src/ASTTransform/integerencoding.cc index 50cb29b..2a7b901 100644 --- a/src/ASTTransform/integerencoding.cc +++ b/src/ASTTransform/integerencoding.cc @@ -6,6 +6,7 @@ #include "integerencodingrecord.h" #include "integerencorderresolver.h" #include "tunable.h" +#include "polarityassignment.h" IntegerEncodingTransform::IntegerEncodingTransform(CSolver *_solver) : Transform(_solver) @@ -16,12 +17,14 @@ IntegerEncodingTransform::~IntegerEncodingTransform() { } void IntegerEncodingTransform::doTransform() { + if(solver->isUnSAT()){ + return; + } HashsetOrder *orders = solver->getActiveOrders()->copy(); - SetIteratorOrder * orderit=orders->iterator(); - while(orderit->hasNext()) { + SetIteratorOrder *orderit = orders->iterator(); + while (orderit->hasNext()) { Order *order = orderit->next(); - if (GETVARTUNABLE(solver->getTuner(), order->type, ORDERINTEGERENCODING, &onoff) && - order->encoding.resolver == NULL) + if (GETVARTUNABLE(solver->getTuner(), order->type, ORDERINTEGERENCODING, &offon)) integerEncode(order); } delete orders; @@ -45,11 +48,10 @@ void IntegerEncodingTransform::orderIntegerEncodingSATEncoder(BooleanOrder *bool //getting two elements and using LT predicate ... Element *elem1 = ierec->getOrderIntegerElement(solver, boolOrder->first); Element *elem2 = ierec->getOrderIntegerElement(solver, boolOrder->second); - Set *sarray[] = {ierec->getSecondarySet(), ierec->getSecondarySet()}; - Predicate *predicate = solver->createPredicateOperator(SATC_LT, sarray, 2); + Predicate *predicate = solver->createPredicateOperator(SATC_LT); Element *parray[] = {elem1, elem2}; BooleanEdge boolean = solver->applyPredicate(predicate, parray, 2); - solver->addConstraint(boolean); + updateEdgePolarity(boolean, boolOrder); solver->replaceBooleanWithBoolean(boolOrder, boolean); }