#include "mutableset.h"
+#include "csolver.h"
+#include "qsort.h"
-MutableSet *allocMutableSet(VarType t) {
- MutableSet *This = (MutableSet *)ourmalloc(sizeof(MutableSet));
- This->type = t;
- This->isRange = false;
- This->low = 0;
- This->high = 0;
- This->members = allocDefVectorInt();
- return This;
+MutableSet::MutableSet(VarType t) : Set(t) {
}
-void addElementMSet(MutableSet *set, uint64_t element) {
- pushVectorInt(set->members, element);
+void MutableSet::addElementMSet(uint64_t element) {
+ members->push(element);
}
+
+Set *MutableSet::clone(CSolver *solver, CloneMap *map) {
+ Set *s = (Set *) map->get(this);
+ if (s != NULL)
+ return s;
+ 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));
+ }
+ ((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