📄 sc_hash.h
字号:
return sc_phash_base::remove_by_contents(c, kfree); } int remove_by_contents(bool (*predicate)(const void*, void*), void* arg, void (*kfree)(void*)) { return sc_phash_base::remove_by_contents(predicate, arg, kfree); } int lookup(K k, C* pc) const { return sc_phash_base::lookup((const void*) k, (void**) pc); } bool contains(K k) const { return sc_phash_base::contains((const void*) k); } C operator[](K k) const { return (C) sc_phash_base::operator[]((const void*) k); }};template< class K, class C >class sc_phash_iter : public sc_phash_base_iter {public: sc_phash_iter(sc_phash<K,C>* t) : sc_phash_base_iter(t) { } sc_phash_iter(sc_phash<K,C>& t) : sc_phash_base_iter(t) { } ~sc_phash_iter() { } void reset(sc_phash<K,C>* t) { sc_phash_base_iter::reset(t); } void reset(sc_phash<K,C>& t) { sc_phash_base_iter::reset(t); } K key() const { return (K) sc_phash_base_iter::key(); } C contents() const { return (C) sc_phash_base_iter::contents(); } C set_contents(C c) { return (C) sc_phash_base_iter::set_contents((void*) c); }};template< class K, class C >class sc_pdhash : public sc_phash_base { friend class sc_pdhash_iter<K,C>;private: void* (*kdup)(const void*); //eliminated braces around void* -- Amit void (*kfree)(void*);public: typedef sc_pdhash_iter<K,C> iterator; 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, // defaults added -- cmpr_fn_t cmpr_fn = (cmpr_fn_t) 0, // Amit void* (*kdup_fn)(const void*) = 0, void (*kfree_fn)(void*) = 0 ) : sc_phash_base((void*) def, size, density, grow, reorder, hash_fn, cmpr_fn) { kdup = kdup_fn; kfree = kfree_fn; } ~sc_pdhash() { erase(); } void erase() { sc_phash_base::erase(kfree); } void copy(const sc_pdhash<K,C>& b) { sc_phash_base::copy(b, kdup, kfree); } int insert(K k, C c) { return sc_phash_base::insert((void*) k, (void*) c, kdup); } int insert(K k) { return sc_phash_base::insert((void*) k, default_value, kdup); } int insert_if_not_exists(K k, C c) { return sc_phash_base::insert_if_not_exists((void*) k, (void*) c, kdup); } int insert_if_not_exists(K k) { return sc_phash_base::insert_if_not_exists((void*) k, default_value, kdup); } int remove(K k) { return sc_phash_base::remove((const void*) k, kfree); } int remove(K k, K* pk, C* pc) { return sc_phash_base::remove((const void*) k, (void**) pk, (void**) pc); } int remove_by_contents(C c) { return sc_phash_base::remove_by_contents((const void*) c, kfree); } int remove_by_contents(bool (*predicate)(const void*, void*), void* arg) { return sc_phash_base::remove_by_contents(predicate, arg, kfree); } int lookup(K k, C* pc) const { return sc_phash_base::lookup((const void*) k, (void**) pc); } bool contains(K k) const { return sc_phash_base::contains((const void*) k); } C operator[](K k) const { return (C) sc_phash_base::operator[]((const void*) k); }};template< class K, class C >class sc_pdhash_iter : public sc_phash_base_iter {public: sc_pdhash_iter(sc_pdhash<K,C>* t) : sc_phash_base_iter(t) { } sc_pdhash_iter(sc_pdhash<K,C>& t) : sc_phash_base_iter(t) { } ~sc_pdhash_iter() { } void reset(sc_pdhash<K,C>* t) { sc_phash_base_iter::reset(t); } void reset(sc_pdhash<K,C>& t) { sc_phash_base_iter::reset(t); } void remove() { sc_phash_base_iter::remove(((sc_pdhash<K,C>*) table)->kfree); } K key() const { return (K) sc_phash_base_iter::key(); } C contents() const { return (C) sc_phash_base_iter::contents(); } C set_contents(C c) { return (C) sc_phash_base_iter::set_contents((void*) c); }};extern int sc_strhash_cmp( const void*, const void* );extern void sc_strhash_kfree(void*);extern void* sc_strhash_kdup(const void*);template< class C > // template class decl.class sc_strhash_iter; // --Amittemplate< class C >class sc_strhash : public sc_phash_base { friend class sc_strhash_iter<C>;public: typedef sc_strhash_iter<C> iterator; 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 ) : sc_phash_base((void*) def, size, density, grow, reorder, hash_fn, cmpr_fn) { } ~sc_strhash() { erase(); } void erase() { sc_phash_base::erase(sc_strhash_kfree); } void copy(const sc_strhash<C>* b) { sc_phash_base::copy(*b, sc_strhash_kdup, sc_strhash_kfree); } void copy(const sc_strhash<C>& b) { sc_phash_base::copy(b, sc_strhash_kdup, sc_strhash_kfree); } int insert(char* k, C c) { return sc_phash_base::insert((void*) k, (void*) c, sc_strhash_kdup); } int insert(char* k) { return sc_phash_base::insert((void*) k, default_value, sc_strhash_kdup); } int insert_if_not_exists(char* k, C c) { return sc_phash_base::insert_if_not_exists((void*) k, (void*) c, sc_strhash_kdup); } int insert_if_not_exists(char* k) { return sc_phash_base::insert_if_not_exists((void*) k, default_value, sc_strhash_kdup); } int remove(const char* k) { return sc_phash_base::remove((const void*) k, sc_strhash_kfree); } int remove(const char* k, char** pk, C* pc) { return sc_phash_base::remove((const void*) k, (void**) pk, (void**) pc); } int remove_by_contents(C c) { return sc_phash_base::remove_by_contents((const void*) c, sc_strhash_kfree); } int remove_by_contents(bool (*predicate)(const void*, void*), void* arg) { return sc_phash_base::remove_by_contents(predicate, arg, sc_strhash_kfree); } int lookup(const char* k, C* pc) const { return sc_phash_base::lookup((const void*) k, (void** )pc); } bool contains(const char* k) const { return sc_phash_base::contains((const void*) k); } C operator[](const char* k) const { return (C) sc_phash_base::operator[]((const void*) k); }};template<class C>class sc_strhash_iter : public sc_phash_base_iter {public: sc_strhash_iter ( sc_strhash<C>* t ) : sc_phash_base_iter(t) { } sc_strhash_iter ( sc_strhash<C>& t ) : sc_phash_base_iter(t) { } ~sc_strhash_iter() { } void reset ( sc_strhash<C>* t ) { sc_phash_base_iter::reset(t); } void reset ( sc_strhash<C>& t ) { sc_phash_base_iter::reset(t); } void remove() { sc_phash_base_iter::remove(sc_strhash_kfree); } const char* key() { return (const char*) sc_phash_base_iter::key(); } C contents() { return (C) sc_phash_base_iter::contents(); } C set_contents(C c) { return (C) sc_phash_base_iter::set_contents((void*) c); }};} // namespace sc_core#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -