#include "mutableset.h"
#include "csolver.h"
+#include "qsort.h"
MutableSet::MutableSet(VarType t) : Set(t) {
}
s = solver->createMutableSet(type);
for (uint i = 0; i < members->getSize(); i++) {
((MutableSet *)s)->addElementMSet(members->get(i));
- // solver->addItem((MutableSet *) s, members->get(i));
+ solver->addItem((MutableSet *) s, members->get(i));
}
+ ((MutableSet*)s)->finalize();
map->put(this, s);
return s;
}
+
+void MutableSet::finalize(){
+ bsdqsort(members->expose(), members->getSize(), sizeof(uint64_t), intcompare);
+}
\ No newline at end of file
void addElementMSet(uint64_t element);
Set *clone(CSolver *solver, CloneMap *map);
bool isMutableSet() {return true;}
+ void finalize();
CMEMALLOC;
};
#endif
#include "serializer.h"
#include "qsort.h"
-Set::Set(VarType t) : type(t), isRange(false), low(0), high(0) {
- members = new Vector<uint64_t>();
-}
-
int intcompare(const void *p1, const void *p2) {
uint64_t a=*(uint64_t const *) p1;
uint64_t b=*(uint64_t const *) p2;
return 1;
}
+Set::Set(VarType t) : type(t), isRange(false), low(0), high(0) {
+ members = new Vector<uint64_t>();
+}
+
+
Set::Set(VarType t, uint64_t *elements, uint num) : type(t), isRange(false), low(0), high(0) {
members = new Vector<uint64_t>(num, elements);
bsdqsort(members->expose(), members->getSize(), sizeof(uint64_t), intcompare);
};
+int intcompare(const void *p1, const void *p2);
#endif/* SET_H */
return element;
}
+void CSolver::finalizeMutableSet(MutableSet* set){
+ set->finalize();
+}
+
Element *CSolver::getElementVar(Set *set) {
Element *element = new ElementSet(set);
allElements.push(element);
items to the set. */
uint64_t createUniqueItem(MutableSet *set);
+
+ /**
+ * Freeze and finalize the mutableSet ...
+ */
+ void finalizeMutableSet(MutableSet* set);
/** This function creates an element variable over a set. */