{
return false;
}
-
return(CompareTo(rhs) == 0);
}
int
String::GetHashCode(void) const
{
- int hash = 0;
+ if (__length == 0)
+ {
+ return 0;
+ }
if (__hash == 0)
{
+ const int DEFAULT_HASH_VALUE = 352654597;
+ const int HASH_MULTIPLIER = 1566083941;
+
+ int num = DEFAULT_HASH_VALUE;
+ int num2 = DEFAULT_HASH_VALUE;
wchar_t* pStr = __pValue;
- for (int i = 0; i < __length; ++i)
+ for (int i = __length; i >= 2 ; i -= 4)
{
- hash = (hash << 5) - hash + (int) *pStr++;
+ num = (((num << 5) + num) + (num >> 27)) ^ pStr[0];
+ num2 = (((num2 << 5) + num2) + (num2 >> 27)) ^ pStr[1];
+ pStr += 2;
}
- __hash = hash;
+ num = (((num << 5) + num) + (num >> 27)) ^ pStr[0];
+ __hash = num + (num2 * HASH_MULTIPLIER);
}
- else
- {
- hash = __hash;
- }
-
- return hash;
+ return __hash;
}
result