1 #ifndef cxsa_hash_table_h_
2 #define cxsa_hash_table_h_
3 
4 #include "cxsa_memory.h"
5 
6 #include "EXTERN.h"
7 #include "ppport.h"
8 #include "perl.h"
9 
10 typedef struct HashTableEntry {
11     struct HashTableEntry* next;
12     const char* key;
13     STRLEN len;
14     void * value;
15 } HashTableEntry;
16 
17 typedef struct {
18     struct HashTableEntry** array;
19     UV size;
20     UV items;
21     NV threshold;
22 } HashTable;
23 
24 /* void * CXSA_HashTable_delete(HashTable* table, const char* key, STRLEN len); */
25 void * CXSA_HashTable_fetch(HashTable* table, const char* key, STRLEN len);
26 void * CXSA_HashTable_store(HashTable* table, const char* key, STRLEN len, void * value);
27 HashTableEntry* CXSA_HashTable_find(HashTable* table, const char* key, STRLEN len);
28 HashTable* CXSA_HashTable_new(UV size, NV threshold);
29 void CXSA_HashTable_clear(HashTable* table, bool do_release_values);
30 void CXSA_HashTable_free(HashTable* table, bool do_release_values);
31 void CXSA_HashTable_grow(HashTable* table);
32 
33 #endif
34