ef81de1cf41c121f476f7560598edeb09724e808
[IRC.git] / Robust / src / Runtime / oooJava / hashStructure.h
1 #ifndef HASHSTRUCTURE_H_
2 #define HASHSTRUCTURE_H_
3
4 #include "mlp_runtime.h"
5 #include "WaitingQueue.h"
6
7 #define ITEM_NOT_AT_FRONT_OF_WAITINGQ = 3;
8 #define TRAVERSER_FINISHED = 2;
9 #define NUM_WAITING_Q_ITEMS 20
10
11 #define READEFFECT 0
12 #define WRITEEFFECT 1
13
14 #define READBIN 0
15 #define WRITEBIN 1
16
17 #define READY 1
18 #define NOTREADY 0
19
20 #define TRUE 1
21 #define FALSE 0
22
23 #define NUMBINS 64
24 #define NUMREAD 64
25 #define NUMITEMS 64
26 #define NUMRENTRY 256
27 #define H_MASK (NUMBINS<<4)-1
28
29 //Note: put resolved things at the end and unresolved at the front.
30 typedef struct BinItem_rcr {
31   int total;
32   int status;
33   int type;
34   //TODO keep track of record ptr here
35   struct BinItem_rcr * next;
36 } BinItem_rcr;
37
38 typedef struct trackerElement {
39   BinItem_rcr * item;
40   struct trackerElement * next;
41 } TrackerElement;
42
43 typedef struct tracker {
44   TrackerElement * head;
45   TrackerElement * tail;
46 } VariableTracker;
47
48 //TODO more closely tie this in with Jim's stuff
49 struct genericObjectStruct {
50         int type;
51         int oid;
52         int allocsite;
53         int ___cachedCode___;
54         int ___cachedHash___;
55 };
56
57
58 typedef struct BinElement_rcr {
59   BinItem_rcr * head;
60   BinItem_rcr * tail;
61 } BinElement_rcr;
62
63
64 typedef struct Hashtable_rcr {
65   BinElement_rcr array[NUMBINS];
66   WaitingQueueBin * waitingQueue;
67 } HashStructure;
68
69 //Todo this is a clone of REntry, remove data fields as necessary
70 typedef struct entry_rcr{
71   //fields to handle next item.
72   struct Hashtable_rcr* hashtable;
73   BinItem_rcr* binitem; //stores binItem so we can get access to the next ptr in the queue
74
75   //fields to help resume traverser
76   struct genericObjectStruct * resumePtr;
77 //  int allocsite; //not needed since we can get it form ptr later
78   int traverserID;
79   SESEcommon * task;
80   struct genericObjectStruct * heaproot;
81 } TraverserData;
82
83 typedef struct WriteBinItem_rcr {
84   BinItem_rcr item;
85   TraverserData val;
86 } WriteBinItem_rcr;
87
88 typedef struct ReadBinItem_rcr {
89   BinItem_rcr item;
90   TraverserData array[NUMREAD];
91   int index;
92 } ReadBinItem_rcr;
93
94 #endif