}
}
+uint64_t Set::getMemberAt(uint index){
+ if(isRange){
+ return low+index;
+ }else {
+ return members->get(index);
+ }
+}
+
Set::~Set() {
if (!isRange)
delete members;
virtual ~Set();
bool exists(uint64_t element);
uint getSize();
+ VarType getType(){return type;}
+ uint64_t getNewUniqueItem(){return low++;}
+ uint64_t getMemberAt(uint index);
uint64_t getElement(uint index);
virtual Set *clone(CSolver *solver, CloneMap *map);
-
+ MEMALLOC;
+protected:
VarType type;
bool isRange;
uint64_t low;//also used to count unique items
uint64_t high;
Vector<uint64_t> *members;
- MEMALLOC;
+
};
#endif/* SET_H */
delete decompose;
delete graph;
- /*
IntegerEncodingTransform* integerEncoding = new IntegerEncodingTransform(This, order);
if(!integerEncoding->canExecuteTransform()){
delete integerEncoding;
continue;
}
integerEncoding->doTransform();
- delete integerEncoding;*/
+ delete integerEncoding;
}
}
if (ordervec.getSize() > from->sccNum)
neworder = ordervec.get(from->sccNum);
if (neworder == NULL) {
- MutableSet *set = solver->createMutableSet(order->set->type);
+ MutableSet *set = solver->createMutableSet(order->set->getType());
neworder = solver->createOrder(order->type, set);
ordervec.setExpand(from->sccNum, neworder);
if (order->type == PARTIAL)
void IntegerEncodingTransform::doTransform(){
if (!orderIntegerEncoding->contains(order)) {
orderIntegerEncoding->put(order, new IntegerEncodingRecord(
- solver->createRangeSet(order->set->type, 0, (uint64_t) order->set->getSize()-1)));
+ solver->createRangeSet(order->set->getType(), 0, (uint64_t) order->set->getSize()-1)));
}
uint size = order->constraints.getSize();
for(uint i=0; i<size; i++){
model_print("in total order ...\n");
#endif
ASSERT(order->type == TOTAL);
- Vector<uint64_t> *mems = order->set->members;
- uint size = mems->getSize();
+ Set *set = order->set;
+ uint size = order->set->getSize();
for (uint i = 0; i < size; i++) {
- uint64_t valueI = mems->get(i);
+ uint64_t valueI = set->getMemberAt(i);
for (uint j = i + 1; j < size; j++) {
- uint64_t valueJ = mems->get(j);
+ uint64_t valueJ = set->getMemberAt(j);
OrderPair pairIJ(valueI, valueJ, E_NULL);
Edge constIJ = getPairConstraint(order, &pairIJ);
for (uint k = j + 1; k < size; k++) {
- uint64_t valueK = mems->get(k);
+ uint64_t valueK = set->getMemberAt(k);
OrderPair pairJK(valueJ, valueK, E_NULL);
OrderPair pairIK(valueI, valueK, E_NULL);
Edge constIK = getPairConstraint(order, &pairIK);
void ElementEncoding::encodingArrayInitialization() {
Set *set = getElementSet(element);
- ASSERT(!set->isRange);
- uint size = set->members->getSize();
+ uint size = set->getSize();
uint encSize = getSizeEncodingArray(size);
allocEncodingArrayElement(encSize);
allocInUseArrayElement(encSize);
for (uint i = 0; i < size; i++) {
- encodingArray[i] = set->members->get(i);
+ encodingArray[i] = set->getMemberAt(i);
setInUseElement(i);
}
}
}
uint64_t CSolver::createUniqueItem(MutableSet *set) {
- uint64_t element = set->low++;
+ uint64_t element = set->getNewUniqueItem();
set->addElementMSet(element);
return element;
}