diff options
| author | Paul Buetow <paul@buetow.org> | 2013-04-06 13:14:43 +0200 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2013-04-06 13:14:43 +0200 |
| commit | f038883a6e004eb4312ba1e761da06b596e14d3f (patch) | |
| tree | 358f989cac07885cfa913c66a0d563d18c021b26 /src/maps | |
| parent | 98eac951f8087b213f5850bd126dcb279db360a8 (diff) | |
tagging ychat-0.7.7.0ychat-0.7.7.0
Diffstat (limited to 'src/maps')
| -rw-r--r-- | src/maps/CVS/Entries | 14 | ||||
| -rw-r--r-- | src/maps/hash.cpp | 26 | ||||
| -rw-r--r-- | src/maps/hash.h | 18 | ||||
| -rw-r--r-- | src/maps/hashmap.h | 47 | ||||
| -rw-r--r-- | src/maps/hashmap.tmpl | 100 | ||||
| -rw-r--r-- | src/maps/nhashmap.h | 12 | ||||
| -rw-r--r-- | src/maps/nhashmap.tmpl | 6 | ||||
| -rw-r--r-- | src/maps/shashmap.h | 31 | ||||
| -rw-r--r-- | src/maps/shashmap.tmpl | 100 |
9 files changed, 146 insertions, 208 deletions
diff --git a/src/maps/CVS/Entries b/src/maps/CVS/Entries index 991bf8b..6033e5b 100644 --- a/src/maps/CVS/Entries +++ b/src/maps/CVS/Entries @@ -1,9 +1,11 @@ -/hashmap.h/1.12/Fri Mar 4 21:00:44 2005// -/hashmap.tmpl/1.6/Fri Mar 4 21:00:44 2005// +/hash.cpp/1.2/Mon Feb 21 01:55:49 2005// +/hash.h/1.2/Mon Feb 21 01:55:49 2005// +/hashmap.h/1.8/Mon Feb 21 01:55:49 2005// +/hashmap.tmpl/1.4/Mon Feb 21 01:55:49 2005// /mtools.h/1.7/Mon Feb 21 01:55:49 2005// /mtools.tmpl/1.6/Mon Feb 21 01:55:49 2005// -/nhashmap.h/1.5/Fri Mar 4 21:00:44 2005// -/nhashmap.tmpl/1.4/Fri Mar 4 21:00:44 2005// -/shashmap.h/1.8/Fri Mar 4 21:00:44 2005// -/shashmap.tmpl/1.6/Fri Mar 4 21:00:45 2005// +/nhashmap.h/1.2/Mon Feb 21 01:55:49 2005// +/nhashmap.tmpl/1.2/Mon Feb 21 01:55:49 2005// +/shashmap.h/1.5/Mon Feb 21 01:55:49 2005// +/shashmap.tmpl/1.4/Mon Feb 21 01:55:49 2005// D diff --git a/src/maps/hash.cpp b/src/maps/hash.cpp new file mode 100644 index 0000000..b3d80d1 --- /dev/null +++ b/src/maps/hash.cpp @@ -0,0 +1,26 @@ +#ifndef HASH_CPP +#define HASH_CPP + +#include "hash.h" + +int +hash::operator()(string s_key) const +{ + int i_hash = 0; + // cout << key << "%"; + + int i_size = s_key.size(); + + for( size_t i = 0; i < i_size; ++i ) + i_hash = ( i_hash << 5 ) ^ s_key.at(i) ^ i_hash; + + return i_hash; +} + +bool +hashmap_allocator::operator()(string s_key_1, string s_key_2) const +{ + return s_key_1.compare(s_key_2) == 0; +} + +#endif diff --git a/src/maps/hash.h b/src/maps/hash.h new file mode 100644 index 0000000..15ce3fe --- /dev/null +++ b/src/maps/hash.h @@ -0,0 +1,18 @@ +#ifndef HASH_H +#define HASH_H + +#include <string> + +using namespace std; + +struct hash +{ + int operator()(string s_key) const; +}; + +struct hashmap_allocator +{ + bool operator()(string s_key_1, string s_key_2) const; +}; + +#endif diff --git a/src/maps/hashmap.h b/src/maps/hashmap.h index 1bdc515..3cc2f79 100644 --- a/src/maps/hashmap.h +++ b/src/maps/hashmap.h @@ -2,49 +2,20 @@ #define HASHMAP_H #include <ext/hash_map> +#include "hash.h" using namespace std; -template<class key_type_> -struct compare_allocator -{ - inline bool operator()(key_type_ t_key_1, key_type_ t_key_2) const; -}; - -template<class key_type_> -struct equals_allocator -{ - inline bool operator()(key_type_ t_key_1, key_type_ t_key_2) const; -}; - -template<class key_type_> -struct size_hash -{ - inline int operator()(key_type_ t_key) const; -}; - -template<class key_type_> -struct self_hash -{ - inline int operator()(key_type_ t_key) const; -}; +using __gnu_cxx::hash_map; -template -< - class obj_type, - class key_type_ = string, - class hash_type = size_hash<string>, - class alloc_type = compare_allocator<string> -> -struct hashmap : public __gnu_cxx::hash_map<key_type_, obj_type, hash_type, alloc_type> +template<class obj_type> +struct hashmap : public hash_map< string, obj_type, hash, hashmap_allocator> { - virtual inline void set_elem(obj_type t_obj, key_type_ t_key); - virtual inline obj_type get_elem(key_type_ t_key); - virtual inline obj_type get_set_elem(obj_type t_obj, key_type_ t_key); - virtual inline obj_type get_or_callback_set - (obj_type (*func)(void*), void* p_void, key_type_ t_key); - virtual inline vector<key_type_>* get_key_vector(); - virtual inline bool exists(key_type_ t_key); + virtual inline void set_elem(obj_type t_obj, string s_key); + virtual inline obj_type get_elem(string s_key); + virtual inline obj_type get_set_elem(obj_type t_obj, string s_key); + virtual inline vector<string>* get_key_vector(); + virtual inline bool exists(string s_key); virtual inline void run_func( void (*func)(obj_type) ); virtual inline void run_func( void (*func)(obj_type, void*), void* v_arg ); }; diff --git a/src/maps/hashmap.tmpl b/src/maps/hashmap.tmpl index 9ee2f36..682c395 100644 --- a/src/maps/hashmap.tmpl +++ b/src/maps/hashmap.tmpl @@ -1,47 +1,12 @@ -template<class key_type_> -bool -compare_allocator<key_type_>::operator()(key_type_ t_key_1, key_type_ t_key_2) const -{ - return t_key_1.compare(t_key_2) == 0; -} - -template<class key_type_> -bool -equals_allocator<key_type_>::operator()(key_type_ t_key_1, key_type_ t_key_2) const -{ - return t_key_1 == t_key_2; -} - -template<class key_type_> -int -size_hash<key_type_>::operator()(key_type_ t_key) const -{ - int i_hash = 0; - int i_size = t_key.size(); - - for( size_t i = 0; i < i_size; ++i ) - i_hash = ( i_hash << 5 ) ^ t_key.at(i) ^ i_hash; - - return i_hash; -} - -template<class key_type_> -int -self_hash<key_type_>::operator()(key_type_ t_key) const -{ - return t_key; -} - - -template<class obj_type, class key_type_, class hash_type, class alloc_type> +template<class obj_type> obj_type -hashmap<obj_type, key_type_, hash_type, alloc_type>::get_set_elem(obj_type t_obj, key_type_ t_key) +hashmap<obj_type>::get_set_elem(obj_type t_obj, string s_key) { - typename hashmap<obj_type, key_type_, hash_type, alloc_type>::iterator iter = this->find(t_key); + typename hashmap<obj_type>::iterator iter = this->find(s_key); if ( iter == this->end() ) { - set_elem(t_obj, t_key); + set_elem(t_obj, s_key); return obj_type(); } @@ -51,35 +16,18 @@ hashmap<obj_type, key_type_, hash_type, alloc_type>::get_set_elem(obj_type t_obj return t_ret; } -template<class obj_type, class key_type_, class hash_type, class alloc_type> -obj_type -hashmap<obj_type, key_type_, hash_type, alloc_type>::get_or_callback_set -(obj_type (*func)(void*), void* p_void, key_type_ t_key) -{ - typename hashmap<obj_type, key_type_, hash_type, alloc_type>::iterator iter = this->find(t_key); - - if ( iter == this->end() ) - { - obj_type t_obj = (*func) (p_void); - set_elem(t_obj, t_key); - return t_obj; - } - - return iter->second; -} - -template<class obj_type, class key_type_, class hash_type, class alloc_type> +template<class obj_type> void -hashmap<obj_type, key_type_, hash_type, alloc_type>::set_elem(obj_type t_obj, key_type_ t_key) +hashmap<obj_type>::set_elem(obj_type t_obj, string s_key) { - (*this)[t_key] = t_obj; + (*this)[s_key] = t_obj; } -template<class obj_type, class key_type_, class hash_type, class alloc_type> +template<class obj_type> obj_type -hashmap<obj_type, key_type_, hash_type, alloc_type>::get_elem(key_type_ t_key) +hashmap<obj_type>::get_elem(string s_key) { - typename hashmap<obj_type, key_type_, hash_type, alloc_type>::iterator iter = this->find(t_key); + typename hashmap<obj_type>::iterator iter = this->find(s_key); if ( iter != this->end() ) return iter->second; @@ -87,12 +35,12 @@ hashmap<obj_type, key_type_, hash_type, alloc_type>::get_elem(key_type_ t_key) return obj_type(); } -template<class obj_type, class key_type_, class hash_type, class alloc_type> -vector<key_type_>* -hashmap<obj_type, key_type_, hash_type, alloc_type>::get_key_vector() +template<class obj_type> +vector<string>* +hashmap<obj_type>::get_key_vector() { - vector<key_type_>* p_vec = new vector<key_type_>; - typename hashmap<obj_type, key_type_, hash_type, alloc_type>::iterator iter; + vector<string>* p_vec = new vector<string>; + typename hashmap<obj_type>::iterator iter; for ( iter = this->begin(); iter != this->end(); ++iter ) p_vec->push_back(iter->first); @@ -100,27 +48,27 @@ hashmap<obj_type, key_type_, hash_type, alloc_type>::get_key_vector() return p_vec; } -template<class obj_type, class key_type_, class hash_type, class alloc_type> +template<class obj_type> bool -hashmap<obj_type, key_type_, hash_type, alloc_type>::exists(key_type_ t_key) +hashmap<obj_type>::exists(string s_key) { - return this->find(t_key) != this->end(); + return this->find(s_key) != this->end(); } -template<class obj_type, class key_type_, class hash_type, class alloc_type> +template<class obj_type> void -hashmap<obj_type, key_type_, hash_type, alloc_type>::run_func( void (*func)(obj_type) ) +hashmap<obj_type>::run_func( void (*func)(obj_type) ) { - typename hashmap<obj_type, key_type_, hash_type, alloc_type>::iterator iter; + typename hashmap<obj_type>::iterator iter; for ( iter = this->begin(); iter != this->end(); ++iter ) ( *func ) ( iter->second ); } -template<class obj_type, class key_type_, class hash_type, class alloc_type> +template<class obj_type> void -hashmap<obj_type, key_type_, hash_type, alloc_type>::run_func( void (*func)(obj_type, void*), void* v_arg ) +hashmap<obj_type>::run_func( void (*func)(obj_type, void*), void* v_arg ) { - typename hashmap<obj_type, key_type_, hash_type, alloc_type>::iterator iter; + typename hashmap<obj_type>::iterator iter; for ( iter = this->begin(); iter != this->end(); ++iter ) ( *func ) ( iter->second, v_arg ); } diff --git a/src/maps/nhashmap.h b/src/maps/nhashmap.h index 7f17a55..4cfb50e 100644 --- a/src/maps/nhashmap.h +++ b/src/maps/nhashmap.h @@ -5,16 +5,10 @@ using namespace std; -template -< - class obj_type, - class key_type_ = string, - class hash_type = size_hash<string>, - class alloc_type = compare_allocator<string> -> -struct nhashmap : public shashmap<obj_type, key_type_, hash_type, alloc_type> +template<class obj_type> +struct nhashmap : public shashmap<obj_type> { - inline obj_type get_elem(key_type_ t_key); + inline obj_type get_elem(string s_key); }; #include "nhashmap.tmpl" diff --git a/src/maps/nhashmap.tmpl b/src/maps/nhashmap.tmpl index 3ea1934..422ea2f 100644 --- a/src/maps/nhashmap.tmpl +++ b/src/maps/nhashmap.tmpl @@ -1,8 +1,8 @@ -template<class obj_type, class key_type_, class hash_type, class alloc_type> +template<class obj_type> obj_type -nhashmap<obj_type, key_type_, hash_type, alloc_type>::get_elem(key_type_ t_key) +nhashmap<obj_type>::get_elem(string s_key) { - typename hashmap<obj_type, key_type_, hash_type, alloc_type>::iterator iter = this->find(t_key); + typename hashmap<obj_type>::iterator iter = this->find(s_key); if ( iter != this->end() ) return iter->second; diff --git a/src/maps/shashmap.h b/src/maps/shashmap.h index 6152ba2..e31b55f 100644 --- a/src/maps/shashmap.h +++ b/src/maps/shashmap.h @@ -6,34 +6,25 @@ using namespace std; -template -< - class obj_type, - class key_type_ = string, - class hash_type = size_hash<string>, - class alloc_type = compare_allocator<string> -> -class shashmap : protected hashmap<obj_type, key_type_, hash_type, alloc_type> +template<class obj_type> +class shashmap : public hashmap<obj_type> { private: pthread_mutex_t mut_shashmap; - public: explicit shashmap(); ~shashmap(); - virtual inline void set_elem(obj_type t_obj, key_type_ t_key); - virtual inline obj_type get_set_elem(obj_type t_obj, key_type_ t_key); - virtual inline obj_type get_or_callback_set - (obj_type (*func)(void*), void* p_void, key_type_ t_key); - virtual inline void add_elem(obj_type t_obj, key_type_ t_key); - virtual inline void add_elem_insecure(obj_type t_obj, key_type_ t_key); - virtual inline obj_type get_elem(key_type_ t_key); - virtual inline void del_elem(key_type_ t_key); - virtual inline void del_elem_insecure(key_type_ t_key); + virtual inline void set_elem(obj_type t_obj, string s_key); + virtual inline obj_type get_set_elem(obj_type t_obj, string s_key); + virtual inline void add_elem(obj_type t_obj, string s_key); + virtual inline void add_elem_insecure(obj_type t_obj, string s_key); + virtual inline obj_type get_elem(string s_key); + virtual inline void del_elem(string s_key); + virtual inline void del_elem_insecure(string s_key); virtual inline void clear(); virtual inline int size(); - virtual inline bool exists(key_type_ t_key); - virtual inline vector<key_type_>* get_key_vector(); + virtual inline bool exists(string s_key); + virtual inline vector<string>* get_key_vector(); virtual inline void run_func( void (*func)(obj_type) ); virtual inline void run_func( void (*func)(obj_type, void*), void* v_arg ); }; diff --git a/src/maps/shashmap.tmpl b/src/maps/shashmap.tmpl index 4559284..7cf4b6b 100644 --- a/src/maps/shashmap.tmpl +++ b/src/maps/shashmap.tmpl @@ -1,141 +1,129 @@ -template<class obj_type, class key_type_, class hash_type, class alloc_type> -shashmap<obj_type, key_type_, hash_type, alloc_type>::shashmap() +template<class obj_type> +shashmap<obj_type>::shashmap() { pthread_mutex_init( &mut_shashmap, NULL ); } -template<class obj_type, class key_type_, class hash_type, class alloc_type> -shashmap<obj_type, key_type_, hash_type, alloc_type>::~shashmap() +template<class obj_type> +shashmap<obj_type>::~shashmap() { pthread_mutex_destroy( &mut_shashmap ); } -template<class obj_type, class key_type_, class hash_type, class alloc_type> +template<class obj_type> void -shashmap<obj_type, key_type_, hash_type, alloc_type>::add_elem(obj_type t_obj, key_type_ t_key) +shashmap<obj_type>::add_elem(obj_type t_obj, string s_key) { pthread_mutex_lock( &mut_shashmap ); - (*this)[t_key] = t_obj; + (*this)[s_key] = t_obj; pthread_mutex_unlock( &mut_shashmap ); } -template<class obj_type, class key_type_, class hash_type, class alloc_type> +template<class obj_type> void -shashmap<obj_type, key_type_, hash_type, alloc_type>::add_elem_insecure(obj_type t_obj, key_type_ t_key) +shashmap<obj_type>::add_elem_insecure(obj_type t_obj, string s_key) { - (*this)[t_key] = t_obj; + (*this)[s_key] = t_obj; } -template<class obj_type, class key_type_, class hash_type, class alloc_type> +template<class obj_type> obj_type -shashmap<obj_type, key_type_, hash_type, alloc_type>::get_set_elem(obj_type t_obj, key_type_ t_key) +shashmap<obj_type>::get_set_elem(obj_type t_obj, string s_key) { pthread_mutex_lock( &mut_shashmap ); - obj_type t_ret = hashmap<obj_type, key_type_, hash_type, alloc_type>::get_set_elem(t_obj, t_key); + obj_type t_ret = hashmap<obj_type>::get_set_elem(t_obj, s_key); pthread_mutex_unlock( &mut_shashmap ); return t_ret; } -template<class obj_type, class key_type_, class hash_type, class alloc_type> -obj_type -shashmap<obj_type, key_type_, hash_type, alloc_type>::get_or_callback_set -(obj_type (*func)(void*), void* p_void, key_type_ t_key) -{ - pthread_mutex_lock( &mut_shashmap ); - obj_type t_ret = hashmap<obj_type, key_type_, hash_type, alloc_type>::get_or_callback_set - (func, p_void, t_key); - pthread_mutex_unlock( &mut_shashmap ); - return t_ret; -} - -template<class obj_type, class key_type_, class hash_type, class alloc_type> +template<class obj_type> void -shashmap<obj_type, key_type_, hash_type, alloc_type>::set_elem(obj_type t_obj, key_type_ t_key) +shashmap<obj_type>::set_elem(obj_type t_obj, string s_key) { pthread_mutex_lock( &mut_shashmap ); - (*this)[t_key] = t_obj; + (*this)[s_key] = t_obj; pthread_mutex_unlock( &mut_shashmap ); } -template<class obj_type, class key_type_, class hash_type, class alloc_type> +template<class obj_type> obj_type -shashmap<obj_type, key_type_, hash_type, alloc_type>::get_elem(key_type_ t_key) +shashmap<obj_type>::get_elem(string s_key) { pthread_mutex_lock( &mut_shashmap ); - obj_type t_ret = hashmap<obj_type, key_type_, hash_type, alloc_type>::get_elem(t_key); + obj_type t_ret = hashmap<obj_type>::get_elem(s_key); pthread_mutex_unlock( &mut_shashmap ); return t_ret; } -template<class obj_type, class key_type_, class hash_type, class alloc_type> +template<class obj_type> void -shashmap<obj_type, key_type_, hash_type, alloc_type>::del_elem(key_type_ t_key) +shashmap<obj_type>::del_elem(string s_key) { pthread_mutex_lock( &mut_shashmap ); - hashmap<obj_type, key_type_, hash_type, alloc_type>::erase(t_key); + hashmap<obj_type>::erase(s_key); pthread_mutex_unlock( &mut_shashmap ); } -template<class obj_type, class key_type_, class hash_type, class alloc_type> +template<class obj_type> void -shashmap<obj_type, key_type_, hash_type, alloc_type>::del_elem_insecure(key_type_ t_key) +shashmap<obj_type>::del_elem_insecure(string s_key) { - hashmap<obj_type, key_type_, hash_type, alloc_type>::erase(t_key); + hashmap<obj_type>::erase(s_key); } -template<class obj_type, class key_type_, class hash_type, class alloc_type> -vector<key_type_>* -shashmap<obj_type, key_type_, hash_type, alloc_type>::get_key_vector() +template<class obj_type> +vector<string>* +shashmap<obj_type>::get_key_vector() { pthread_mutex_lock( &mut_shashmap ); - vector<key_type_>* p_vec = hashmap<obj_type, key_type_, hash_type, alloc_type>::get_key_vector(); + vector<string>* p_vec = hashmap<obj_type>::get_key_vector(); pthread_mutex_unlock( &mut_shashmap ); return p_vec; } -template<class obj_type, class key_type_, class hash_type, class alloc_type> +template<class obj_type> void -shashmap<obj_type, key_type_, hash_type, alloc_type>::clear() +shashmap<obj_type>::clear() { pthread_mutex_lock( &mut_shashmap ); - hashmap<obj_type, key_type_, hash_type, alloc_type>::clear(); + hashmap<obj_type>::clear(); pthread_mutex_unlock( &mut_shashmap ); } -template<class obj_type, class key_type_, class hash_type, class alloc_type> +template<class obj_type> int -shashmap<obj_type, key_type_, hash_type, alloc_type>::size() +shashmap<obj_type>::size() { pthread_mutex_lock( &mut_shashmap ); - int i_size = hashmap<obj_type, key_type_, hash_type, alloc_type>::size(); + int i_size = hashmap<obj_type>::size(); pthread_mutex_unlock( &mut_shashmap ); return i_size; } -template<class obj_type, class key_type_, class hash_type, class alloc_type> +template<class obj_type> bool -shashmap<obj_type, key_type_, hash_type, alloc_type>::exists(key_type_ t_key) +shashmap<obj_type>::exists(string s_key) { pthread_mutex_lock( &mut_shashmap ); - bool b_ret = hashmap<obj_type, key_type_, hash_type, alloc_type>::exists(t_key); + bool b_ret = hashmap<obj_type>::exists(s_key); pthread_mutex_unlock( &mut_shashmap ); return b_ret; } -template<class obj_type, class key_type_, class hash_type, class alloc_type> +template<class obj_type> void -shashmap<obj_type, key_type_, hash_type, alloc_type>::run_func( void (*func)(obj_type) ) +shashmap<obj_type>::run_func( void (*func)(obj_type) ) { pthread_mutex_lock( &mut_shashmap ); - hashmap<obj_type, key_type_, hash_type, alloc_type>::run_func(func); + hashmap<obj_type>::run_func(func); pthread_mutex_unlock( &mut_shashmap ); } -template<class obj_type, class key_type_, class hash_type, class alloc_type> +template<class obj_type> void -shashmap<obj_type, key_type_, hash_type, alloc_type>::run_func( void (*func)(obj_type, void*), void* v_arg ) +shashmap<obj_type>::run_func( void (*func)(obj_type, void*), void* v_arg ) { pthread_mutex_lock( &mut_shashmap ); - hashmap<obj_type, key_type_, hash_type, alloc_type>::run_func(func, v_arg); + hashmap<obj_type>::run_func(func, v_arg); pthread_mutex_unlock( &mut_shashmap ); } |
