summaryrefslogtreecommitdiff
path: root/loader/server/fnv.hpp
diff options
context:
space:
mode:
authorboris <wzn@moneybot.cc>2018-12-12 12:30:44 +1300
committerboris <wzn@moneybot.cc>2018-12-12 12:30:44 +1300
commitec4ad61acbe9e67c5e803e0549841dc5ef5cef2a (patch)
treef30480f8c0e45b0cd2e0c5cd2f2dbccd54ec70ae /loader/server/fnv.hpp
parenta25b6f6b11a3ae44d0c3b19ba8081a3d9eb1ac5f (diff)
yas
Diffstat (limited to 'loader/server/fnv.hpp')
-rw-r--r--loader/server/fnv.hpp64
1 files changed, 0 insertions, 64 deletions
diff --git a/loader/server/fnv.hpp b/loader/server/fnv.hpp
deleted file mode 100644
index 08a478b..0000000
--- a/loader/server/fnv.hpp
+++ /dev/null
@@ -1,64 +0,0 @@
-#pragma once
-
-#pragma warning( disable : 4307 ) // '*': integral constant overflow
-#pragma warning( disable : 4244 ) // possible loss of data
-
-#include <cstdint>
-#include <string>
-
-using hash_t = unsigned int;
-
-// used for compile-time FNV-1a 32bit hashes.
-#define fnv( str ) \
- [&]() { \
- constexpr hash_t out = hash::fnv1a( str ); \
- \
- return out; \
- }()
-
-// used for compile-time FNV-1a 32bit hashes when above macro cant be used for constexpr variables.
-#define fnv_const( str ) Hash::fnv1a_32( str )
-
-namespace hash // FNV-1a ( Fowler-Noll-Vo hash ).
-{
- // FNV-1a constants.
- enum : hash_t {
- FNV1A_PRIME = 0x1000193,
- FNV1A_BASIS = 0x811C9DC5
- };
-
- // compile-time strlen.
- __forceinline constexpr size_t ct_strlen( const char *str ) {
- size_t out = 1;
-
- for( ; str[ out ] != '\0'; ++out );
-
- return out;
- }
-
- // hash data.
- __forceinline constexpr hash_t fnv1a( const uint8_t *data, const size_t len ) {
- hash_t out = FNV1A_BASIS;
-
- for( size_t i = 0; i < len; ++i )
- out = ( out ^ data[ i ] ) * FNV1A_PRIME;
-
- return out;
- }
-
- // hash c-style string.
- __forceinline constexpr hash_t fnv1a( const char *str ) {
- hash_t out = FNV1A_BASIS;
- size_t len = ct_strlen( str );
-
- for( size_t i = 0; i < len; ++i )
- out = ( out ^ str[ i ] ) * FNV1A_PRIME;
-
- return out;
- }
-
- // hash C++-style string ( runtime only ).
- __forceinline hash_t fnv1a( const std::string &str ) {
- return fnv1a( ( uint8_t* )str.c_str( ), str.length( ) );
- }
-} \ No newline at end of file