Compiles
[satune.git] / src / Collections / corestructs.h
1 #ifndef CORESTRUCTS_H
2 #define CORESTRUCTS_H
3
4 #include "cppvector.h"
5 #include "hashset.h"
6
7 class BooleanEdge {
8  public:
9  BooleanEdge() : b(NULL) {}
10  BooleanEdge(Boolean * _b) : b(_b) {}
11         BooleanEdge negate() {return BooleanEdge((Boolean *)(((uintptr_t) b) ^ 1));}
12         bool operator==(BooleanEdge e) { return b==e.b;}
13         bool operator!=(BooleanEdge e) { return b!=e.b;}
14         bool isNegated() { return ((uintptr_t) b) & 1; }
15         Boolean * getBoolean() {return (Boolean *)(((uintptr_t)b) & ~((uintptr_t) 1));}
16         Boolean * getRaw() {return b;}
17         Boolean * operator->() {return getBoolean();}
18         operator bool() const {return b != NULL;}
19  private:
20         Boolean *b;
21 };
22
23 inline bool boolEdgeEquals(BooleanEdge b1, BooleanEdge b2) {
24         return b1==b2;
25 }
26
27 inline unsigned int boolEdgeHash(BooleanEdge b) {
28         return (unsigned int) (((uintptr_t)b.getRaw())>>4);
29 }
30                                                                         
31 typedef Hashset<BooleanEdge, uintptr_t, 4, & boolEdgeHash, & boolEdgeEquals> HashsetBooleanEdge;
32 typedef Hashset<Order *, uintptr_t, 4> HashsetOrder;
33 typedef SetIterator<BooleanEdge, uintptr_t, 4, & boolEdgeHash, & boolEdgeEquals> SetIteratorBooleanEdge;
34 typedef SetIterator<Order *, uintptr_t, 4> SetIteratorOrder;
35
36 #endif