X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=src%2FAST%2Fmutableset.cc;h=31ce431cffb0af3eb207957564a2cf5e3b0f5026;hb=19c299fd9e91386883e788f445d153abfe58430a;hp=19f6dec8b3878a02126245be10f5a246ad4ec55b;hpb=3e22517a4f2edbc67f6f575ac6379ba8ab0edb70;p=satune.git diff --git a/src/AST/mutableset.cc b/src/AST/mutableset.cc index 19f6dec..31ce431 100644 --- a/src/AST/mutableset.cc +++ b/src/AST/mutableset.cc @@ -1,4 +1,6 @@ #include "mutableset.h" +#include "csolver.h" +#include "qsort.h" MutableSet::MutableSet(VarType t) : Set(t) { } @@ -6,3 +8,21 @@ MutableSet::MutableSet(VarType t) : Set(t) { 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