From f038883a6e004eb4312ba1e761da06b596e14d3f Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Sat, 6 Apr 2013 13:14:43 +0200 Subject: tagging ychat-0.7.7.0 --- src/maps/CVS/Entries | 14 ++++--- src/maps/hash.cpp | 26 +++++++++++++ src/maps/hash.h | 18 +++++++++ src/maps/hashmap.h | 47 +++++------------------ src/maps/hashmap.tmpl | 100 ++++++++++++------------------------------------- src/maps/nhashmap.h | 12 ++---- src/maps/nhashmap.tmpl | 6 +-- src/maps/shashmap.h | 31 ++++++--------- src/maps/shashmap.tmpl | 100 ++++++++++++++++++++++--------------------------- 9 files changed, 146 insertions(+), 208 deletions(-) create mode 100644 src/maps/hash.cpp create mode 100644 src/maps/hash.h (limited to 'src/maps') 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 + +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 +#include "hash.h" using namespace std; -template -struct compare_allocator -{ - inline bool operator()(key_type_ t_key_1, key_type_ t_key_2) const; -}; - -template -struct equals_allocator -{ - inline bool operator()(key_type_ t_key_1, key_type_ t_key_2) const; -}; - -template -struct size_hash -{ - inline int operator()(key_type_ t_key) const; -}; - -template -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, - class alloc_type = compare_allocator -> -struct hashmap : public __gnu_cxx::hash_map +template +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* 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* 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 -bool -compare_allocator::operator()(key_type_ t_key_1, key_type_ t_key_2) const -{ - return t_key_1.compare(t_key_2) == 0; -} - -template -bool -equals_allocator::operator()(key_type_ t_key_1, key_type_ t_key_2) const -{ - return t_key_1 == t_key_2; -} - -template -int -size_hash::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 -int -self_hash::operator()(key_type_ t_key) const -{ - return t_key; -} - - -template +template obj_type -hashmap::get_set_elem(obj_type t_obj, key_type_ t_key) +hashmap::get_set_elem(obj_type t_obj, string s_key) { - typename hashmap::iterator iter = this->find(t_key); + typename hashmap::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::get_set_elem(obj_type t_obj return t_ret; } -template -obj_type -hashmap::get_or_callback_set -(obj_type (*func)(void*), void* p_void, key_type_ t_key) -{ - typename hashmap::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 +template void -hashmap::set_elem(obj_type t_obj, key_type_ t_key) +hashmap::set_elem(obj_type t_obj, string s_key) { - (*this)[t_key] = t_obj; + (*this)[s_key] = t_obj; } -template +template obj_type -hashmap::get_elem(key_type_ t_key) +hashmap::get_elem(string s_key) { - typename hashmap::iterator iter = this->find(t_key); + typename hashmap::iterator iter = this->find(s_key); if ( iter != this->end() ) return iter->second; @@ -87,12 +35,12 @@ hashmap::get_elem(key_type_ t_key) return obj_type(); } -template -vector* -hashmap::get_key_vector() +template +vector* +hashmap::get_key_vector() { - vector* p_vec = new vector; - typename hashmap::iterator iter; + vector* p_vec = new vector; + typename hashmap::iterator iter; for ( iter = this->begin(); iter != this->end(); ++iter ) p_vec->push_back(iter->first); @@ -100,27 +48,27 @@ hashmap::get_key_vector() return p_vec; } -template +template bool -hashmap::exists(key_type_ t_key) +hashmap::exists(string s_key) { - return this->find(t_key) != this->end(); + return this->find(s_key) != this->end(); } -template +template void -hashmap::run_func( void (*func)(obj_type) ) +hashmap::run_func( void (*func)(obj_type) ) { - typename hashmap::iterator iter; + typename hashmap::iterator iter; for ( iter = this->begin(); iter != this->end(); ++iter ) ( *func ) ( iter->second ); } -template +template void -hashmap::run_func( void (*func)(obj_type, void*), void* v_arg ) +hashmap::run_func( void (*func)(obj_type, void*), void* v_arg ) { - typename hashmap::iterator iter; + typename hashmap::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, - class alloc_type = compare_allocator -> -struct nhashmap : public shashmap +template +struct nhashmap : public shashmap { - 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 +template obj_type -nhashmap::get_elem(key_type_ t_key) +nhashmap::get_elem(string s_key) { - typename hashmap::iterator iter = this->find(t_key); + typename hashmap::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, - class alloc_type = compare_allocator -> -class shashmap : protected hashmap +template +class shashmap : public hashmap { 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* get_key_vector(); + virtual inline bool exists(string s_key); + virtual inline vector* 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 -shashmap::shashmap() +template +shashmap::shashmap() { pthread_mutex_init( &mut_shashmap, NULL ); } -template -shashmap::~shashmap() +template +shashmap::~shashmap() { pthread_mutex_destroy( &mut_shashmap ); } -template +template void -shashmap::add_elem(obj_type t_obj, key_type_ t_key) +shashmap::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 +template void -shashmap::add_elem_insecure(obj_type t_obj, key_type_ t_key) +shashmap::add_elem_insecure(obj_type t_obj, string s_key) { - (*this)[t_key] = t_obj; + (*this)[s_key] = t_obj; } -template +template obj_type -shashmap::get_set_elem(obj_type t_obj, key_type_ t_key) +shashmap::get_set_elem(obj_type t_obj, string s_key) { pthread_mutex_lock( &mut_shashmap ); - obj_type t_ret = hashmap::get_set_elem(t_obj, t_key); + obj_type t_ret = hashmap::get_set_elem(t_obj, s_key); pthread_mutex_unlock( &mut_shashmap ); return t_ret; } -template -obj_type -shashmap::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::get_or_callback_set - (func, p_void, t_key); - pthread_mutex_unlock( &mut_shashmap ); - return t_ret; -} - -template +template void -shashmap::set_elem(obj_type t_obj, key_type_ t_key) +shashmap::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 +template obj_type -shashmap::get_elem(key_type_ t_key) +shashmap::get_elem(string s_key) { pthread_mutex_lock( &mut_shashmap ); - obj_type t_ret = hashmap::get_elem(t_key); + obj_type t_ret = hashmap::get_elem(s_key); pthread_mutex_unlock( &mut_shashmap ); return t_ret; } -template +template void -shashmap::del_elem(key_type_ t_key) +shashmap::del_elem(string s_key) { pthread_mutex_lock( &mut_shashmap ); - hashmap::erase(t_key); + hashmap::erase(s_key); pthread_mutex_unlock( &mut_shashmap ); } -template +template void -shashmap::del_elem_insecure(key_type_ t_key) +shashmap::del_elem_insecure(string s_key) { - hashmap::erase(t_key); + hashmap::erase(s_key); } -template -vector* -shashmap::get_key_vector() +template +vector* +shashmap::get_key_vector() { pthread_mutex_lock( &mut_shashmap ); - vector* p_vec = hashmap::get_key_vector(); + vector* p_vec = hashmap::get_key_vector(); pthread_mutex_unlock( &mut_shashmap ); return p_vec; } -template +template void -shashmap::clear() +shashmap::clear() { pthread_mutex_lock( &mut_shashmap ); - hashmap::clear(); + hashmap::clear(); pthread_mutex_unlock( &mut_shashmap ); } -template +template int -shashmap::size() +shashmap::size() { pthread_mutex_lock( &mut_shashmap ); - int i_size = hashmap::size(); + int i_size = hashmap::size(); pthread_mutex_unlock( &mut_shashmap ); return i_size; } -template +template bool -shashmap::exists(key_type_ t_key) +shashmap::exists(string s_key) { pthread_mutex_lock( &mut_shashmap ); - bool b_ret = hashmap::exists(t_key); + bool b_ret = hashmap::exists(s_key); pthread_mutex_unlock( &mut_shashmap ); return b_ret; } -template +template void -shashmap::run_func( void (*func)(obj_type) ) +shashmap::run_func( void (*func)(obj_type) ) { pthread_mutex_lock( &mut_shashmap ); - hashmap::run_func(func); + hashmap::run_func(func); pthread_mutex_unlock( &mut_shashmap ); } -template +template void -shashmap::run_func( void (*func)(obj_type, void*), void* v_arg ) +shashmap::run_func( void (*func)(obj_type, void*), void* v_arg ) { pthread_mutex_lock( &mut_shashmap ); - hashmap::run_func(func, v_arg); + hashmap::run_func(func, v_arg); pthread_mutex_unlock( &mut_shashmap ); } -- cgit v1.2.3