aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Buland <eichlan@xagasoft.com>2007-07-10 02:15:01 +0000
committerMike Buland <eichlan@xagasoft.com>2007-07-10 02:15:01 +0000
commit7b8cb00259043365e001992229dfaf50c60dd66b (patch)
treea26e03951845560eb856957ffcee9c6158484251
parent32c48edc85e05bedc6324109e8a5429767dda42a (diff)
downloadlibbu++-7b8cb00259043365e001992229dfaf50c60dd66b.tar.gz
libbu++-7b8cb00259043365e001992229dfaf50c60dd66b.tar.bz2
libbu++-7b8cb00259043365e001992229dfaf50c60dd66b.tar.xz
libbu++-7b8cb00259043365e001992229dfaf50c60dd66b.zip
More FString updates, this one fixes the hashing and string comparison.
-rw-r--r--src/fstring.cpp11
-rw-r--r--src/fstring.h4
2 files changed, 13 insertions, 2 deletions
diff --git a/src/fstring.cpp b/src/fstring.cpp
index f71d6c1..429dfef 100644
--- a/src/fstring.cpp
+++ b/src/fstring.cpp
@@ -3,7 +3,16 @@
3 3
4template<> uint32_t Bu::__calcHashCode<Bu::FString>( const Bu::FString &k ) 4template<> uint32_t Bu::__calcHashCode<Bu::FString>( const Bu::FString &k )
5{ 5{
6 return __calcHashCode( k.c_str() ); 6 long j, sz = k.getSize();
7 const char *s = k.getStr();
8
9 long nPos = 0;
10 for( j = 0; j < sz; j++, s++ )
11 {
12 nPos = *s + (nPos << 6) + (nPos << 16) - nPos;
13 }
14
15 return nPos;
7} 16}
8 17
9template<> bool Bu::__cmpHashKeys<Bu::FString>( 18template<> bool Bu::__cmpHashKeys<Bu::FString>(
diff --git a/src/fstring.h b/src/fstring.h
index 73b04ab..31794d7 100644
--- a/src/fstring.h
+++ b/src/fstring.h
@@ -418,12 +418,14 @@ namespace Bu
418 return true; 418 return true;
419 if( pFirst == NULL ) 419 if( pFirst == NULL )
420 return false; 420 return false;
421 if( nLength != pData.nLength )
422 return false;
421 423
422 flatten(); 424 flatten();
423 pData.flatten(); 425 pData.flatten();
424 const chr *a = pData.pFirst->pData; 426 const chr *a = pData.pFirst->pData;
425 chr *b = pFirst->pData; 427 chr *b = pFirst->pData;
426 for( ; *a!=(chr)0 || *b!=(chr)0; a++, b++ ) 428 for( long j = 0; j < nLength; j++, a++, b++ )
427 { 429 {
428 if( *a != *b ) 430 if( *a != *b )
429 return false; 431 return false;