mirror of
https://review.haiku-os.org/haiku
synced 2025-01-31 10:47:14 +01:00
67 lines
1.2 KiB
C++
67 lines
1.2 KiB
C++
/*
|
|
* Copyright 2004-2007, Ingo Weinhold <ingo_weinhold@gmx.de>. All rights reserved.
|
|
* Distributed under the terms of the MIT License.
|
|
*/
|
|
#ifndef HASH_STRING_H
|
|
#define HASH_STRING_H
|
|
|
|
#include <SupportDefs.h>
|
|
|
|
|
|
static inline uint32
|
|
string_hash(const char *_string)
|
|
{
|
|
const uint8* string = (const uint8*)_string;
|
|
if (string == NULL)
|
|
return 0;
|
|
|
|
uint32 h = 5381;
|
|
char c;
|
|
while ((c = *string++) != 0)
|
|
h = (h * 33) + c;
|
|
return h;
|
|
}
|
|
|
|
|
|
namespace BPrivate {
|
|
|
|
|
|
// HashString
|
|
class HashString {
|
|
public:
|
|
HashString();
|
|
HashString(const HashString &string);
|
|
HashString(const char *string, int32 length = -1);
|
|
~HashString();
|
|
|
|
bool SetTo(const char *string, int32 maxLength = -1);
|
|
void Unset();
|
|
|
|
void Truncate(int32 newLength);
|
|
|
|
const char *GetString() const;
|
|
int32 GetLength() const { return fLength; }
|
|
|
|
uint32 GetHashCode() const { return string_hash(GetString()); }
|
|
|
|
HashString &operator=(const HashString &string);
|
|
bool operator==(const HashString &string) const;
|
|
bool operator!=(const HashString &string) const { return !(*this == string); }
|
|
|
|
private:
|
|
bool _SetTo(const char *string, int32 length);
|
|
|
|
private:
|
|
int32 fLength;
|
|
char *fString;
|
|
};
|
|
|
|
|
|
} // namespace BPrivate
|
|
|
|
|
|
using BPrivate::HashString;
|
|
|
|
|
|
#endif // HASH_STRING_H
|