43template<
class K,
class C>
57 typedef unsigned (*hash_fn_t)(
const void*);
58 typedef int (*cmpr_fn_t)(
const void*,
const void*);
74 unsigned do_hash(
const void* key)
const {
return (*hash)(key) % num_bins; }
76 sc_phash_elem*
add_direct(
void* key,
void* contents,
unsigned hash_val);
77 sc_phash_elem*
find_entry_c(
unsigned hv,
const void* k, sc_phash_elem*** plast);
78 sc_phash_elem*
find_entry_q(
unsigned hv,
const void* k, sc_phash_elem*** plast);
79 sc_phash_elem*
find_entry(
unsigned hv,
const void* k, sc_phash_elem*** plast=0)
const
96 cmpr_fn_t cmpr_fn = 0 );
102 bool empty()
const {
return (num_entries == 0); }
103 unsigned count()
const {
return num_entries; }
112 int insert(
void* k,
void* c,
void* (*kdup)(
const void*) );
117 int remove(
const void* k,
void** pk,
void** pc);
118 int remove(
const void* k,
void (*kfree)(
void*));
123 int lookup(
const void* k,
void** pc)
const;
124 bool contains(
const void* k)
const {
return (lookup(k, 0) != 0); }
141 : table(t), entry(0), next(0), last(0), index(0)
144 : table(&t), entry(0), next(0), last(0), index(0)
155 void* set_contents(
void* c);
158template<
class K,
class C >
161template<
class K,
class C >
175 :
sc_phash_base((void*) def, size, density, grow, reorder, hash_fn, cmpr_fn) { }
237template<
class K,
class C >
259template<
class K,
class C >
264 void* (*kdup)(
const void*);
265 void (*kfree)(
void*);
276 void* (*kdup_fn)(
const void*) = 0,
277 void (*kfree_fn)(
void*) = 0 )
278 :
sc_phash_base((void*) def, size, density, grow, reorder, hash_fn, cmpr_fn)
329template<
class K,
class C >
369 :
sc_phash_base((void*) def, size, density, grow, reorder, hash_fn, cmpr_fn)
393 int remove(
const char* k,
char** pk, C* pc)
const int PHASH_DEFAULT_MAX_DENSITY
SC_API unsigned default_int_hash_fn(const void *)
const int PHASH_DEFAULT_INIT_TABLE_SIZE
SC_API unsigned default_ptr_hash_fn(const void *)
SC_API void * sc_strhash_kdup(const void *)
SC_API unsigned default_str_hash_fn(const void *)
SC_API const double PHASH_DEFAULT_GROW_FACTOR
SC_API int sc_strhash_cmp(const void *, const void *)
SC_API void sc_strhash_kfree(void *)
const bool PHASH_DEFAULT_REORDER_FLAG
uint64 const sc_uint_base int b
void reset(sc_pdhash< K, C > &t)
sc_pdhash_iter(sc_pdhash< K, C > &t)
void reset(sc_pdhash< K, C > *t)
sc_pdhash_iter(sc_pdhash< K, C > *t)
int insert(void *k, void *c)
void copy(const sc_phash_base &b)
int remove_by_contents(bool(*predicate)(const void *, void *), void *arg)
sc_phash_base(void *def=0, int size=PHASH_DEFAULT_INIT_TABLE_SIZE, int density=PHASH_DEFAULT_MAX_DENSITY, double grow=PHASH_DEFAULT_GROW_FACTOR, bool reorder=PHASH_DEFAULT_REORDER_FLAG, hash_fn_t hash_fn=default_ptr_hash_fn, cmpr_fn_t cmpr_fn=0)
sc_phash_elem * add_direct(void *key, void *contents, unsigned hash_val)
int remove(const void *k)
unsigned(* hash_fn_t)(const void *)
int lookup(const void *k, void **pc) const
void copy(const sc_phash_base &b, void *(*kdup)(const void *), void(*kfree)(void *))
void * operator[](const void *key) const
int insert(void *k, void *c, void *(*kdup)(const void *))
sc_phash_elem * find_entry(unsigned hv, const void *k, sc_phash_elem ***plast=0) const
sc_phash_elem * find_entry_q(unsigned hv, const void *k, sc_phash_elem ***plast)
bool contains(const void *k) const
void set_cmpr_fn(cmpr_fn_t)
unsigned do_hash(const void *key) const
int remove(const void *k, void **pk, void **pc)
int remove_by_contents(const void *c)
void erase(void(*kfree)(void *))
int(* cmpr_fn_t)(const void *, const void *)
int insert_if_not_exists(void *k)
int insert_if_not_exists(void *k, void *c, void *(*kdup)(const void *))
int remove_by_contents(const void *c, void(*kfree)(void *))
int remove_by_contents(bool(*predicate)(const void *, void *), void *arg, void(*kfree)(void *))
int insert_if_not_exists(void *k, void *c)
sc_phash_elem * find_entry_c(unsigned hv, const void *k, sc_phash_elem ***plast)
int remove(const void *k, void(*kfree)(void *))
void set_hash_fn(hash_fn_t)
void copy(const sc_phash_base *)
sc_phash_base_iter(sc_phash_base *t)
sc_phash_base_iter(sc_phash_base &t)
void * set_contents(void *c)
void remove(void(*kfree)(void *))
void reset(sc_phash_base *t)
void reset(sc_phash_base &t)
void reset(sc_phash< K, C > *t)
sc_phash_iter(sc_phash< K, C > *t)
void reset(sc_phash< K, C > &t)
sc_phash_iter(sc_phash< K, C > &t)
int remove_by_contents(C c)
void copy(const sc_phash< K, C > *b)
void copy(const sc_phash< K, C > &b, void *(*kdup)(const void *), void(*kfree)(void *))
int remove_by_contents(const void *c, void(*kfree)(void *))
int insert_if_not_exists(K k)
int remove_by_contents(bool(*predicate)(const void *, void *), void *arg)
void copy(const sc_phash< K, C > &b)
int insert_if_not_exists(K k, C c, void *(*kdup)(const void *))
int remove(K k, K *pk, C *pc)
int lookup(K k, C *pc) const
int remove(K k, void(*kfree)(void *))
int remove_by_contents(bool(*predicate)(const void *, void *), void *arg, void(*kfree)(void *))
int insert_if_not_exists(K k, C c)
sc_phash(C def=(C) 0, int size=PHASH_DEFAULT_INIT_TABLE_SIZE, int density=PHASH_DEFAULT_MAX_DENSITY, double grow=PHASH_DEFAULT_GROW_FACTOR, bool reorder=PHASH_DEFAULT_REORDER_FLAG, hash_fn_t hash_fn=default_ptr_hash_fn, cmpr_fn_t cmpr_fn=0)
sc_phash_iter< K, C > iterator
int insert(K k, C c, void *(*kdup)(const void *))
int remove(K k, K *pk, C *pc)
int remove_by_contents(C c)
int lookup(K k, C *pc) const
int remove_by_contents(bool(*predicate)(const void *, void *), void *arg)
sc_pdhash_iter< K, C > iterator
int insert_if_not_exists(K k, C c)
void copy(const sc_pdhash< K, C > &b)
int insert_if_not_exists(K k)
sc_pdhash(C def=(C) 0, int size=PHASH_DEFAULT_INIT_TABLE_SIZE, int density=PHASH_DEFAULT_MAX_DENSITY, double grow=PHASH_DEFAULT_GROW_FACTOR, bool reorder=PHASH_DEFAULT_REORDER_FLAG, hash_fn_t hash_fn=(hash_fn_t) 0, cmpr_fn_t cmpr_fn=(cmpr_fn_t) 0, void *(*kdup_fn)(const void *)=0, void(*kfree_fn)(void *)=0)
sc_strhash_iter(sc_strhash< C > *t)
void reset(sc_strhash< C > *t)
sc_strhash_iter(sc_strhash< C > &t)
void reset(sc_strhash< C > &t)
sc_strhash_iter< C > iterator
int insert_if_not_exists(char *k)
C operator[](const char *k) const
bool contains(const char *k) const
int remove_by_contents(C c)
void copy(const sc_strhash< C > *b)
int lookup(const char *k, C *pc) const
int remove(const char *k)
int remove_by_contents(bool(*predicate)(const void *, void *), void *arg)
sc_strhash(C def=(C) 0, int size=PHASH_DEFAULT_INIT_TABLE_SIZE, int density=PHASH_DEFAULT_MAX_DENSITY, double grow=PHASH_DEFAULT_GROW_FACTOR, bool reorder=PHASH_DEFAULT_REORDER_FLAG, unsigned(*hash_fn)(const void *)=default_str_hash_fn, int(*cmpr_fn)(const void *, const void *)=sc_strhash_cmp)
void copy(const sc_strhash< C > &b)
int insert_if_not_exists(char *k, C c)
int remove(const char *k, char **pk, C *pc)