summaryrefslogtreecommitdiff
path: root/src/maps/shashmap.tmpl
diff options
context:
space:
mode:
Diffstat (limited to 'src/maps/shashmap.tmpl')
-rw-r--r--src/maps/shashmap.tmpl41
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;
}