Adding set and other types
[satune.git] / src / set.h
1 /*
2  * To change this license header, choose License Headers in Project Properties.
3  * To change this template file, choose Tools | Templates
4  * and open the template in the editor.
5  */
6
7 /* 
8  * File:   set.h
9  * Author: hamed
10  *
11  * Created on June 13, 2017, 3:01 PM
12  */
13
14 #ifndef SET_H
15 #define SET_H
16
17 #include "types.h"
18
19 enum Comparison{LESS, EQUAL, GREATER};
20
21 class Node{
22 private:
23     bool range;
24     // If it isn't a range, begin contains the actual value of the element
25     uint64 beginOrVal;
26     uint64 end;
27     Node* right;
28     Node* left;
29 public:
30     Node(uint64 val, Node* r, Node* l);
31     Node(uint64 val);
32     Node(uint64 begin, uint64 end, Node* r, Node* l);
33     Node(uint64 begin, uint64 end);
34     bool isRange(){return range;}
35     uint64 getBeginOrRange(){return beginOrVal;}
36     Comparison compare(uint64 val);
37     /**
38      * Searches the tree, if new node exists in the tree ( whether its value
39      * is in range of another node, or there is another node with the value of
40      * node n) this function just returns!
41      * @param n
42      */
43     void addNode(Node* n);
44 };
45 // For now, we can consider it as a simple binary tree, but we can have fancier
46 // trees for future
47 class Set{
48     Type type;
49     uint64 size;
50     Node* root;
51     Set(Type t, uint64 * elements, int num);
52     Set(Type t, uint64 lowrange, uint64 highrange);
53     Set(Type t);
54     /**
55      * For know all sets are considered to be mutable, we can change it later on
56      * if it was necessary.
57      * @param set
58      * @param element
59      */
60     void addItem(uint64 element);
61     ELEMENT* createUniqueItem(Set * set);
62
63 };
64
65
66 #endif /* SET_H */
67