42 class sc_phash_base_iter;
43 template<
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 91 int size = PHASH_DEFAULT_INIT_TABLE_SIZE,
92 int density = PHASH_DEFAULT_MAX_DENSITY,
93 double grow = PHASH_DEFAULT_GROW_FACTOR,
94 bool reorder = PHASH_DEFAULT_REORDER_FLAG,
96 cmpr_fn_t cmpr_fn = 0 );
99 void set_cmpr_fn(cmpr_fn_t);
100 void set_hash_fn(hash_fn_t);
102 bool empty()
const {
return (num_entries == 0); }
103 unsigned count()
const {
return num_entries; }
106 void erase(
void (*kfree)(
void*));
109 void copy(
const sc_phash_base&
b,
void* (*kdup)(
const void*),
void (*kfree)(
void*));
110 int insert(
void* k,
void* c );
112 int insert(
void* k,
void* c,
void* (*kdup)(
const void*) );
113 int insert_if_not_exists(
void* k,
void* c);
115 int insert_if_not_exists(
void* k,
void* c,
void* (*kdup)(
const void*));
116 int remove(
const void* k);
117 int remove(
const void* k,
void** pk,
void** pc);
118 int remove(
const void* k, void (*kfree)(
void*));
119 int remove_by_contents(
const void* c);
120 int remove_by_contents(
bool (*predicate)(
const void*,
void*),
void* arg);
121 int remove_by_contents(
const void* c,
void (*kfree)(
void*));
122 int remove_by_contents(
bool (*predicate)(
const void*,
void*),
void* arg,
void (*kfree)(
void*));
123 int lookup(
const void* k,
void** pc)
const;
124 bool contains(
const void* k)
const {
return (lookup(k, 0) != 0); }
125 void* operator[](
const void* key)
const;
141 : table(t), entry(0), next(0), last(0), index(0)
144 : table(&t), entry(0), next(0), last(0), index(0)
152 void remove(void (*kfree)(
void*));
154 void* contents()
const;
155 void* set_contents(
void* c);
158 template<
class K,
class C >
161 template<
class K,
class C >
169 int size = PHASH_DEFAULT_INIT_TABLE_SIZE,
170 int density = PHASH_DEFAULT_MAX_DENSITY,
171 double grow = PHASH_DEFAULT_GROW_FACTOR,
172 bool reorder = PHASH_DEFAULT_REORDER_FLAG,
174 cmpr_fn_t cmpr_fn = 0 )
175 :
sc_phash_base((void*) def, size, density, grow, reorder, hash_fn, cmpr_fn) { }
198 int remove(K k, K* pk, C* pc)
202 int remove(K k, void (*kfree)(
void*))
237 template<
class K,
class C >
259 template<
class K,
class C >
264 void* (*kdup)(
const void*);
265 void (*kfree)(
void*);
270 int size = PHASH_DEFAULT_INIT_TABLE_SIZE,
271 int density = PHASH_DEFAULT_MAX_DENSITY,
272 double grow = PHASH_DEFAULT_GROW_FACTOR,
273 bool reorder = PHASH_DEFAULT_REORDER_FLAG,
274 hash_fn_t hash_fn = (hash_fn_t) 0,
275 cmpr_fn_t cmpr_fn = (cmpr_fn_t) 0,
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)
303 int remove(K k, K* pk, C* pc)
329 template<
class K,
class C >
363 int size = PHASH_DEFAULT_INIT_TABLE_SIZE,
364 int density = PHASH_DEFAULT_MAX_DENSITY,
365 double grow = PHASH_DEFAULT_GROW_FACTOR,
366 bool reorder = PHASH_DEFAULT_REORDER_FLAG,
368 int (*cmpr_fn)(
const void*,
const void*) = sc_strhash_cmp )
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 bool PHASH_DEFAULT_REORDER_FLAG
sc_phash_iter(sc_phash< K, C > *t)
void copy(const sc_phash_base &b)
SC_API void * sc_strhash_kdup(const void *)
int insert_if_not_exists(char *k, C c)
int insert_if_not_exists(void *k, void *c)
int insert_if_not_exists(K k, C c, void *(*kdup)(const void *))
void copy(const sc_phash< K, C > *b)
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)
int lookup(const char *k, C *pc) const
int lookup(K k, C *pc) const
void reset(sc_phash< K, C > &t)
int remove_by_contents(C c)
int insert_if_not_exists(K k)
sc_pdhash_iter< K, C > iterator
int remove_by_contents(const void *c, void(*kfree)(void *))
sc_strhash_iter(sc_strhash< C > *t)
sc_pdhash_iter(sc_pdhash< K, C > &t)
void reset(sc_phash_base &t)
const int PHASH_DEFAULT_INIT_TABLE_SIZE
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(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)
uint64 const sc_uint_base int b
void copy(const sc_phash_base *)
int insert_if_not_exists(K k, C c)
int insert_if_not_exists(void *k)
void copy(const sc_strhash< C > &b)
SC_API int sc_strhash_cmp(const void *, const void *)
sc_phash_iter< K, C > iterator
sc_phash_base_iter(sc_phash_base *t)
void copy(const sc_pdhash< K, C > &b)
C operator[](const char *k) const
int insert(K k, C c, void *(*kdup)(const void *))
void reset(sc_pdhash< K, C > &t)
int insert_if_not_exists(char *k)
int remove(const void *k)
int remove_by_contents(bool(*predicate)(const void *, void *), void *arg)
void reset(sc_strhash< C > *t)
int insert(void *k, void *c)
SC_API unsigned default_ptr_hash_fn(const void *)
sc_strhash_iter(sc_strhash< C > &t)
void copy(const sc_strhash< C > *b)
SC_API unsigned default_str_hash_fn(const void *)
unsigned do_hash(const void *key) const
void * set_contents(void *c)
int insert_if_not_exists(K k, C c)
void reset(sc_phash< K, C > *t)
Definition of the simulation context class.
sc_strhash_iter< C > iterator
int lookup(K k, C *pc) const
SC_API const double PHASH_DEFAULT_GROW_FACTOR
int remove_by_contents(C c)
SC_API void sc_strhash_kfree(void *)
void reset(sc_phash_base *t)
void reset(sc_pdhash< K, C > *t)
sc_phash_iter(sc_phash< K, C > &t)
void copy(const sc_phash< K, C > &b, void *(*kdup)(const void *), void(*kfree)(void *))
void reset(sc_strhash< C > &t)
int lookup(const void *k, void **pc) const
sc_phash_elem * find_entry(unsigned hv, const void *k, sc_phash_elem ***plast=0) const
sc_pdhash_iter(sc_pdhash< K, C > *t)
int remove_by_contents(C c)
void copy(const sc_phash< K, C > &b)
int remove_by_contents(const void *c)
int remove_by_contents(bool(*predicate)(const void *, void *), void *arg)
const int PHASH_DEFAULT_MAX_DENSITY
bool contains(const char *k) const
SC_API unsigned default_int_hash_fn(const void *)
int remove_by_contents(bool(*predicate)(const void *, void *), void *arg, void(*kfree)(void *))
sc_phash_base_iter(sc_phash_base &t)
int insert_if_not_exists(K k)
int remove_by_contents(bool(*predicate)(const void *, void *), void *arg)
bool contains(const void *k) const
void * operator[](const void *key) const