Add HashValue() methods to BString

This commit is contained in:
Ingo Weinhold 2011-07-16 13:51:50 +02:00
parent abf1023d31
commit 5a54e156e5
2 changed files with 27 additions and 0 deletions

View File

@ -30,6 +30,9 @@ public:
int32 charCount) const;
bool IsEmpty() const;
uint32 HashValue() const;
static uint32 HashValue(const char* string);
// Assignment
BString& operator=(const BString& string);
BString& operator=(const char* string);
@ -416,6 +419,13 @@ BString::String() const
}
inline uint32
BString::HashValue() const
{
return HashValue(String());
}
inline BString &
BString::SetTo(const char* string)
{

View File

@ -282,6 +282,23 @@ BString::CountBytes(int32 fromCharOffset, int32 charCount) const
}
/*static*/ uint32
BString::HashValue(const char* string)
{
// from the Dragon Book: a slightly modified hashpjw()
uint32 h = 0;
if (string != NULL) {
for (; *string; string++) {
uint32 g = h & 0xf0000000;
if (g)
h ^= g >> 24;
h = (h << 4) + *string;
}
}
return h;
}
// #pragma mark - Assignment