1 
2 #define MHTSZ 32
3 #define MHTNO 0
4 
5 typedef ut64 dicti;
6 
7 typedef struct {
8 	dicti k;
9 	dicti v;
10 	void *u;
11 #if 0
12 	// unaligned
13 	// on 32bits
14 	void *pad;
15 	// on 64bits
16 	void *pad;
17 #endif
18 } dictkv;
19 
20 // 4 + 4 + 4 = 12 .. missing 4 more
21 // 8 + 8 + 4 = 20 .. missing 16, what about 32 ?
22 // 8 + 8 + 8 = 24 .. still not there, missing 8
23 // 4 + 4 + 8 = 16 .. lgtm
24 
25 typedef void (*dict_freecb)(void *);
26 typedef int (*dictkv_cb)(dictkv *, void *);
27 
28 typedef struct {
29 	void **table; //[MHTSZ];
30 	dict_freecb f;
31 	ut32 size;
32 } dict;
33 
34 typedef dict SdbMini;
35 
36 SDB_API dict *dict_new(ut32 size, dict_freecb f);
37 SDB_API void dict_free(dict*);
38 SDB_API bool dict_init(dict *m, ut32, dict_freecb f);
39 SDB_API void dict_fini(dict *m);
40 SDB_API void dict_stats(dict *m);
41 SDB_API dicti dict_hash(const char *s);
42 SDB_API bool dict_set(dict *m, dicti k, dicti v, void *u);
43 SDB_API dictkv *dict_getr(dict *m, dicti k);
44 SDB_API dictkv *dict_getr(dict *m, dicti k);
45 SDB_API dicti dict_get(dict *m, dicti k);
46 SDB_API dicti dict_get(dict *m, dicti k);
47 SDB_API void *dict_getu(dict *m, dicti k);
48 SDB_API bool dict_add(dict *m, dicti k, dicti v, void *u);
49 SDB_API bool dict_del(dict *m, dicti k);
50 SDB_API void dict_foreach(dict *m, dictkv_cb cb, void *u);
51