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