13 template <
class K,
class V>
39 void init_dat(
size_t min_size,
const V& def,
bool (*eq)(
void*,
const K&,
const K&),
void* eq_dat =
nullptr)
43 dat.
resize(min_size,
true);
54 void init(
size_t min_size,
const V& def,
bool (*eq)(
const K&,
const K&))
69 void init(
size_t min_size,
bool (*eq)(
const K&,
const K&))
83 v_hashmap(
size_t min_size,
const V& def,
bool (*eq)(
void*,
const K&,
const K&),
void* eq_dat =
nullptr)
87 v_hashmap(
size_t min_size, V& def,
bool (*eq)(
const K&,
const K&)) {
init(min_size, def, eq); }
90 void set_equivalent(
bool (*eq)(
void*,
const K&,
const K&),
void* eq_dat =
nullptr)
109 if (num_occupants == 0)
118 hash_elem* e = (hash_elem*)prev;
133 hash_elem* e = dat.
begin();
145 hash_elem* e = (hash_elem*)el;
155 func(e->key, e->val);
172 tmp.
resize(num_occupants + 10);
206 size_t first_position =
hash % sz;
207 last_position = first_position;
221 if (last_position >= sz)
225 if (last_position == first_position)
226 THROW(
"error: v_hashmap did not grow enough!");
233 size_t first_position = hash % sz;
234 last_position = first_position;
241 if ((dat[last_position].hash == hash) &&
is_equivalent(key, dat[last_position].key))
246 if (last_position >= sz)
250 if (last_position == first_position)
251 THROW(
"error: v_hashmap did not grow enough!");
void resize(size_t length)
v_hashmap(size_t min_size, const V &def, bool(*eq)(void *, const K &, const K &), void *eq_dat=nullptr)
bool(* equivalent)(void *, const K &, const K &)
V * iterator_get_value(void *el)
void put_after_get(const K &key, uint64_t hash, const V &val)
void * iterator_next(void *prev)
void set_equivalent(bool(*eq)(const K &, const K &))
void set_default_value(const V &def)
void push_back(const T &new_ele)
void init(size_t min_size, bool(*eq)(const K &, const K &))
bool is_equivalent(const K &key, const K &key2)
bool(* equivalent_no_data)(const K &, const K &)
void put_after_get_nogrow(const K &key, uint64_t hash, const V &val)
void init(size_t min_size, const V &def, bool(*eq)(const K &, const K &))
void set_equivalent(bool(*eq)(void *, const K &, const K &), void *eq_dat=nullptr)
bool contains(const K &key, size_t hash)
v_hashmap(size_t min_size, V &def, bool(*eq)(const K &, const K &))
void put(const K &key, uint64_t hash, const V &val)
void iter(void(*func)(K, V))
void init_dat(size_t min_size, const V &def, bool(*eq)(void *, const K &, const K &), void *eq_dat=nullptr)