1 /******************************************************************************
2 
3  @File         PVRTStringHash.cpp
4 
5  @Title        String Hash
6 
7  @Version
8 
9  @Copyright    Copyright (c) Imagination Technologies Limited.
10 
11  @Platform     All
12 
13  @Description  Inherits from PVRTString to include PVRTHash functionality for
14                quick string compares.
15 
16 ******************************************************************************/
17 #include "PVRTGlobal.h"
18 #include "PVRTStringHash.h"
19 
20 /*!***********************************************************************
21 @Function			CPVRTString
22 @Input				_Ptr	A string
23 @Input				_Count	Length of _Ptr
24 @Description		Constructor
25 ************************************************************************/
26 CPVRTStringHash::CPVRTStringHash(const char* _Ptr, size_t _Count) :
27 	m_String(_Ptr, _Count)
28 {
29 	m_Hash = CPVRTHash::MakeHash(m_String);
30 }
31 
32 /*!***********************************************************************
33 @Function			CPVRTString
34 @Input				_Right	A string
35 @Description		Constructor
36 ************************************************************************/
37 CPVRTStringHash::CPVRTStringHash(const CPVRTString& _Right) :
38 	m_String(_Right)
39 {
40 	m_Hash = CPVRTHash::MakeHash(m_String);
41 }
42 
43 /*!***********************************************************************
44 @Function			CPVRTString
45 @Description		Constructor
46 ************************************************************************/
47 CPVRTStringHash::CPVRTStringHash()
48 {
49 }
50 
51 /*!***********************************************************************
52 @Function			append
53 @Input				_Ptr	A string
54 @Returns			Updated string
55 @Description		Appends a string
56 *************************************************************************/
57 CPVRTStringHash& CPVRTStringHash::append(const char* _Ptr)
58 {
59 	m_String.append(_Ptr);
60 	m_Hash = CPVRTHash::MakeHash(m_String);
61 	return *this;
62 }
63 
64 /*!***********************************************************************
65 @Function			append
66 @Input				_Str	A string
67 @Returns			Updated string
68 @Description		Appends a string
69 *************************************************************************/
70 CPVRTStringHash& CPVRTStringHash::append(const CPVRTString& _Str)
71 {
72 	m_String.append(_Str);
73 	m_Hash = CPVRTHash::MakeHash(m_String);
74 	return *this;
75 }
76 
77 /*!***********************************************************************
78 @Function			assign
79 @Input				_Ptr A string
80 @Returns			Updated string
81 @Description		Assigns the string to the string _Ptr
82 *************************************************************************/
83 CPVRTStringHash& CPVRTStringHash::assign(const char* _Ptr)
84 {
85 	m_String.assign(_Ptr);
86 	m_Hash = CPVRTHash::MakeHash(m_String);
87 	return *this;
88 }
89 
90 /*!***********************************************************************
91 @Function			assign
92 @Input				_Str A string
93 @Returns			Updated string
94 @Description		Assigns the string to the string _Str
95 *************************************************************************/
96 CPVRTStringHash& CPVRTStringHash::assign(const CPVRTString& _Str)
97 {
98 	m_String.assign(_Str);
99 	m_Hash = CPVRTHash::MakeHash(m_String);
100 	return *this;
101 }
102 
103 /*!***********************************************************************
104 @Function		==
105 @Input			_Str 	A string to compare with
106 @Returns		True if they match
107 @Description	== Operator
108 *************************************************************************/
109 bool CPVRTStringHash::operator==(const CPVRTStringHash& _Str) const
110 {
111 	return (m_Hash == _Str.Hash());
112 }
113 
114 /*!***********************************************************************
115 @Function		==
116 @Input			Hash 	A hash to compare with
117 @Returns		True if they match
118 @Description	== Operator
119 *************************************************************************/
120 bool CPVRTStringHash::operator==(const CPVRTHash& Hash) const
121 {
122 	return (m_Hash == Hash);
123 }
124 
125 /*!***********************************************************************
126 @Function		==
127 @Input			_Str 	A string to compare with
128 @Returns		True if they match
129 @Description	== Operator. This function performs a strcmp()
130 				as it's more efficient to strcmp than to hash the string
131 				for every comparison.
132 *************************************************************************/
133 bool CPVRTStringHash::operator==(const char* _Str) const
134 {
135 	return (m_String.compare(_Str) == 0);
136 }
137 
138 /*!***********************************************************************
139 @Function		==
140 @Input			_Str 	A string to compare with
141 @Returns		True if they match
142 @Description	== Operator. This function performs a strcmp()
143 				as it's more efficient to strcmp than to hash the string
144 				for every comparison.
145 *************************************************************************/
146 bool CPVRTStringHash::operator==(const CPVRTString& _Str) const
147 {
148 	return (m_String.compare(_Str) == 0);
149 }
150 
151 /*!***********************************************************************
152 @Function			!=
153 @Input				_Str 	A string to compare with
154 @Returns			True if they don't match
155 @Description		!= Operator
156 *************************************************************************/
157 bool CPVRTStringHash::operator!=(const CPVRTStringHash& _Str) const
158 {
159 	return (m_Hash != _Str.Hash());
160 }
161 
162 /*!***********************************************************************
163 @Function		!=
164 @Input			Hash 	A hash to compare with
165 @Returns		True if they match
166 @Description	!= Operator
167 *************************************************************************/
168 bool CPVRTStringHash::operator!=(const CPVRTHash& Hash) const
169 {
170 	return (m_Hash != Hash);
171 }
172 
173 /*!***********************************************************************
174 @Function			String
175 @Returns			The original string
176 @Description		Returns the original, base string.
177 *************************************************************************/
178 const CPVRTString& CPVRTStringHash::String() const
179 {
180 	return m_String;
181 }
182 
183 /*!***********************************************************************
184 @Function			Hash
185 @Returns			The hash
186 @Description		Returns the hash of the base string
187 *************************************************************************/
188 const CPVRTHash& CPVRTStringHash::Hash() const
189 {
190 	return m_Hash;
191 }
192 
193 /*!***************************************************************************
194 @Function		c_str
195 @Return			The original string.
196 @Description	Returns the base string as a const char*.
197 *****************************************************************************/
198 const char* CPVRTStringHash::c_str() const
199 {
200 	return m_String.c_str();
201 }
202 
203