summaryrefslogtreecommitdiff
path: root/src/maps
diff options
context:
space:
mode:
Diffstat (limited to 'src/maps')
-rw-r--r--src/maps/CVS/Entries14
-rw-r--r--src/maps/hash.cpp26
-rw-r--r--src/maps/hash.h18
-rw-r--r--src/maps/hashmap.h47
-rw-r--r--src/maps/hashmap.tmpl100
-rw-r--r--src/maps/nhashmap.h12
-rw-r--r--src/maps/nhashmap.tmpl6
-rw-r--r--src/maps/shashmap.h31
-rw-r--r--src/maps/shashmap.tmpl100
9 files changed, 146 insertions, 208 deletions
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 <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/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 <ext/hash_map>
+#include "hash.h"
using namespace std;
-template<class key_type_>
-struct compare_allocator
-{
- inline bool operator()(key_type_ t_key_1, key_type_ t_key_2) const;
-};
-
-template<class key_type_>
-struct equals_allocator
-{
- inline bool operator()(key_type_ t_key_1, key_type_ t_key_2) const;
-};
-
-template<class key_type_>
-struct size_hash
-{
- inline int operator()(key_type_ t_key) const;
-};
-
-template<class key_type_>
-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<string>,
- class alloc_type = compare_allocator<string>
->
-struct hashmap : public __gnu_cxx::hash_map<key_type_, obj_type, hash_type, alloc_type>
+template<class obj_type>
+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<key_type_>* 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<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 );
};
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<class key_type_>
-bool
-compare_allocator<key_type_>::operator()(key_type_ t_key_1, key_type_ t_key_2) const
-{
- return t_key_1.compare(t_key_2) == 0;
-}
-
-template<class key_type_>
-bool
-equals_allocator<key_type_>::operator()(key_type_ t_key_1, key_type_ t_key_2) const
-{
- return t_key_1 == t_key_2;
-}
-
-template<class key_type_>
-int
-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 )
- i_hash = ( i_hash << 5 ) ^ t_key.at(i) ^ i_hash;
-
- return i_hash;
-}
-
-template<class key_type_>
-int
-self_hash<key_type_>::operator()(key_type_ t_key) const
-{
- return t_key;
-}
-
-
-template<class obj_type, class key_type_, class hash_type, class alloc_type>
+template<class obj_type>
obj_type
-hashmap<obj_type, key_type_, hash_type, alloc_type>::get_set_elem(obj_type t_obj, key_type_ t_key)
+hashmap<obj_type>::get_set_elem(obj_type t_obj, string s_key)
{
- typename hashmap<obj_type, key_type_, hash_type, alloc_type>::iterator iter = this->find(t_key);
+ typename hashmap<obj_type>::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<obj_type, key_type_, hash_type, alloc_type>::get_set_elem(obj_type t_obj
return t_ret;
}
-template<class obj_type, class key_type_, class hash_type, class alloc_type>
-obj_type
-hashmap<obj_type, key_type_, hash_type, alloc_type>::get_or_callback_set
-(obj_type (*func)(void*), void* p_void, key_type_ t_key)
-{
- typename hashmap<obj_type, key_type_, hash_type, alloc_type>::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<class obj_type, class key_type_, class hash_type, class alloc_type>
+template<class obj_type>
void
-hashmap<obj_type, key_type_, hash_type, alloc_type>::set_elem(obj_type t_obj, key_type_ t_key)
+hashmap<obj_type>::set_elem(obj_type t_obj, string s_key)
{
- (*this)[t_key] = t_obj;
+ (*this)[s_key] = t_obj;
}
-template<class obj_type, class key_type_, class hash_type, class alloc_type>
+template<class obj_type>
obj_type
-hashmap<obj_type, key_type_, hash_type, alloc_type>::get_elem(key_type_ t_key)
+hashmap<obj_type>::get_elem(string s_key)
{
- typename hashmap<obj_type, key_type_, hash_type, alloc_type>::iterator iter = this->find(t_key);
+ typename hashmap<obj_type>::iterator iter = this->find(s_key);
if ( iter != this->end() )
return iter->second;
@@ -87,12 +35,12 @@ hashmap<obj_type, key_type_, hash_type, alloc_type>::get_elem(key_type_ t_key)
return obj_type();
}
-template<class obj_type, class key_type_, class hash_type, class alloc_type>
-vector<key_type_>*
-hashmap<obj_type, key_type_, hash_type, alloc_type>::get_key_vector()
+template<class obj_type>
+vector<string>*
+hashmap<obj_type>::get_key_vector()
{
- vector<key_type_>* p_vec = new vector<key_type_>;
- typename hashmap<obj_type, key_type_, hash_type, alloc_type>::iterator iter;
+ 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);
@@ -100,27 +48,27 @@ hashmap<obj_type, key_type_, hash_type, alloc_type>::get_key_vector()
return p_vec;
}
-template<class obj_type, class key_type_, class hash_type, class alloc_type>
+template<class obj_type>
bool
-hashmap<obj_type, key_type_, hash_type, alloc_type>::exists(key_type_ t_key)
+hashmap<obj_type>::exists(string s_key)
{
- return this->find(t_key) != this->end();
+ return this->find(s_key) != this->end();
}
-template<class obj_type, class key_type_, class hash_type, class alloc_type>
+template<class obj_type>
void
-hashmap<obj_type, key_type_, hash_type, alloc_type>::run_func( void (*func)(obj_type) )
+hashmap<obj_type>::run_func( void (*func)(obj_type) )
{
- typename hashmap<obj_type, key_type_, hash_type, alloc_type>::iterator iter;
+ typename hashmap<obj_type>::iterator iter;
for ( iter = this->begin(); iter != this->end(); ++iter )
( *func ) ( iter->second );
}
-template<class obj_type, class key_type_, class hash_type, class alloc_type>
+template<class obj_type>
void
-hashmap<obj_type, key_type_, hash_type, alloc_type>::run_func( void (*func)(obj_type, void*), void* v_arg )
+hashmap<obj_type>::run_func( void (*func)(obj_type, void*), void* v_arg )
{
- typename hashmap<obj_type, key_type_, hash_type, alloc_type>::iterator iter;
+ typename hashmap<obj_type>::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<string>,
- class alloc_type = compare_allocator<string>
->
-struct nhashmap : public shashmap<obj_type, key_type_, hash_type, alloc_type>
+template<class obj_type>
+struct nhashmap : public shashmap<obj_type>
{
- 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<class obj_type, class key_type_, class hash_type, class alloc_type>
+template<class obj_type>
obj_type
-nhashmap<obj_type, key_type_, hash_type, alloc_type>::get_elem(key_type_ t_key)
+nhashmap<obj_type>::get_elem(string s_key)
{
- typename hashmap<obj_type, key_type_, hash_type, alloc_type>::iterator iter = this->find(t_key);
+ typename hashmap<obj_type>::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<string>,
- class alloc_type = compare_allocator<string>
->
-class shashmap : protected hashmap<obj_type, key_type_, hash_type, alloc_type>
+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, 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<key_type_>* get_key_vector();
+ 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 );
};
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<class obj_type, class key_type_, class hash_type, class alloc_type>
-shashmap<obj_type, key_type_, hash_type, alloc_type>::shashmap()
+template<class obj_type>
+shashmap<obj_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()
+template<class obj_type>
+shashmap<obj_type>::~shashmap()
{
pthread_mutex_destroy( &mut_shashmap );
}
-template<class obj_type, class key_type_, class hash_type, class alloc_type>
+template<class obj_type>
void
-shashmap<obj_type, key_type_, hash_type, alloc_type>::add_elem(obj_type t_obj, key_type_ t_key)
+shashmap<obj_type>::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<class obj_type, class key_type_, class hash_type, class alloc_type>
+template<class obj_type>
void
-shashmap<obj_type, key_type_, hash_type, alloc_type>::add_elem_insecure(obj_type t_obj, key_type_ t_key)
+shashmap<obj_type>::add_elem_insecure(obj_type t_obj, string s_key)
{
- (*this)[t_key] = t_obj;
+ (*this)[s_key] = t_obj;
}
-template<class obj_type, class key_type_, class hash_type, class alloc_type>
+template<class obj_type>
obj_type
-shashmap<obj_type, key_type_, hash_type, alloc_type>::get_set_elem(obj_type t_obj, key_type_ t_key)
+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, key_type_, hash_type, alloc_type>::get_set_elem(t_obj, t_key);
+ 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, class key_type_, class hash_type, class alloc_type>
-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;
-}
-
-template<class obj_type, class key_type_, class hash_type, class alloc_type>
+template<class obj_type>
void
-shashmap<obj_type, key_type_, hash_type, alloc_type>::set_elem(obj_type t_obj, key_type_ t_key)
+shashmap<obj_type>::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<class obj_type, class key_type_, class hash_type, class alloc_type>
+template<class obj_type>
obj_type
-shashmap<obj_type, key_type_, hash_type, alloc_type>::get_elem(key_type_ t_key)
+shashmap<obj_type>::get_elem(string s_key)
{
pthread_mutex_lock( &mut_shashmap );
- obj_type t_ret = hashmap<obj_type, key_type_, hash_type, alloc_type>::get_elem(t_key);
+ obj_type t_ret = hashmap<obj_type>::get_elem(s_key);
pthread_mutex_unlock( &mut_shashmap );
return t_ret;
}
-template<class obj_type, class key_type_, class hash_type, class alloc_type>
+template<class obj_type>
void
-shashmap<obj_type, key_type_, hash_type, alloc_type>::del_elem(key_type_ t_key)
+shashmap<obj_type>::del_elem(string s_key)
{
pthread_mutex_lock( &mut_shashmap );
- hashmap<obj_type, key_type_, hash_type, alloc_type>::erase(t_key);
+ hashmap<obj_type>::erase(s_key);
pthread_mutex_unlock( &mut_shashmap );
}
-template<class obj_type, class key_type_, class hash_type, class alloc_type>
+template<class obj_type>
void
-shashmap<obj_type, key_type_, hash_type, alloc_type>::del_elem_insecure(key_type_ t_key)
+shashmap<obj_type>::del_elem_insecure(string s_key)
{
- hashmap<obj_type, key_type_, hash_type, alloc_type>::erase(t_key);
+ hashmap<obj_type>::erase(s_key);
}
-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()
+template<class obj_type>
+vector<string>*
+shashmap<obj_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();
+ vector<string>* p_vec = hashmap<obj_type>::get_key_vector();
pthread_mutex_unlock( &mut_shashmap );
return p_vec;
}
-template<class obj_type, class key_type_, class hash_type, class alloc_type>
+template<class obj_type>
void
-shashmap<obj_type, key_type_, hash_type, alloc_type>::clear()
+shashmap<obj_type>::clear()
{
pthread_mutex_lock( &mut_shashmap );
- hashmap<obj_type, key_type_, hash_type, alloc_type>::clear();
+ hashmap<obj_type>::clear();
pthread_mutex_unlock( &mut_shashmap );
}
-template<class obj_type, class key_type_, class hash_type, class alloc_type>
+template<class obj_type>
int
-shashmap<obj_type, key_type_, hash_type, alloc_type>::size()
+shashmap<obj_type>::size()
{
pthread_mutex_lock( &mut_shashmap );
- int i_size = hashmap<obj_type, key_type_, hash_type, alloc_type>::size();
+ int i_size = hashmap<obj_type>::size();
pthread_mutex_unlock( &mut_shashmap );
return i_size;
}
-template<class obj_type, class key_type_, class hash_type, class alloc_type>
+template<class obj_type>
bool
-shashmap<obj_type, key_type_, hash_type, alloc_type>::exists(key_type_ t_key)
+shashmap<obj_type>::exists(string s_key)
{
pthread_mutex_lock( &mut_shashmap );
- bool b_ret = hashmap<obj_type, key_type_, hash_type, alloc_type>::exists(t_key);
+ bool b_ret = hashmap<obj_type>::exists(s_key);
pthread_mutex_unlock( &mut_shashmap );
return b_ret;
}
-template<class obj_type, class key_type_, class hash_type, class alloc_type>
+template<class obj_type>
void
-shashmap<obj_type, key_type_, hash_type, alloc_type>::run_func( void (*func)(obj_type) )
+shashmap<obj_type>::run_func( void (*func)(obj_type) )
{
pthread_mutex_lock( &mut_shashmap );
- hashmap<obj_type, key_type_, hash_type, alloc_type>::run_func(func);
+ hashmap<obj_type>::run_func(func);
pthread_mutex_unlock( &mut_shashmap );
}
-template<class obj_type, class key_type_, class hash_type, class alloc_type>
+template<class obj_type>
void
-shashmap<obj_type, key_type_, hash_type, alloc_type>::run_func( void (*func)(obj_type, void*), void* v_arg )
+shashmap<obj_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);
+ hashmap<obj_type>::run_func(func, v_arg);
pthread_mutex_unlock( &mut_shashmap );
}