378f1c98219320a3ab4951f44873d451c7786165
[IRC.git] / Robust / src / Runtime / STM / stmlookup.h
1 #ifndef _CLOOKUP_H_
2 #define _CLOOKUP_H_
3
4 #include <stdlib.h>
5 #include <stdio.h>
6
7 #ifndef INTPTR
8 #ifdef BIT64
9 #define INTPTR long
10 #else
11 #define INTPTR int
12 #endif
13 #endif
14
15 #define CLOADFACTOR 0.25
16 #define CHASH_SIZE 1024
17
18 #define INLINE    inline __attribute__((always_inline))
19
20 typedef struct chashlistnode {
21   void * key;
22   void * val;     //this can be cast to another type or used to point to a larger structure
23   struct chashlistnode *next;
24   struct chashlistnode *lnext;
25 } chashlistnode_t;
26
27 typedef struct chashtable {
28   chashlistnode_t *table;       // points to beginning of hash table
29   unsigned int size;
30   unsigned int mask;
31   unsigned int numelements;
32   unsigned int threshold;
33   double loadfactor;
34 } chashtable_t;
35
36 #define NUMCLIST 250
37 typedef struct clist {
38   struct chashlistnode array[NUMCLIST];
39   int num;
40   struct clist *next;
41 } cliststruct_t;
42
43
44 void t_chashCreate(unsigned int size, double loadfactor);
45 void t_chashInsert(void * key, void *val);
46 void * t_chashSearch(void * key);
47 unsigned int t_chashResize(unsigned int newsize);
48 void t_chashDelete();
49 void t_chashreset();
50
51 extern __thread chashlistnode_t *c_table;
52 extern __thread chashlistnode_t *c_list;
53 extern __thread unsigned int c_size;
54 extern __thread unsigned INTPTR c_mask;
55 extern __thread unsigned int c_numelements;
56 extern __thread unsigned int c_threshold;
57 extern __thread double c_loadfactor;
58 extern __thread cliststruct_t *c_structs;
59
60 #ifdef READSET
61
62 typedef struct rdchashlistnode {
63   void * key;
64   unsigned int version;
65   struct rdchashlistnode *next;
66   struct rdchashlistnode *lnext;
67 } rdchashlistnode_t;
68
69 typedef struct rdclist {
70   struct rdchashlistnode array[NUMCLIST];
71   int num;
72   struct rdclist *next;
73 } rdcliststruct_t;
74
75
76 extern __thread rdchashlistnode_t *rd_c_table;
77 extern __thread rdchashlistnode_t *rd_c_list;
78 extern __thread unsigned int rd_c_size;
79 extern __thread unsigned INTPTR rd_c_mask;
80 extern __thread unsigned int rd_c_numelements;
81 extern __thread unsigned int rd_c_threshold;
82 extern __thread double rd_c_loadfactor;
83 extern __thread rdcliststruct_t *rd_c_structs;
84
85 void rd_t_chashCreate(unsigned int size, double loadfactor);
86 void rd_t_chashInsertOnce(void * key, unsigned int val);
87 unsigned int rd_t_chashResize(unsigned int newsize);
88 void rd_t_chashDelete();
89 void rd_t_chashreset();
90 #endif
91
92 #ifdef DELAYCOMP
93 extern __thread chashlistnode_t *dc_c_table;
94 extern __thread chashlistnode_t *dc_c_list;
95 extern __thread unsigned int dc_c_size;
96 extern __thread unsigned INTPTR dc_c_mask;
97 extern __thread unsigned int dc_c_numelements;
98 extern __thread unsigned int dc_c_threshold;
99 extern __thread double dc_c_loadfactor;
100 extern __thread cliststruct_t *dc_c_structs;
101
102 void dc_t_chashCreate(unsigned int size, double loadfactor);
103 void dc_t_chashInsertOnce(void * key, void *val);
104 void * dc_t_chashSearch(void * key);
105 unsigned int dc_t_chashResize(unsigned int newsize);
106 void dc_t_chashDelete();
107 void dc_t_chashreset();
108 #endif
109 #endif