220 inline size_t add_hash(
const void * key,
const size_t len)
noexcept
222 const auto *p =
static_cast<const unsigned char *
>(key);
225 for (
size_t i = 0; i < len; i++)
241 inline size_t xor_hash(
const void * key,
const size_t len)
noexcept
243 const auto *p =
static_cast<const unsigned char *
>(key);
246 for (
size_t i = 0; i < len; i++)
268 inline size_t rot_hash(
const void * key,
const size_t len)
noexcept
270 const auto *p =
static_cast<const unsigned char *
>(key);
273 for (
size_t i = 0; i < len; i++)
274 h = (
h << 4) ^(
h >> 28) ^ p[i];
308 inline size_t djb_hash(
const void * key,
const size_t len)
noexcept
310 const auto *p =
static_cast<const unsigned char *
>(key);
313 for (
size_t i = 0; i < len; i++)
333 inline size_t sax_hash(
const void * key,
const size_t len)
noexcept
335 const auto *p =
static_cast<const unsigned char *
>(key);
338 for (
size_t i = 0; i < len; i++)
339 h ^= (
h << 5) +(
h >> 2) + p[i];
371 inline size_t fnv_hash(
const void * key,
const size_t len)
noexcept
373 const auto *p =
static_cast<const unsigned char *
>(key);
374 size_t h = 2166136261;
376 for (
size_t i = 0; i < len; i++)
377 h = (
h * 16777619) ^ p[i];
404 inline size_t oat_hash(
const void * key,
const size_t len)
noexcept
406 const auto *p =
static_cast<const unsigned char *
>(key);
409 for (
size_t i = 0; i < len; i++)
423 extern size_t jsw_hash(
const void * key,
size_t len);
439 inline size_t elf_hash(
const void * key,
const size_t len)
noexcept
441 const auto *p =
static_cast<const unsigned char *
>(key);
444 for (
size_t i = 0; i < len; i++)
447 size_t g =
h & 0xf0000000L;
459#define hashsize(n)(1U << (n))
460#define hashmask(n)(hashsize(n) - 1)
462 inline void mix(
size_t & a,
size_t & b,
size_t & c)
noexcept
464 a -= b; a -= c; a ^=(c >> 13);
465 b -= c; b -= a; b ^=(a << 8);
466 c -= a; c -= b; c ^=(b >> 13);
467 a -= b; a -= c; a ^=(c >> 12);
468 b -= c; b -= a; b ^=(a << 16);
469 c -= a; c -= b; c ^=(b >> 5);
470 a -= b; a -= c; a ^=(c >> 3);
471 b -= c; b -= a; b ^=(a << 10);
472 c -= a; c -= b; c ^=(b >> 15);
488 inline size_t jen_hash(
const void * key,
const size_t length,
491 const auto *
k =
static_cast<const unsigned char *
>(key);
496 size_t a = b = 0x9e3779b9;
500 a += (
k[0] +(
static_cast<size_t>(
k[1]) << 8) + (
static_cast<size_t>(
k[2]) << 16) +
501 (
static_cast<size_t>(
k[3]) << 24));
502 b += (
k[4] +(
static_cast<size_t>(
k[5]) << 8) + (
static_cast<size_t>(
k[6]) << 16) +
503 (
static_cast<size_t>(
k[7]) << 24));
504 c += (
k[8] +(
static_cast<size_t>(
k[9]) << 8) + (
static_cast<size_t>(
k[10]) << 16) +
505 (
static_cast<size_t>(
k[11]) << 24));
517 case 11: c += (
static_cast<size_t>(
k[10]) << 24); [[
fallthrough]];
518 case 10: c += (
static_cast<size_t>(
k[9]) << 16); [[
fallthrough]];
519 case 9 : c += (
static_cast<size_t>(
k[8]) << 8); [[
fallthrough]];
521 case 8 : b += (
static_cast<size_t>(
k[7]) << 24); [[
fallthrough]];
522 case 7 : b += (
static_cast<size_t>(
k[6]) << 16); [[
fallthrough]];
523 case 6 : b += (
static_cast<size_t>(
k[5]) << 8); [[
fallthrough]];
525 case 4 : a += (
static_cast<size_t>(
k[3]) << 24); [[
fallthrough]];
526 case 3 : a += (
static_cast<size_t>(
k[2]) << 16); [[
fallthrough]];
527 case 2 : a += (
static_cast<size_t>(
k[1]) << 8); [[
fallthrough]];
528 case 1 : a +=
k[0];
break;
562 template <
typename Key>
inline
580 inline size_t murmur3hash(
const char * key,
const unsigned long seed)
582 const size_t len =
strlen(key);
598 size_t murmur3hash(
const std::string & key,
const unsigned long seed)
623#if (defined(__GNUC__) && defined(__i386__)) || defined(__WATCOMC__) \
624 || defined(_MSC_VER) || defined (__BORLANDC__) || defined (__TURBOC__)
625#define get16bits(d) (*((const uint16_t *) (d)))
628#if !defined (get16bits)
629#define get16bits(d) ((((uint32_t)(((const uint8_t *)(d))[1])) << 8) \
630 +(uint32_t)(((const uint8_t *)(d))[0]) )
640 const auto * data =
static_cast<const unsigned char *
>(key);
643 if (len <= 0 || data ==
nullptr)
646 const int rem = len & 3;
650 for (;len > 0; --len)
665 hash ^=
static_cast<signed char>(data[
sizeof(
uint16_t)]) << 18;
674 hash +=
static_cast<signed char>(*data);
693 template <
typename Key>
inline
699 template <
typename Key>
inline
705 template <
typename Key>
711 template <
typename Key>
717 template <
typename Key>
723 template <
typename Key>
729 template <
typename Key>
737 template <
typename Key>
743 template <
typename Key>
749 template <
typename Key>
755 template <
typename Key>
763 auto p =
reinterpret_cast<const unsigned char *
>(key);
774 auto p =
reinterpret_cast<const unsigned char *
>(key);
785 auto p =
reinterpret_cast<const unsigned char *
>(key);
789 h = (
h << 4) ^(
h >> 28) ^ *p++;
796 auto p =
reinterpret_cast<const unsigned char *
>(key);
807 auto p =
reinterpret_cast<const unsigned char *
>(key);
811 h ^= (
h << 5) +(
h >> 2) + *p++;
818 auto p =
reinterpret_cast<const unsigned char *
>(key);
819 size_t h = 2166136261;
822 h = (
h * 16777619) ^ *p++;
829 auto p =
reinterpret_cast<const unsigned char *
>(key);
846 extern size_t jsw_hash(
const char * key);
850 auto p =
reinterpret_cast<const unsigned char *
>(key);
856 size_t g =
h & 0xf0000000L;
873 inline size_t add_hash(
const std::string & key)
noexcept
878 inline size_t xor_hash(
const std::string & key)
noexcept
883 inline size_t rot_hash(
const std::string & key)
noexcept
888 inline size_t djb_hash(
const std::string & key)
noexcept
893 inline size_t sax_hash(
const std::string & key)
noexcept
898 inline size_t fnv_hash(
const std::string & key)
noexcept
903 inline size_t oat_hash(
const std::string & key)
noexcept
915 inline size_t elf_hash(
const std::string & key)
noexcept
930 template <
typename Key>
inline
936 template <
typename Key>
inline
942 template <
typename Key>
inline
948 template<
typename Key,
typename Data,
typename Fct>
954 template <
typename K1,
typename K2>
inline
960 template <
typename K1,
typename K2>
inline
Main namespace for Aleph-w library functions.
size_t map_hash_fct(Fct fct, const std::pair< Key, Data > &p) noexcept
size_t sax_hash(const void *key, const size_t len) noexcept
Shift-Add-XOR hash.
void MurmurHash3_x86_32(const void *key, int len, uint32_t seed, void *out)
void mix(size_t &a, size_t &b, size_t &c) noexcept
size_t snd_hash_fct(const Key &key) noexcept
void MurmurHash3_x64_128(const void *key, const int len, const uint32_t seed, void *out)
size_t add_hash(const void *key, const size_t len) noexcept
Additive hash.
size_t pair_dft_hash_fct(const std::pair< K1, K2 > &p) noexcept
size_t jsw_hash(const void *key, size_t len)
JSW hash (Julienne Walker)
size_t murmur3hash(const Key &key, unsigned long seed)
size_t djb_hash(const void *key, const size_t len) noexcept
Modified Bernstein hash.
size_t SuperFastHash(const void *key, size_t len) noexcept
Paul Hsieh super fast hash function.
size_t jen_hash(const void *key, const size_t length, const unsigned initval=Default_Hash_Seed) noexcept
Jenkins hash.
size_t dft_hash_fct(const Key &key) noexcept
size_t pair_snd_hash_fct(const std::pair< K1, K2 > &p) noexcept
void MurmurHash3_x86_128(const void *key, const int len, uint32_t seed, void *out)
const unsigned Default_Hash_Seed
Hash functions (implementaciones concretas).
size_t xor_hash(const void *key, const size_t len) noexcept
XOR hash.
size_t fnv_hash(const void *key, const size_t len) noexcept
Fowler-Noll-Vo (FNV-1) hash function.
size_t rot_hash(const void *key, const size_t len) noexcept
Rotating hash.
size_t elf_hash(const void *key, const size_t len) noexcept
ELF hash.
size_t oat_hash(const void *key, const size_t len) noexcept
One-at-a-Time hash by Bob Jenkins.
DynList< T > maps(const C &c, Op op)
Classic map operation.
Prime number utilities for hash tables and mathematical operations.