diff options
author | Mike Buland <eichlan@xagasoft.com> | 2006-11-21 19:52:12 +0000 |
---|---|---|
committer | Mike Buland <eichlan@xagasoft.com> | 2006-11-21 19:52:12 +0000 |
commit | 8b2878e6595e40d2a37bb9983274ccb5827a9192 (patch) | |
tree | 05a902091cebcaa40fb69818b335fee99ebf1aa5 /src/hash.h | |
parent | 4e55dab4511ffa8307e3ae7523659e6087632f95 (diff) | |
download | libbu++-8b2878e6595e40d2a37bb9983274ccb5827a9192.tar.gz libbu++-8b2878e6595e40d2a37bb9983274ccb5827a9192.tar.bz2 libbu++-8b2878e6595e40d2a37bb9983274ccb5827a9192.tar.xz libbu++-8b2878e6595e40d2a37bb9983274ccb5827a9192.zip |
Hash uses real exceptions now, and has a clear() function.
Diffstat (limited to 'src/hash.h')
-rw-r--r-- | src/hash.h | 38 |
1 files changed, 35 insertions, 3 deletions
@@ -5,10 +5,18 @@ | |||
5 | #include <string.h> | 5 | #include <string.h> |
6 | #include <memory> | 6 | #include <memory> |
7 | #include <iostream> | 7 | #include <iostream> |
8 | #include "exceptionbase.h" | ||
8 | #include "hashable.h" | 9 | #include "hashable.h" |
9 | 10 | ||
10 | #define bitsToBytes( n ) (n/32+(n%32>0 ? 1 : 0)) | 11 | #define bitsToBytes( n ) (n/32+(n%32>0 ? 1 : 0)) |
11 | 12 | ||
13 | subExceptionDecl( HashException ) | ||
14 | |||
15 | enum eHashException | ||
16 | { | ||
17 | excodeNotFilled | ||
18 | }; | ||
19 | |||
12 | template<typename T> | 20 | template<typename T> |
13 | uint32_t __calcHashCode( T k ); | 21 | uint32_t __calcHashCode( T k ); |
14 | 22 | ||
@@ -59,14 +67,20 @@ public: | |||
59 | operator _value() | 67 | operator _value() |
60 | { | 68 | { |
61 | if( bFilled == false ) | 69 | if( bFilled == false ) |
62 | throw "Nope, no data there"; | 70 | throw HashException( |
71 | excodeNotFilled, | ||
72 | "No data assosiated with that key." | ||
73 | ); | ||
63 | return *pValue; | 74 | return *pValue; |
64 | } | 75 | } |
65 | 76 | ||
66 | _value value() | 77 | _value value() |
67 | { | 78 | { |
68 | if( bFilled == false ) | 79 | if( bFilled == false ) |
69 | throw "Nope, no data there"; | 80 | throw HashException( |
81 | excodeNotFilled, | ||
82 | "No data assosiated with that key." | ||
83 | ); | ||
70 | return *pValue; | 84 | return *pValue; |
71 | } | 85 | } |
72 | 86 | ||
@@ -199,6 +213,21 @@ public: | |||
199 | } | 213 | } |
200 | } | 214 | } |
201 | 215 | ||
216 | void clear() | ||
217 | { | ||
218 | for( uint32_t j = 0; j < nCapacity; j++ ) | ||
219 | { | ||
220 | if( isFilled( j ) ) | ||
221 | if( !isDeleted( j ) ) | ||
222 | { | ||
223 | va.destroy( &aValues[j] ); | ||
224 | ka.destroy( &aKeys[j] ); | ||
225 | } | ||
226 | } | ||
227 | |||
228 | clearBits(); | ||
229 | } | ||
230 | |||
202 | value get( key k ) | 231 | value get( key k ) |
203 | { | 232 | { |
204 | uint32_t hash = __calcHashCode( k ); | 233 | uint32_t hash = __calcHashCode( k ); |
@@ -211,7 +240,10 @@ public: | |||
211 | } | 240 | } |
212 | else | 241 | else |
213 | { | 242 | { |
214 | throw "Hey, no such thing..."; | 243 | throw HashException( |
244 | excodeNotFilled, | ||
245 | "No data assosiated with that key." | ||
246 | ); | ||
215 | } | 247 | } |
216 | } | 248 | } |
217 | 249 | ||