X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;ds=sidebyside;f=source%2Fcore%2Fhash.h;fp=source%2Fcore%2Fhash.h;h=1eebcce5342b75064034b7f68e5b2c82909b7fe2;hb=cf20196055ed5074c448a16144c47b7e8a32c6a8;hp=0000000000000000000000000000000000000000;hpb=928694ff233bd4383f30b05bf6d2d37562b77a9a;p=libs%2Fcore.git diff --git a/source/core/hash.h b/source/core/hash.h new file mode 100644 index 0000000..1eebcce --- /dev/null +++ b/source/core/hash.h @@ -0,0 +1,41 @@ +#ifndef MSP_CORE_HASH_H_ +#define MSP_CORE_HASH_H_ + +#include + +namespace Msp { + +#ifdef WIN32 +typedef __uint64 HashValue64; +#else +typedef unsigned long long HashValue64; +#endif + +/** +Computes a 32-bit Fowler-Noll-Vo (FNV-1a) hash. The number of bits can be +limited to less than 32, in which case XOR-folding is used to reduce the hash +size. +*/ +unsigned hash32(const void *, unsigned, unsigned = 32); + +/** +Convenience function to compute a 32-bit hash of a string. +*/ +inline unsigned hash32(const std::string &s, unsigned b = 32) +{ return hash32(s.data(), s.size(), b); } + +/** +Computes a 64-bit Fowler-Noll-Vo (FNV-1a) hash. Note that even if bits is +limited to 32 or less, this does not produce the same result as hash32. +*/ +HashValue64 hash64(const void *, unsigned, unsigned = 64); + +/** +Convenience function to compute a 64-bit hash of a string. +*/ +inline HashValue64 hash64(const std::string &s, unsigned b = 64) +{ return hash64(s.data(), s.size(), b); } + +} // namespace Msp + +#endif