Google OR-Tools: ortools/base/hash.h Source File

Go to the documentation of this file.

1

2

3

4

5

6

7

8

9

10

11

12

13

14#ifndef ORTOOLS_BASE_HASH_H_

15#define ORTOOLS_BASE_HASH_H_

16

17#include <array>

18#include <cstdint>

19#include <string>

20#include <utility>

21

22

23#if !defined(SWIG)

24

26uint64_t fasthash64(const void* buf, size_t len, uint64_t seed);

27

28

29static inline void mix(uint64_t& a, uint64_t& b, uint64_t& c) {

30 a -= b;

31 a -= c;

32 a ^= (c >> 43);

33 b -= c;

34 b -= a;

35 b ^= (a << 9);

36 c -= a;

37 c -= b;

38 c ^= (b >> 8);

39 a -= b;

40 a -= c;

41 a ^= (c >> 38);

42 b -= c;

43 b -= a;

44 b ^= (a << 23);

45 c -= a;

46 c -= b;

47 c ^= (b >> 5);

48 a -= b;

49 a -= c;

50 a ^= (c >> 35);

51 b -= c;

52 b -= a;

53 b ^= (a << 49);

54 c -= a;

55 c -= b;

56 c ^= (b >> 11);

57 a -= b;

58 a -= c;

59 a ^= (c >> 12);

60 b -= c;

61 b -= a;

62 b ^= (a << 18);

63 c -= a;

64 c -= b;

65 c ^= (b >> 22);

66}

67}

68

69#endif

70

72

73inline uint64_t Hash(uint64_t num, uint64_t c) {

74 uint64_t b = uint64_t{0xe08c1d668b756f82};

76 return c;

77}

78

79inline uint64_t Hash(uint64_t a, uint64_t b, uint64_t c) {

81 return c;

82}

83

84}

85

86#endif

uint64_t fasthash64(const void *buf, size_t len, uint64_t seed)

static void mix(uint64_t &a, uint64_t &b, uint64_t &c)

Definition hash.h:29

uint64_t Hash(uint64_t num, uint64_t c)

Definition hash.h:73