6932bd0016f21283473c75fb812ff55f6b2bdd32
[IRC.git] / Robust / src / Runtime / oooJava / hashStructure.h
1 #ifndef HASHSTRUCTURE_H_\r
2 #define HASHSTRUCTURE_H_\r
3 \r
4 #include "mlp_runtime.h"\r
5 //#include "WaitingQueue.h"\r
6 \r
7 #define ITEM_NOT_AT_FRONT_OF_WAITINGQ 3\r
8 #define TRAVERSER_FINISHED 2\r
9 #define bitvt unsigned long long\r
10 \r
11 //Note READEFFECT = READBIN and WRITEEFFECT=WRITEBIN. They mean the same thing\r
12 //but are named differently for clarity in code.\r
13 #define READEFFECT 0\r
14 #define WRITEEFFECT 1\r
15 #define WAITINGQUEUENOTE 2\r
16 \r
17 #define READBIN 0\r
18 #define WRITEBIN 1\r
19 #define BINMASK 1\r
20 #define PARENTBIN 1\r
21 \r
22 #define SPECREADY 3\r
23 #define SPECNOTREADY 2\r
24 #define READY 1\r
25 #define NOTREADY 0\r
26 #define READYMASK 1\r
27 \r
28 #define TRUE 1\r
29 #define FALSE 0\r
30 \r
31 #define RNUMBINS 64\r
32 #define RNUMREAD 64\r
33 #define RNUMRENTRY 256\r
34 #define RH_MASK (RNUMBINS)-1\r
35 \r
36 //Note: put resolved things at the end and unresolved at the front.\r
37 typedef struct BinItem_rcr {\r
38   int total;\r
39   int status;\r
40   int type;\r
41   //TODO keep track of record ptr here\r
42   struct BinItem_rcr * next;\r
43 } BinItem_rcr;\r
44 \r
45 typedef struct BinElement_rcr {\r
46   BinItem_rcr * head;\r
47   BinItem_rcr * tail;\r
48 } BinElement_rcr;\r
49 \r
50 typedef struct Hashtable_rcr {\r
51   BinElement_rcr array[RNUMBINS];\r
52   //  WaitingQueueBin * waitingQueue;\r
53 } HashStructure;\r
54 \r
55 //Todo this is a clone of REntry, remove data fields as necessary\r
56 typedef struct Entry_rcr {\r
57   SESEcommon * task;\r
58   bitvt bitindex;\r
59 } TraverserData;\r
60 \r
61 typedef struct WriteBinItem_rcr {\r
62   BinItem_rcr item;\r
63   SESEcommon * task;\r
64   bitvt bitindexwr;\r
65   bitvt bitindexrd;\r
66 } WriteBinItem_rcr;\r
67 \r
68 typedef struct ReadBinItem_rcr {\r
69   BinItem_rcr item;\r
70   TraverserData array[RNUMREAD];\r
71   //We don't need a head index since if the item before it was freed, then all these would be considered ready as well.\r
72   int index;\r
73 } ReadBinItem_rcr;\r
74 \r
75 extern HashStructure ** allHashStructures;\r
76 \r
77 void rcr_createMasterHashTableArray(int maxSize); //temporary\r
78 HashStructure* rcr_createHashtable(int sizeofWaitingQueue);\r
79 WriteBinItem_rcr* rcr_createWriteBinItem();\r
80 ReadBinItem_rcr* rcr_createReadBinItem();\r
81 int rcr_isReadBinItem(BinItem_rcr* b);\r
82 int rcr_isWriteBinItem(BinItem_rcr* b);\r
83 inline int rcr_generateKey(void * ptr);\r
84 \r
85 //Method signatures are not in their final form since I have still not decided what is the optimum amount of data\r
86 //to store in each entry.\r
87 \r
88 int rcr_WRITEBINCASE(HashStructure *T, void *ptr, SESEcommon *task, int index);\r
89 int rcr_READBINCASE(HashStructure *T, void *ptr, SESEcommon * task, int index);\r
90 int rcr_TAILREADCASE(HashStructure *T, void * ptr, BinItem_rcr *val, BinItem_rcr *bintail, int key, SESEcommon * task, int index);\r
91 void rcr_TAILWRITECASE(HashStructure *T, void *ptr, BinItem_rcr *val, BinItem_rcr *bintail, int key, SESEcommon * task, int index);\r
92 \r
93 #endif\r