summaryrefslogtreecommitdiff
path: root/ychat-0.7.7.1/src/maps
diff options
context:
space:
mode:
Diffstat (limited to 'ychat-0.7.7.1/src/maps')
-rw-r--r--ychat-0.7.7.1/src/maps/CVS/Entries11
-rw-r--r--ychat-0.7.7.1/src/maps/CVS/Repository1
-rw-r--r--ychat-0.7.7.1/src/maps/CVS/Root1
-rw-r--r--ychat-0.7.7.1/src/maps/hash.cpp26
-rw-r--r--ychat-0.7.7.1/src/maps/hash.h18
-rw-r--r--ychat-0.7.7.1/src/maps/hashmap.h24
-rw-r--r--ychat-0.7.7.1/src/maps/hashmap.tmpl74
-rw-r--r--ychat-0.7.7.1/src/maps/mtools.h11
-rw-r--r--ychat-0.7.7.1/src/maps/mtools.tmpl12
-rw-r--r--ychat-0.7.7.1/src/maps/nhashmap.h15
-rw-r--r--ychat-0.7.7.1/src/maps/nhashmap.tmpl11
-rw-r--r--ychat-0.7.7.1/src/maps/shashmap.h33
-rw-r--r--ychat-0.7.7.1/src/maps/shashmap.tmpl129
13 files changed, 366 insertions, 0 deletions
diff --git a/ychat-0.7.7.1/src/maps/CVS/Entries b/ychat-0.7.7.1/src/maps/CVS/Entries
new file mode 100644
index 0000000..6033e5b
--- /dev/null
+++ b/ychat-0.7.7.1/src/maps/CVS/Entries
@@ -0,0 +1,11 @@
+/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.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/ychat-0.7.7.1/src/maps/CVS/Repository b/ychat-0.7.7.1/src/maps/CVS/Repository
new file mode 100644
index 0000000..b7c8ecb
--- /dev/null
+++ b/ychat-0.7.7.1/src/maps/CVS/Repository
@@ -0,0 +1 @@
+ychat/src/maps
diff --git a/ychat-0.7.7.1/src/maps/CVS/Root b/ychat-0.7.7.1/src/maps/CVS/Root
new file mode 100644
index 0000000..745de68
--- /dev/null
+++ b/ychat-0.7.7.1/src/maps/CVS/Root
@@ -0,0 +1 @@
+:pserver:anonymous@buetow.org:/usr/home/cvs/cvsroot
diff --git a/ychat-0.7.7.1/src/maps/hash.cpp b/ychat-0.7.7.1/src/maps/hash.cpp
new file mode 100644
index 0000000..b3d80d1
--- /dev/null
+++ b/ychat-0.7.7.1/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/ychat-0.7.7.1/src/maps/hash.h b/ychat-0.7.7.1/src/maps/hash.h
new file mode 100644
index 0000000..15ce3fe
--- /dev/null
+++ b/ychat-0.7.7.1/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/ychat-0.7.7.1/src/maps/hashmap.h b/ychat-0.7.7.1/src/maps/hashmap.h
new file mode 100644
index 0000000..3cc2f79
--- /dev/null
+++ b/ychat-0.7.7.1/src/maps/hashmap.h
@@ -0,0 +1,24 @@
+#ifndef HASHMAP_H
+#define HASHMAP_H
+
+#include <ext/hash_map>
+#include "hash.h"
+
+using namespace std;
+
+using __gnu_cxx::hash_map;
+
+template<class obj_type>
+struct hashmap : public hash_map< string, obj_type, hash, hashmap_allocator>
+{
+ 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 );
+};
+
+#include "hashmap.tmpl"
+#endif
diff --git a/ychat-0.7.7.1/src/maps/hashmap.tmpl b/ychat-0.7.7.1/src/maps/hashmap.tmpl
new file mode 100644
index 0000000..682c395
--- /dev/null
+++ b/ychat-0.7.7.1/src/maps/hashmap.tmpl
@@ -0,0 +1,74 @@
+template<class obj_type>
+obj_type
+hashmap<obj_type>::get_set_elem(obj_type t_obj, string s_key)
+{
+ typename hashmap<obj_type>::iterator iter = this->find(s_key);
+
+ if ( iter == this->end() )
+ {
+ set_elem(t_obj, s_key);
+ return obj_type();
+ }
+
+ obj_type t_ret = iter->second;
+ iter->second = t_obj;
+
+ return t_ret;
+}
+
+template<class obj_type>
+void
+hashmap<obj_type>::set_elem(obj_type t_obj, string s_key)
+{
+ (*this)[s_key] = t_obj;
+}
+
+template<class obj_type>
+obj_type
+hashmap<obj_type>::get_elem(string s_key)
+{
+ typename hashmap<obj_type>::iterator iter = this->find(s_key);
+
+ if ( iter != this->end() )
+ return iter->second;
+
+ return obj_type();
+}
+
+template<class obj_type>
+vector<string>*
+hashmap<obj_type>::get_key_vector()
+{
+ 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);
+
+ return p_vec;
+}
+
+template<class obj_type>
+bool
+hashmap<obj_type>::exists(string s_key)
+{
+ return this->find(s_key) != this->end();
+}
+
+template<class obj_type>
+void
+hashmap<obj_type>::run_func( void (*func)(obj_type) )
+{
+ typename hashmap<obj_type>::iterator iter;
+ for ( iter = this->begin(); iter != this->end(); ++iter )
+ ( *func ) ( iter->second );
+}
+
+template<class obj_type>
+void
+hashmap<obj_type>::run_func( void (*func)(obj_type, void*), void* v_arg )
+{
+ typename hashmap<obj_type>::iterator iter;
+ for ( iter = this->begin(); iter != this->end(); ++iter )
+ ( *func ) ( iter->second, v_arg );
+}
diff --git a/ychat-0.7.7.1/src/maps/mtools.h b/ychat-0.7.7.1/src/maps/mtools.h
new file mode 100644
index 0000000..4ee45b8
--- /dev/null
+++ b/ychat-0.7.7.1/src/maps/mtools.h
@@ -0,0 +1,11 @@
+#ifndef MTOOLS_H
+#define MTOOLS_H
+
+template <class type_>
+struct mtools
+{
+ static void delete_obj(type_ type_obj);
+};
+
+#include "mtools.tmpl"
+#endif
diff --git a/ychat-0.7.7.1/src/maps/mtools.tmpl b/ychat-0.7.7.1/src/maps/mtools.tmpl
new file mode 100644
index 0000000..6917131
--- /dev/null
+++ b/ychat-0.7.7.1/src/maps/mtools.tmpl
@@ -0,0 +1,12 @@
+#ifndef MTOOLS_TMPL
+#define MTOOLS_TMPL
+
+template <class type_>
+void
+mtools<type_>::delete_obj( type_ type_obj )
+{
+ if ( type_obj )
+ delete type_obj;
+}
+
+#endif
diff --git a/ychat-0.7.7.1/src/maps/nhashmap.h b/ychat-0.7.7.1/src/maps/nhashmap.h
new file mode 100644
index 0000000..4cfb50e
--- /dev/null
+++ b/ychat-0.7.7.1/src/maps/nhashmap.h
@@ -0,0 +1,15 @@
+#ifndef NHASHMAP_H
+#define NHASHMAP_H
+
+#include "shashmap.h"
+
+using namespace std;
+
+template<class obj_type>
+struct nhashmap : public shashmap<obj_type>
+{
+ inline obj_type get_elem(string s_key);
+};
+
+#include "nhashmap.tmpl"
+#endif
diff --git a/ychat-0.7.7.1/src/maps/nhashmap.tmpl b/ychat-0.7.7.1/src/maps/nhashmap.tmpl
new file mode 100644
index 0000000..422ea2f
--- /dev/null
+++ b/ychat-0.7.7.1/src/maps/nhashmap.tmpl
@@ -0,0 +1,11 @@
+template<class obj_type>
+obj_type
+nhashmap<obj_type>::get_elem(string s_key)
+{
+ typename hashmap<obj_type>::iterator iter = this->find(s_key);
+
+ if ( iter != this->end() )
+ return iter->second;
+
+ return NULL;
+}
diff --git a/ychat-0.7.7.1/src/maps/shashmap.h b/ychat-0.7.7.1/src/maps/shashmap.h
new file mode 100644
index 0000000..e31b55f
--- /dev/null
+++ b/ychat-0.7.7.1/src/maps/shashmap.h
@@ -0,0 +1,33 @@
+#ifndef SHASHMAP_H
+#define SHASHMAP_H
+
+#include <pthread.h>
+#include "hashmap.h"
+
+using namespace std;
+
+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, 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(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 );
+};
+
+#include "shashmap.tmpl"
+#endif
diff --git a/ychat-0.7.7.1/src/maps/shashmap.tmpl b/ychat-0.7.7.1/src/maps/shashmap.tmpl
new file mode 100644
index 0000000..7cf4b6b
--- /dev/null
+++ b/ychat-0.7.7.1/src/maps/shashmap.tmpl
@@ -0,0 +1,129 @@
+template<class obj_type>
+shashmap<obj_type>::shashmap()
+{
+ pthread_mutex_init( &mut_shashmap, NULL );
+}
+
+template<class obj_type>
+shashmap<obj_type>::~shashmap()
+{
+ pthread_mutex_destroy( &mut_shashmap );
+}
+
+template<class obj_type>
+void
+shashmap<obj_type>::add_elem(obj_type t_obj, string s_key)
+{
+ pthread_mutex_lock( &mut_shashmap );
+ (*this)[s_key] = t_obj;
+ pthread_mutex_unlock( &mut_shashmap );
+}
+
+template<class obj_type>
+void
+shashmap<obj_type>::add_elem_insecure(obj_type t_obj, string s_key)
+{
+ (*this)[s_key] = t_obj;
+}
+
+template<class obj_type>
+obj_type
+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>::get_set_elem(t_obj, s_key);
+ pthread_mutex_unlock( &mut_shashmap );
+ return t_ret;
+}
+
+template<class obj_type>
+void
+shashmap<obj_type>::set_elem(obj_type t_obj, string s_key)
+{
+ pthread_mutex_lock( &mut_shashmap );
+ (*this)[s_key] = t_obj;
+ pthread_mutex_unlock( &mut_shashmap );
+}
+
+template<class obj_type>
+obj_type
+shashmap<obj_type>::get_elem(string s_key)
+{
+ pthread_mutex_lock( &mut_shashmap );
+ obj_type t_ret = hashmap<obj_type>::get_elem(s_key);
+ pthread_mutex_unlock( &mut_shashmap );
+ return t_ret;
+}
+
+template<class obj_type>
+void
+shashmap<obj_type>::del_elem(string s_key)
+{
+ pthread_mutex_lock( &mut_shashmap );
+ hashmap<obj_type>::erase(s_key);
+ pthread_mutex_unlock( &mut_shashmap );
+}
+
+template<class obj_type>
+void
+shashmap<obj_type>::del_elem_insecure(string s_key)
+{
+ hashmap<obj_type>::erase(s_key);
+}
+
+template<class obj_type>
+vector<string>*
+shashmap<obj_type>::get_key_vector()
+{
+ pthread_mutex_lock( &mut_shashmap );
+ vector<string>* p_vec = hashmap<obj_type>::get_key_vector();
+ pthread_mutex_unlock( &mut_shashmap );
+ return p_vec;
+}
+
+template<class obj_type>
+void
+shashmap<obj_type>::clear()
+{
+ pthread_mutex_lock( &mut_shashmap );
+ hashmap<obj_type>::clear();
+ pthread_mutex_unlock( &mut_shashmap );
+}
+
+template<class obj_type>
+int
+shashmap<obj_type>::size()
+{
+ pthread_mutex_lock( &mut_shashmap );
+ int i_size = hashmap<obj_type>::size();
+ pthread_mutex_unlock( &mut_shashmap );
+ return i_size;
+}
+
+template<class obj_type>
+bool
+shashmap<obj_type>::exists(string s_key)
+{
+ pthread_mutex_lock( &mut_shashmap );
+ bool b_ret = hashmap<obj_type>::exists(s_key);
+ pthread_mutex_unlock( &mut_shashmap );
+ return b_ret;
+}
+
+template<class obj_type>
+void
+shashmap<obj_type>::run_func( void (*func)(obj_type) )
+{
+ pthread_mutex_lock( &mut_shashmap );
+ hashmap<obj_type>::run_func(func);
+ pthread_mutex_unlock( &mut_shashmap );
+}
+
+template<class obj_type>
+void
+shashmap<obj_type>::run_func( void (*func)(obj_type, void*), void* v_arg )
+{
+ pthread_mutex_lock( &mut_shashmap );
+ hashmap<obj_type>::run_func(func, v_arg);
+ pthread_mutex_unlock( &mut_shashmap );
+}