* Copyright 2013, Ingo Weinhold, ingo_weinhold@gmx.de.
* Distributed under the terms of the MIT License.
*/
#ifndef STRING_KEY_H
#define STRING_KEY_H
#include "String.h"
class StringKey {
public:
StringKey(const ::String& string)
:
fString(string.Data()),
fHash(string.Hash())
{
}
explicit StringKey(const char* string)
:
fString(string),
fHash(hash_hash_string(string))
{
}
const char* String() const
{
return fString;
}
uint32 Hash() const
{
return fHash;
}
inline int Compare(const ::StringKey& other) const
{
if (fHash == other.fHash) {
if (fString == other.fString)
return 0;
return strcmp(fString, other.fString);
}
return (fHash < other.fHash) ? -1 : 1;
}
bool operator==(const ::String& other) const
{
return Compare(StringKey(other)) == 0;
}
bool operator!=(const ::String& other) const
{
return !(*this == other);
}
private:
const char* fString;
uint32 fHash;
};
#endif