27 #ifndef INCLUDED_ADTS_DYN_HASH_TBL 28 #define INCLUDED_ADTS_DYN_HASH_TBL 39 bool equal(Key k1, Key k2)
const;
51 bool equal(
const char* k1,
const char* k2)
const 53 return !strcmp(k1, k2);
63 template<
typename Key,
typename T,
typename Traits=DHT_Traits<Key,T> >
73 size_t hash = tr.hash(key);
75 const size_t mask = max_entries-1;
78 T& t = tbl[hash & mask];
83 if(tr.equal(key, tr.get_key(t)))
94 tbl = (
T*)calloc(max_entries*2,
sizeof(
T));
98 throw std::bad_alloc();
109 for(
size_t i = 0; i < max_entries/2u; i++)
113 get_slot(tr.get_key(t)) = t;
141 max_entries = tr.initial_entries/2;
149 if(num_entries*4 >= max_entries*3)
152 T& slot = get_slot(key);
160 return get_slot(key);
192 while(pos != end && *pos == 0);
197 return pos == rhs.
pos;
201 return (pos < rhs.
pos);
211 return !(*
this == rhs);
215 iterator tmp = *
this; ++*
this;
return tmp;
227 while(pos != tbl+max_entries && *pos == 0)
229 return iterator(pos, tbl+max_entries);
233 return iterator(tbl+max_entries, 0);
238 #endif // #ifndef INCLUDED_ADTS_DYN_HASH_TBL std::forward_iterator_tag iterator_category
Definition: dyn_hash_tbl.h:172
T * pos
Definition: dyn_hash_tbl.h:219
uint16_t u16
Definition: types.h:38
size_t hash(Key key) const
iterator()
Definition: dyn_hash_tbl.h:178
const char * get_key(const char *t) const
Definition: dyn_hash_tbl.h:55
size_t size() const
Definition: dyn_hash_tbl.h:163
void clear()
Definition: dyn_hash_tbl.h:132
ptrdiff_t difference_type
Definition: dyn_hash_tbl.h:174
bool operator==(const iterator &rhs) const
Definition: dyn_hash_tbl.h:195
#define SAFE_FREE(p)
free memory ensuing from malloc and set the pointer to zero (thus making double-frees safe / a no-op)...
Definition: code_generation.h:131
~DynHashTbl()
Definition: dyn_hash_tbl.h:127
bool equal(const char *k1, const char *k2) const
Definition: dyn_hash_tbl.h:51
T & get_slot(Key key) const
Definition: dyn_hash_tbl.h:71
#define ENSURE(expr)
ensure the expression <expr> evaluates to non-zero.
Definition: debug.h:287
const T * operator->() const
Definition: dyn_hash_tbl.h:205
size_t hash(const char *key) const
Definition: dyn_hash_tbl.h:47
T find(Key key) const
Definition: dyn_hash_tbl.h:158
void insert(const Key key, const T t)
Definition: dyn_hash_tbl.h:145
pthread_key_t key
Definition: wpthread.cpp:140
T value_type
Definition: dyn_hash_tbl.h:173
T & operator*() const
Definition: dyn_hash_tbl.h:184
#define T(string_literal)
Definition: secure_crt.cpp:76
bool equal(Key k1, Key k2) const
Definition: dyn_hash_tbl.h:169
static const size_t initial_entries
Definition: dyn_hash_tbl.h:37
const T & reference
Definition: dyn_hash_tbl.h:176
iterator end() const
Definition: dyn_hash_tbl.h:231
Definition: dyn_hash_tbl.h:34
Definition: dyn_hash_tbl.h:64
void expand_tbl()
Definition: dyn_hash_tbl.h:90
T * end
Definition: dyn_hash_tbl.h:220
iterator operator++(int)
Definition: dyn_hash_tbl.h:213
bool operator<(const iterator &rhs) const
Definition: dyn_hash_tbl.h:199
iterator begin() const
Definition: dyn_hash_tbl.h:224
iterator(T *pos_, T *end_)
Definition: dyn_hash_tbl.h:181
u16 num_entries
Definition: dyn_hash_tbl.h:67
Traits tr
Definition: dyn_hash_tbl.h:69
u32 fnv_lc_hash(const char *str, size_t len)
special version of fnv_hash for strings: first converts to lowercase (useful for comparing mixed-case...
Definition: fnv_hash.cpp:105
T * tbl
Definition: dyn_hash_tbl.h:66
u16 max_entries
Definition: dyn_hash_tbl.h:68
const T * pointer
Definition: dyn_hash_tbl.h:175
DynHashTbl()
Definition: dyn_hash_tbl.h:121
iterator & operator++()
Definition: dyn_hash_tbl.h:188
bool operator!=(const iterator &rhs) const
Definition: dyn_hash_tbl.h:209