diff options
Diffstat (limited to 'src/staticstring.cpp')
| -rw-r--r-- | src/staticstring.cpp | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/src/staticstring.cpp b/src/staticstring.cpp index 9eac92e..0012b0f 100644 --- a/src/staticstring.cpp +++ b/src/staticstring.cpp | |||
| @@ -243,10 +243,28 @@ bool StaticString::operator!=( StaticString &str ) | |||
| 243 | unsigned long int StaticString::getHashCode() | 243 | unsigned long int StaticString::getHashCode() |
| 244 | { | 244 | { |
| 245 | unsigned long int nPos = nLen; | 245 | unsigned long int nPos = nLen; |
| 246 | for( const char *s = (const char *)lpStr; *s; s++ ) | 246 | unsigned long int j = 0; |
| 247 | for( const char *s = (const char *)lpStr; j< nLen; s++, j++ ) | ||
| 247 | { | 248 | { |
| 248 | nPos = *s + (nPos << 6) + (nPos << 16) - nPos; | 249 | nPos = *s + (nPos << 6) + (nPos << 16) - nPos; |
| 249 | } | 250 | } |
| 250 | return nPos; | 251 | return nPos; |
| 251 | } | 252 | } |
| 252 | 253 | ||
| 254 | bool StaticString::compareForHash( Hashable &other ) | ||
| 255 | { | ||
| 256 | if( ((StaticString &)other).nLen != nLen ) | ||
| 257 | return false; | ||
| 258 | |||
| 259 | const char *a = ((StaticString &)other).lpStr; | ||
| 260 | const char *b = lpStr; | ||
| 261 | if( a == b ) | ||
| 262 | return true; | ||
| 263 | |||
| 264 | for( unsigned long j = 0; j < nLen; j++, a++, b++ ) | ||
| 265 | if( *a != *b ) | ||
| 266 | return false; | ||
| 267 | |||
| 268 | return true; | ||
| 269 | } | ||
| 270 | |||
