diff options
Diffstat (limited to 'src/maps/shashmap.tmpl')
| -rw-r--r-- | src/maps/shashmap.tmpl | 41 |
1 files changed, 33 insertions, 8 deletions
diff --git a/src/maps/shashmap.tmpl b/src/maps/shashmap.tmpl index 1613049..4e91d33 100644 --- a/src/maps/shashmap.tmpl +++ b/src/maps/shashmap.tmpl @@ -1,12 +1,11 @@ /*:* *: File: ./src/maps/shashmap.tmpl *: - *: yChat; Homepage: ychat.buetow.org; Version 0.9.0-CURRENT + *: yChat; Homepage: www.yChat.org; Version 0.8.3-CURRENT *: *: Copyright (C) 2003 Paul C. Buetow, Volker Richter *: Copyright (C) 2004 Paul C. Buetow *: Copyright (C) 2005 EXA Digital Solutions GbR - *: Copyright (C) 2006, 2007 Paul C. Buetow *: *: This program is free software; you can redistribute it and/or *: modify it under the terms of the GNU General Public License @@ -25,17 +24,23 @@ template<class obj_type, class key_type_, class hash_type, class alloc_type> shashmap<obj_type, key_type_, hash_type, alloc_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() -{} +{ + pthread_mutex_destroy( &mut_shashmap ); +} template<class obj_type, class key_type_, class hash_type, class alloc_type> void shashmap<obj_type, key_type_, hash_type, alloc_type>::add_elem(obj_type t_obj, key_type_ t_key) { + pthread_mutex_lock( &mut_shashmap ); (*this)[t_key] = t_obj; + pthread_mutex_unlock( &mut_shashmap ); } template<class obj_type, class key_type_, class hash_type, class alloc_type> @@ -49,7 +54,9 @@ 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_set_elem(obj_type t_obj, key_type_ t_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); + pthread_mutex_unlock( &mut_shashmap ); return t_ret; } @@ -58,8 +65,10 @@ 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; } @@ -67,14 +76,18 @@ template<class obj_type, class key_type_, class hash_type, class alloc_type> void shashmap<obj_type, key_type_, hash_type, alloc_type>::set_elem(obj_type t_obj, key_type_ t_key) { + pthread_mutex_lock( &mut_shashmap ); (*this)[t_key] = t_obj; + pthread_mutex_unlock( &mut_shashmap ); } 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_elem(key_type_ t_key) { + pthread_mutex_lock( &mut_shashmap ); obj_type t_ret = hashmap<obj_type, key_type_, hash_type, alloc_type>::get_elem(t_key); + pthread_mutex_unlock( &mut_shashmap ); return t_ret; } @@ -82,7 +95,9 @@ template<class obj_type, class key_type_, class hash_type, class alloc_type> void shashmap<obj_type, key_type_, hash_type, alloc_type>::del_elem(key_type_ t_key) { + pthread_mutex_lock( &mut_shashmap ); hashmap<obj_type, key_type_, hash_type, alloc_type>::erase(t_key); + pthread_mutex_unlock( &mut_shashmap ); } template<class obj_type, class key_type_, class hash_type, class alloc_type> @@ -96,7 +111,9 @@ 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() { + pthread_mutex_lock( &mut_shashmap ); vector<key_type_>* p_vec = hashmap<obj_type, key_type_, hash_type, alloc_type>::get_key_vector(); + pthread_mutex_unlock( &mut_shashmap ); return p_vec; } @@ -104,14 +121,18 @@ template<class obj_type, class key_type_, class hash_type, class alloc_type> void shashmap<obj_type, key_type_, hash_type, alloc_type>::clear() { + pthread_mutex_lock( &mut_shashmap ); hashmap<obj_type, key_type_, hash_type, alloc_type>::clear(); + pthread_mutex_unlock( &mut_shashmap ); } template<class obj_type, class key_type_, class hash_type, class alloc_type> int shashmap<obj_type, key_type_, hash_type, alloc_type>::size() { + pthread_mutex_lock( &mut_shashmap ); int i_size = hashmap<obj_type, key_type_, hash_type, alloc_type>::size(); + pthread_mutex_unlock( &mut_shashmap ); return i_size; } @@ -119,7 +140,9 @@ template<class obj_type, class key_type_, class hash_type, class alloc_type> bool shashmap<obj_type, key_type_, hash_type, alloc_type>::exists(key_type_ t_key) { + pthread_mutex_lock( &mut_shashmap ); bool b_ret = hashmap<obj_type, key_type_, hash_type, alloc_type>::exists(t_key); + pthread_mutex_unlock( &mut_shashmap ); return b_ret; } @@ -127,28 +150,30 @@ template<class obj_type, class key_type_, class hash_type, class alloc_type> void shashmap<obj_type, key_type_, hash_type, alloc_type>::run_func( void (*func)(obj_type) ) { + pthread_mutex_lock( &mut_shashmap ); hashmap<obj_type, key_type_, hash_type, alloc_type>::run_func(func); + pthread_mutex_unlock( &mut_shashmap ); } template<class obj_type, class key_type_, class hash_type, class alloc_type> void shashmap<obj_type, key_type_, hash_type, alloc_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); + pthread_mutex_unlock( &mut_shashmap ); } template<class obj_type, class key_type_, class hash_type, class alloc_type> void shashmap<obj_type, key_type_, hash_type, alloc_type>::dumpit() { - dumpable::add - ("[shashmap]"); + dumpable::add("[shashmap]"); vector<key_type_>* p_vec = get_key_vector(); typename vector<key_type_>::iterator iter; for (iter = p_vec->begin(); iter != p_vec->end(); ++iter) - dumpable::add - (*iter); + dumpable::add(*iter); delete p_vec; } |
