edits
[satune.git] / src / AST / set.cc
1 #include "set.h"
2 #include <stddef.h>
3
4 Set::Set(VarType t, uint64_t *elements, uint num) : type(t), isRange(false), low(0), high(0) {
5         members = allocVectorArrayInt(num, elements);
6 }
7
8 Set::Set(VarType t, uint64_t lowrange, uint64_t highrange) : type(t), isRange(true), low(lowrange), high(highrange), members(NULL) {
9 }
10
11 bool Set::exists(uint64_t element) {
12         if (isRange) {
13                 return element >= low && element <= high;
14         } else {
15                 uint size = getSizeVectorInt(members);
16                 for (uint i = 0; i < size; i++) {
17                         if (element == getVectorInt(members, i))
18                                 return true;
19                 }
20                 return false;
21         }
22 }
23
24 uint64_t Set::getElement(uint index) {
25         if (isRange)
26                 return low + index;
27         else
28                 return getVectorInt(members, index);
29 }
30
31 uint Set::getSize() {
32         if (isRange) {
33                 return high - low + 1;
34         } else {
35                 return getSizeVectorInt(members);
36         }
37 }
38
39 Set::~Set() {
40         if (!isRange)
41                 deleteVectorInt(members);
42 }