|
@@ -0,0 +1,60 @@
|
|
|
+#include "utils/HashCode.h"
|
|
|
+
|
|
|
+#include <string.h>
|
|
|
+
|
|
|
+template<typename T>
|
|
|
+u32 hashNumber(T t) {
|
|
|
+ constexpr u32 L = sizeof(T) / 4 + (sizeof(T) % 4 != 0);
|
|
|
+ u32 parts[L];
|
|
|
+ memset(parts, 0, sizeof(parts));
|
|
|
+ memcpy(parts, &t, sizeof(T));
|
|
|
+ u32 hash = 0;
|
|
|
+ for(u32 i = 0; i < L; i++) {
|
|
|
+ hash ^= parts[i];
|
|
|
+ }
|
|
|
+ return hash;
|
|
|
+}
|
|
|
+
|
|
|
+u32 Core::hashCode(char key) {
|
|
|
+ return hashNumber(key);
|
|
|
+}
|
|
|
+
|
|
|
+u32 Core::hashCode(signed char key) {
|
|
|
+ return hashNumber(key);
|
|
|
+}
|
|
|
+
|
|
|
+u32 Core::hashCode(signed short key) {
|
|
|
+ return hashNumber(key);
|
|
|
+}
|
|
|
+
|
|
|
+u32 Core::hashCode(signed int key) {
|
|
|
+ return hashNumber(key);
|
|
|
+}
|
|
|
+
|
|
|
+u32 Core::hashCode(signed long key) {
|
|
|
+ return hashNumber(key);
|
|
|
+}
|
|
|
+
|
|
|
+u32 Core::hashCode(signed long long key) {
|
|
|
+ return hashNumber(key);
|
|
|
+}
|
|
|
+
|
|
|
+u32 Core::hashCode(unsigned char key) {
|
|
|
+ return hashNumber(key);
|
|
|
+}
|
|
|
+
|
|
|
+u32 Core::hashCode(unsigned short key) {
|
|
|
+ return hashNumber(key);
|
|
|
+}
|
|
|
+
|
|
|
+u32 Core::hashCode(unsigned int key) {
|
|
|
+ return hashNumber(key);
|
|
|
+}
|
|
|
+
|
|
|
+u32 Core::hashCode(unsigned long key) {
|
|
|
+ return hashNumber(key);
|
|
|
+}
|
|
|
+
|
|
|
+u32 Core::hashCode(unsigned long long key) {
|
|
|
+ return hashNumber(key);
|
|
|
+}
|