|  | /****************************************************************************** | 
|  |  | 
|  | @File         PVRTStringHash.cpp | 
|  |  | 
|  | @Title        String Hash | 
|  |  | 
|  | @Version | 
|  |  | 
|  | @Copyright    Copyright (c) Imagination Technologies Limited. | 
|  |  | 
|  | @Platform     All | 
|  |  | 
|  | @Description  Inherits from PVRTString to include PVRTHash functionality for | 
|  | quick string compares. | 
|  |  | 
|  | ******************************************************************************/ | 
|  | #include "PVRTGlobal.h" | 
|  | #include "PVRTStringHash.h" | 
|  |  | 
|  | /*!*********************************************************************** | 
|  | @Function			CPVRTString | 
|  | @Input				_Ptr	A string | 
|  | @Input				_Count	Length of _Ptr | 
|  | @Description		Constructor | 
|  | ************************************************************************/ | 
|  | CPVRTStringHash::CPVRTStringHash(const char* _Ptr, size_t _Count) : | 
|  | m_String(_Ptr, _Count) | 
|  | { | 
|  | m_Hash = CPVRTHash::MakeHash(m_String); | 
|  | } | 
|  |  | 
|  | /*!*********************************************************************** | 
|  | @Function			CPVRTString | 
|  | @Input				_Right	A string | 
|  | @Description		Constructor | 
|  | ************************************************************************/ | 
|  | CPVRTStringHash::CPVRTStringHash(const CPVRTString& _Right) : | 
|  | m_String(_Right) | 
|  | { | 
|  | m_Hash = CPVRTHash::MakeHash(m_String); | 
|  | } | 
|  |  | 
|  | /*!*********************************************************************** | 
|  | @Function			CPVRTString | 
|  | @Description		Constructor | 
|  | ************************************************************************/ | 
|  | CPVRTStringHash::CPVRTStringHash() | 
|  | { | 
|  | } | 
|  |  | 
|  | /*!*********************************************************************** | 
|  | @Function			append | 
|  | @Input				_Ptr	A string | 
|  | @Returns			Updated string | 
|  | @Description		Appends a string | 
|  | *************************************************************************/ | 
|  | CPVRTStringHash& CPVRTStringHash::append(const char* _Ptr) | 
|  | { | 
|  | m_String.append(_Ptr); | 
|  | m_Hash = CPVRTHash::MakeHash(m_String); | 
|  | return *this; | 
|  | } | 
|  |  | 
|  | /*!*********************************************************************** | 
|  | @Function			append | 
|  | @Input				_Str	A string | 
|  | @Returns			Updated string | 
|  | @Description		Appends a string | 
|  | *************************************************************************/ | 
|  | CPVRTStringHash& CPVRTStringHash::append(const CPVRTString& _Str) | 
|  | { | 
|  | m_String.append(_Str); | 
|  | m_Hash = CPVRTHash::MakeHash(m_String); | 
|  | return *this; | 
|  | } | 
|  |  | 
|  | /*!*********************************************************************** | 
|  | @Function			assign | 
|  | @Input				_Ptr A string | 
|  | @Returns			Updated string | 
|  | @Description		Assigns the string to the string _Ptr | 
|  | *************************************************************************/ | 
|  | CPVRTStringHash& CPVRTStringHash::assign(const char* _Ptr) | 
|  | { | 
|  | m_String.assign(_Ptr); | 
|  | m_Hash = CPVRTHash::MakeHash(m_String); | 
|  | return *this; | 
|  | } | 
|  |  | 
|  | /*!*********************************************************************** | 
|  | @Function			assign | 
|  | @Input				_Str A string | 
|  | @Returns			Updated string | 
|  | @Description		Assigns the string to the string _Str | 
|  | *************************************************************************/ | 
|  | CPVRTStringHash& CPVRTStringHash::assign(const CPVRTString& _Str) | 
|  | { | 
|  | m_String.assign(_Str); | 
|  | m_Hash = CPVRTHash::MakeHash(m_String); | 
|  | return *this; | 
|  | } | 
|  |  | 
|  | /*!*********************************************************************** | 
|  | @Function		== | 
|  | @Input			_Str 	A string to compare with | 
|  | @Returns		True if they match | 
|  | @Description	== Operator | 
|  | *************************************************************************/ | 
|  | bool CPVRTStringHash::operator==(const CPVRTStringHash& _Str) const | 
|  | { | 
|  | return (m_Hash == _Str.Hash()); | 
|  | } | 
|  |  | 
|  | /*!*********************************************************************** | 
|  | @Function		== | 
|  | @Input			Hash 	A hash to compare with | 
|  | @Returns		True if they match | 
|  | @Description	== Operator | 
|  | *************************************************************************/ | 
|  | bool CPVRTStringHash::operator==(const CPVRTHash& Hash) const | 
|  | { | 
|  | return (m_Hash == Hash); | 
|  | } | 
|  |  | 
|  | /*!*********************************************************************** | 
|  | @Function		== | 
|  | @Input			_Str 	A string to compare with | 
|  | @Returns		True if they match | 
|  | @Description	== Operator. This function performs a strcmp() | 
|  | as it's more efficient to strcmp than to hash the string | 
|  | for every comparison. | 
|  | *************************************************************************/ | 
|  | bool CPVRTStringHash::operator==(const char* _Str) const | 
|  | { | 
|  | return (m_String.compare(_Str) == 0); | 
|  | } | 
|  |  | 
|  | /*!*********************************************************************** | 
|  | @Function		== | 
|  | @Input			_Str 	A string to compare with | 
|  | @Returns		True if they match | 
|  | @Description	== Operator. This function performs a strcmp() | 
|  | as it's more efficient to strcmp than to hash the string | 
|  | for every comparison. | 
|  | *************************************************************************/ | 
|  | bool CPVRTStringHash::operator==(const CPVRTString& _Str) const | 
|  | { | 
|  | return (m_String.compare(_Str) == 0); | 
|  | } | 
|  |  | 
|  | /*!*********************************************************************** | 
|  | @Function			!= | 
|  | @Input				_Str 	A string to compare with | 
|  | @Returns			True if they don't match | 
|  | @Description		!= Operator | 
|  | *************************************************************************/ | 
|  | bool CPVRTStringHash::operator!=(const CPVRTStringHash& _Str) const | 
|  | { | 
|  | return (m_Hash != _Str.Hash()); | 
|  | } | 
|  |  | 
|  | /*!*********************************************************************** | 
|  | @Function		!= | 
|  | @Input			Hash 	A hash to compare with | 
|  | @Returns		True if they match | 
|  | @Description	!= Operator | 
|  | *************************************************************************/ | 
|  | bool CPVRTStringHash::operator!=(const CPVRTHash& Hash) const | 
|  | { | 
|  | return (m_Hash != Hash); | 
|  | } | 
|  |  | 
|  | /*!*********************************************************************** | 
|  | @Function			String | 
|  | @Returns			The original string | 
|  | @Description		Returns the original, base string. | 
|  | *************************************************************************/ | 
|  | const CPVRTString& CPVRTStringHash::String() const | 
|  | { | 
|  | return m_String; | 
|  | } | 
|  |  | 
|  | /*!*********************************************************************** | 
|  | @Function			Hash | 
|  | @Returns			The hash | 
|  | @Description		Returns the hash of the base string | 
|  | *************************************************************************/ | 
|  | const CPVRTHash& CPVRTStringHash::Hash() const | 
|  | { | 
|  | return m_Hash; | 
|  | } | 
|  |  | 
|  | /*!*************************************************************************** | 
|  | @Function		c_str | 
|  | @Return			The original string. | 
|  | @Description	Returns the base string as a const char*. | 
|  | *****************************************************************************/ | 
|  | const char* CPVRTStringHash::c_str() const | 
|  | { | 
|  | return m_String.c_str(); | 
|  | } | 
|  |  |