#include "set.h"
#include <stddef.h>
+#include "csolver.h"
+
+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 = allocVectorArrayInt(num, elements);
+ members = new Vector<uint64_t>(num, elements);
}
Set::Set(VarType t, uint64_t lowrange, uint64_t highrange) : type(t), isRange(true), low(lowrange), high(highrange), members(NULL) {
if (isRange) {
return element >= low && element <= high;
} else {
- uint size = getSizeVectorInt(members);
+ uint size = members->getSize();
for (uint i = 0; i < size; i++) {
- if (element == getVectorInt(members, i))
+ if (element == members->get(i))
return true;
}
return false;
if (isRange)
return low + index;
else
- return getVectorInt(members, index);
+ return members->get(index);
}
uint Set::getSize() {
if (isRange) {
return high - low + 1;
} else {
- return getSizeVectorInt(members);
+ return members->getSize();
}
}
Set::~Set() {
if (!isRange)
- deleteVectorInt(members);
+ delete members;
+}
+
+Set *Set::clone(CSolver *solver, CloneMap *map) {
+ Set *s = (Set *) map->get(this);
+ if (s != NULL)
+ return s;
+ if (isRange) {
+ s = solver->createRangeSet(type, low, high);
+ } else {
+ s = solver->createSet(type, members->expose(), members->getSize());
+ }
+ map->put(this, s);
+ return s;
}