diff options
| author | Paul Buetow <paul@buetow.org> | 2010-11-21 16:20:55 +0000 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2010-11-21 16:20:55 +0000 |
| commit | 6fde6b0fe90abde84011202edd40fe46eb06af44 (patch) | |
| tree | ef760338c50b4df3ae9cca96347bca962fdbec7e /src/maps | |
| parent | 55b08bd93257d32df76efc4e8e3f49311c39ee82 (diff) | |
Diffstat (limited to 'src/maps')
| -rw-r--r-- | src/maps/hashmap.h | 3 | ||||
| -rw-r--r-- | src/maps/hashmap.tmpl | 5 | ||||
| -rw-r--r-- | src/maps/mtools.h | 3 | ||||
| -rw-r--r-- | src/maps/mtools.tmpl | 3 | ||||
| -rw-r--r-- | src/maps/nhashmap.h | 3 | ||||
| -rw-r--r-- | src/maps/nhashmap.tmpl | 3 | ||||
| -rw-r--r-- | src/maps/shashmap.h | 5 | ||||
| -rw-r--r-- | src/maps/shashmap.tmpl | 41 |
8 files changed, 43 insertions, 23 deletions
diff --git a/src/maps/hashmap.h b/src/maps/hashmap.h index 913b274..0a0535a 100644 --- a/src/maps/hashmap.h +++ b/src/maps/hashmap.h @@ -1,12 +1,11 @@ /*:* *: File: ./src/maps/hashmap.h *: - *: 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 diff --git a/src/maps/hashmap.tmpl b/src/maps/hashmap.tmpl index cea2131..b3524b9 100644 --- a/src/maps/hashmap.tmpl +++ b/src/maps/hashmap.tmpl @@ -1,12 +1,11 @@ /*:* *: File: ./src/maps/hashmap.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 @@ -44,7 +43,7 @@ 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 ) + for( size_t i = 0; i < i_size; ++i ) i_hash = ( i_hash << 5 ) ^ t_key.at(i) ^ i_hash; return i_hash; diff --git a/src/maps/mtools.h b/src/maps/mtools.h index dadcdc8..5a2b6bb 100644 --- a/src/maps/mtools.h +++ b/src/maps/mtools.h @@ -1,12 +1,11 @@ /*:* *: File: ./src/maps/mtools.h *: - *: 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 diff --git a/src/maps/mtools.tmpl b/src/maps/mtools.tmpl index 0c6b409..dff950f 100644 --- a/src/maps/mtools.tmpl +++ b/src/maps/mtools.tmpl @@ -1,12 +1,11 @@ /*:* *: File: ./src/maps/mtools.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 diff --git a/src/maps/nhashmap.h b/src/maps/nhashmap.h index fcfaf36..6443219 100644 --- a/src/maps/nhashmap.h +++ b/src/maps/nhashmap.h @@ -1,12 +1,11 @@ /*:* *: File: ./src/maps/nhashmap.h *: - *: 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 diff --git a/src/maps/nhashmap.tmpl b/src/maps/nhashmap.tmpl index 45a40aa..c1f02ce 100644 --- a/src/maps/nhashmap.tmpl +++ b/src/maps/nhashmap.tmpl @@ -1,12 +1,11 @@ /*:* *: File: ./src/maps/nhashmap.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 diff --git a/src/maps/shashmap.h b/src/maps/shashmap.h index 8c94331..445ea77 100644 --- a/src/maps/shashmap.h +++ b/src/maps/shashmap.h @@ -1,12 +1,11 @@ /*:* *: File: ./src/maps/shashmap.h *: - *: 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 @@ -26,6 +25,7 @@ #ifndef SHASHMAP_H #define SHASHMAP_H +#include <pthread.h> #include "hashmap.h" #include "../monitor/dump.h" @@ -43,6 +43,7 @@ class shashmap : protected hashmap<obj_type, key_type_, hash_type, alloc_type>, public dumpable { private: + pthread_mutex_t mut_shashmap; protected: virtual void dumpit(); 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; } |
