Przeglądaj źródła

Rename Hash32/64 to fnv1a_32/64 and move into Hash.h

Daniele Bartolini 13 lat temu
rodzic
commit
ffa3fca0bf
2 zmienionych plików z 45 dodań i 75 usunięć
  1. 45 0
      src/core/strings/Hash.h
  2. 0 75
      src/core/strings/String.h

+ 45 - 0
src/core/strings/Hash.h

@@ -5,6 +5,12 @@ namespace crown
 namespace hash
 {
 
+// Constants
+const uint32_t FNV1A_OFFSET_BASIS_32		= 2166136261u;
+const uint64_t FNV1A_OFFSET_BASIS_64		= 14695981039346656037u;
+const uint32_t FNV1A_PRIME_32				= 16777619u;
+const uint64_t FNV1A_PRIME_64				= 1099511628211u;
+
 //-----------------------------------------------------------------------------
 // MurmurHash2, by Austin Appleby
 //
@@ -64,5 +70,44 @@ static uint32_t murmur2(const void* key, size_t len, uint32_t seed)
 	return h;
 }
 
+//-----------------------------------------------------------------------------
+// FNV-1a hash, 32 bit
+static uint32_t fnv1a_32(const char* str, size_t len)
+{
+	assert(str != NULL);
+	assert(len <= string::strlen(str));
+
+	// FNV-1a
+	uint32_t hash = FNV1A_OFFSET_BASIS_32;
+
+	for (size_t i = 0; i < len; i++)
+	{
+		hash ^= str[i];
+		hash *= FNV1A_PRIME_32;
+	}
+
+	return hash;
 }
+
+//-----------------------------------------------------------------------------
+// FNV-1a hash, 64 bit
+static uint64_t fnv1a_64(const char* str, size_t len)
+{
+	assert(str != NULL);
+	assert(len <= string::strlen(str));
+
+	// FNV-1a
+	uint64_t hash = FNV1A_OFFSET_BASIS_64;
+
+	for (size_t i = 0; i < len; i++)
+	{
+		hash ^= str[i];
+		hash *= FNV1A_PRIME_64;
+	}
+
+	return hash;
 }
+
+} // namespace hash
+} // namespace crown
+

+ 0 - 75
src/core/strings/String.h

@@ -38,11 +38,6 @@ namespace string
 
 static const char*		EMPTY = "";
 
-static uint32_t			Hash32(const char* str);
-static uint32_t			Hash32(const char* str, size_t len);
-static uint64_t			Hash64(const char* str);
-static uint64_t			Hash64(const char* str, size_t len);
-
 static bool				is_alpha(char c);
 static bool				is_digit(char c);
 static bool				is_upper(char c);
@@ -356,76 +351,6 @@ inline bool is_whitespace(char c)
 	return (c == ' ' || c == '\t' || c == '\n' || c == '\r');
 }
 
-//-----------------------------------------------------------------------------
-inline uint32_t Hash32(const char* str)
-{
-	assert(str != NULL);
-
-	// FNV-1a
-	uint32_t hash = 2166136261u;
-
-	for (size_t i = 0; str[i] != '\0'; i++)
-	{
-		hash ^= str[i];
-		hash *= 16777619u;
-	}
-
-	return hash;
-}
-
-//-----------------------------------------------------------------------------
-inline uint32_t Hash32(const char* str, size_t len)
-{
-	assert(str != NULL);
-	assert(len <= string::strlen(str));
-
-	// FNV-1a
-	uint32_t hash = 2166136261u;
-
-	for (size_t i = 0; i < len; i++)
-	{
-		hash ^= str[i];
-		hash *= 16777619u;
-	}
-
-	return hash;
-}
-
-//-----------------------------------------------------------------------------
-inline uint64_t Hash64(const char* str)
-{
-	assert(str != NULL);
-
-	// FNV-1a
-	uint64_t hash = 14695981039346656037u;
-
-	for (size_t i = 0; str[i] != '\0'; i++)
-	{
-		hash ^= str[i];
-		hash *= 1099511628211u;
-	}
-
-	return hash;
-}
-
-//-----------------------------------------------------------------------------
-inline uint64_t Hash64(const char* str, size_t len)
-{
-	assert(str != NULL);
-	assert(len <= string::strlen(str));
-
-	// FNV-1a
-	uint64_t hash = 14695981039346656037u;
-
-	for (size_t i = 0; i < len; i++)
-	{
-		hash ^= str[i];
-		hash *= 1099511628211u;
-	}
-
-	return hash;
-}
-
 //-----------------------------------------------------------------------------
 inline size_t strlen(const char* str)
 {