summaryrefslogtreecommitdiff
path: root/src/set.cpp
diff options
context:
space:
mode:
authorMike Buland <eichlan@xagasoft.com>2007-08-05 05:27:17 +0000
committerMike Buland <eichlan@xagasoft.com>2007-08-05 05:27:17 +0000
commitd3b44beef6e899b65f15a1c27bb76e255d8651d3 (patch)
tree68ca3699833496d2126c0a2a3d857c9899665aa9 /src/set.cpp
parent9cf4949ff56464ce4737fd3a0e6b757032354b0e (diff)
downloadlibbu++-d3b44beef6e899b65f15a1c27bb76e255d8651d3.tar.gz
libbu++-d3b44beef6e899b65f15a1c27bb76e255d8651d3.tar.bz2
libbu++-d3b44beef6e899b65f15a1c27bb76e255d8651d3.tar.xz
libbu++-d3b44beef6e899b65f15a1c27bb76e255d8651d3.zip
Ok, the set looks like it works. That's kinda' cool. It could use a few more
operators, but that's a minor issue.
Diffstat (limited to 'src/set.cpp')
-rw-r--r--src/set.cpp101
1 files changed, 2 insertions, 99 deletions
diff --git a/src/set.cpp b/src/set.cpp
index a207c29..69f4996 100644
--- a/src/set.cpp
+++ b/src/set.cpp
@@ -1,101 +1,4 @@
1#include "hash.h" 1#include "set.h"
2 2
3namespace Bu { subExceptionDef( HashException ) } 3namespace Bu { subExceptionDef( SetException ) }
4
5template<> uint32_t Bu::__calcHashCode<int>( const int &k )
6{
7 return k;
8}
9
10template<> bool Bu::__cmpHashKeys<int>( const int &a, const int &b )
11{
12 return a == b;
13}
14
15template<> uint32_t Bu::__calcHashCode<unsigned int>( const unsigned int &k )
16{
17 return k;
18}
19
20template<> bool Bu::__cmpHashKeys<unsigned int>( const unsigned int &a, const unsigned int &b )
21{
22 return a == b;
23}
24
25template<>
26uint32_t Bu::__calcHashCode<const char *>( const char * const &k )
27{
28 if (k == NULL)
29 {
30 return 0;
31 }
32
33 unsigned long int nPos = 0;
34 for( const char *s = k; *s; s++ )
35 {
36 nPos = *s + (nPos << 6) + (nPos << 16) - nPos;
37 }
38
39 return nPos;
40}
41
42template<> bool Bu::__cmpHashKeys<const char *>( const char * const &a, const char * const &b )
43{
44 if( a == b )
45 return true;
46
47 for(int j=0; a[j] == b[j]; j++ )
48 if( a[j] == '\0' )
49 return true;
50
51 return false;
52}
53
54template<>
55uint32_t Bu::__calcHashCode<char *>( char * const &k )
56{
57 if (k == NULL)
58 {
59 return 0;
60 }
61
62 unsigned long int nPos = 0;
63 for( const char *s = k; *s; s++ )
64 {
65 nPos = *s + (nPos << 6) + (nPos << 16) - nPos;
66 }
67
68 return nPos;
69}
70
71template<> bool Bu::__cmpHashKeys<char *>( char * const &a, char * const &b )
72{
73 if( a == b )
74 return true;
75
76 for(int j=0; a[j] == b[j]; j++ )
77 if( a[j] == '\0' )
78 return true;
79
80 return false;
81}
82
83template<> uint32_t Bu::__calcHashCode<std::string>( const std::string &k )
84{
85 std::string::size_type j, sz = k.size();
86 const char *s = k.c_str();
87
88 unsigned long int nPos = 0;
89 for( j = 0; j < sz; j++, s++ )
90 {
91 nPos = *s + (nPos << 6) + (nPos << 16) - nPos;
92 }
93
94 return nPos;
95}
96
97template<> bool Bu::__cmpHashKeys<std::string>( const std::string &a, const std::string &b )
98{
99 return a == b;
100}
101 4