1 #ifndef DICT__H__ 2 #define DICT__H__ 3 4 #include "str.h" 5 #include "uint32.h" 6 7 #define DICT_HASHSTART 5381 8 uint32 dict_hashadd(uint32 h, const unsigned char* data, unsigned long len); 9 #define dict_hash(BUF,LEN) dict_hashadd(DICT_HASHSTART,BUF,LEN) 10 #define dict_hashstr(STR) dict_hashadd(DICT_HASHSTART,(const unsigned char*)(STR)->s,(STR)->len) 11 12 struct dict_entry 13 { 14 uint32 hash; 15 str key; 16 void* data; 17 }; 18 typedef struct dict_entry dict_entry; 19 20 struct dict 21 { 22 unsigned size; 23 unsigned count; 24 dict_entry** table; 25 }; 26 typedef struct dict dict; 27 28 extern int dict_init(dict*); 29 extern void dict_free(dict*, void (*free_data)(void*)); 30 extern int dict_add(dict*, const str*, void*); 31 extern dict_entry* dict_get(dict*, const str*); 32 extern void dict_foreach(dict* d, void (*fn)(const str* key, void** dataptr)); 33 extern void dict_str_free(void*); 34 35 extern int dict_load_list(dict*, const char* filename, int mustexist, 36 int (*xform)(str*)); 37 extern int dict_load_map(dict*, const char* filename, int mustexist, char sep, 38 int (*keyxform)(str*), int (*valxform)(str*)); 39 40 #endif 41