xref: /haiku/src/add-ons/kernel/file_systems/packagefs/util/StringKey.h (revision 83b1a68c52ba3e0e8796282759f694b7fdddf06d)
1 /*
2  * Copyright 2013, Ingo Weinhold, ingo_weinhold@gmx.de.
3  * Distributed under the terms of the MIT License.
4  */
5 #ifndef STRING_KEY_H
6 #define STRING_KEY_H
7 
8 
9 #include "String.h"
10 
11 
12 class StringKey {
13 public:
14 	StringKey(const ::String& string)
15 		:
16 		fString(string.Data()),
17 		fHash(string.Hash())
18 	{
19 	}
20 
21 	explicit StringKey(const char* string)
22 		:
23 		fString(string),
24 		fHash(hash_hash_string(string))
25 	{
26 	}
27 
28 	const char* String() const
29 	{
30 		return fString;
31 	}
32 
33 	uint32 Hash() const
34 	{
35 		return fHash;
36 	}
37 
38 	bool operator==(const ::String& other) const
39 	{
40 		if (fHash != other.Hash())
41 			return false;
42 		return fString == other.Data() || strcmp(fString, other.Data()) == 0;
43 	}
44 
45 	bool operator!=(const ::String& other) const
46 	{
47 		return !(*this == other);
48 	}
49 
50 private:
51 	const char*	fString;
52 	uint32		fHash;
53 };
54 
55 
56 #endif	// STRING_KEY_H
57