5 Set::Set(VarType t) : type(t), isRange(false), low(0), high(0) {
6 members = new Vector<uint64_t>();
9 Set::Set(VarType t, uint64_t *elements, uint num) : type(t), isRange(false), low(0), high(0) {
10 members = new Vector<uint64_t>(num, elements);
13 Set::Set(VarType t, uint64_t lowrange, uint64_t highrange) : type(t), isRange(true), low(lowrange), high(highrange), members(NULL) {
16 bool Set::exists(uint64_t element) {
18 return element >= low && element <= high;
20 uint size = members->getSize();
21 for (uint i = 0; i < size; i++) {
22 if (element == members->get(i))
29 uint64_t Set::getElement(uint index) {
33 return members->get(index);
38 return high - low + 1;
40 return members->getSize();
44 uint64_t Set::getMemberAt(uint index) {
48 return members->get(index);
57 Set *Set::clone(CSolver *solver, CloneMap *map) {
58 Set *s = (Set *) map->get(this);
62 s = solver->createRangeSet(type, low, high);
64 s = solver->createSet(type, members->expose(), members->getSize());