From 13384f8d3b370ee394a2e4678bb2b49cd8e0e98f Mon Sep 17 00:00:00 2001 From: jmalkin Date: Thu, 16 May 2024 18:04:49 +0000 Subject: [PATCH] deploy: 76edd74f5db286b672c170a8ded4ce39b3a8800f --- docs/master/MurmurHash3_8h_source.html | 151 ++++++++++++------------- 1 file changed, 75 insertions(+), 76 deletions(-) diff --git a/docs/master/MurmurHash3_8h_source.html b/docs/master/MurmurHash3_8h_source.html index b562983b..47f62f9e 100644 --- a/docs/master/MurmurHash3_8h_source.html +++ b/docs/master/MurmurHash3_8h_source.html @@ -142,10 +142,10 @@
71 // Block read - if your platform needs to do endian-swapping or can only
72 // handle aligned reads, do the conversion here
73 
-
74 MURMUR3_FORCE_INLINE uint64_t getblock64 ( const uint64_t * p, size_t i )
+
74 MURMUR3_FORCE_INLINE uint64_t getblock64 ( const uint8_t * p, size_t i )
75 {
76  uint64_t res;
-
77  memcpy(&res, p + i, sizeof(res));
+
77  memcpy(&res, p + i * sizeof(uint64_t), sizeof(res));
78  return res;
79 }
80 
@@ -175,82 +175,81 @@
104 
105  // Number of full 128-bit blocks of 16 bytes.
106  // Possible exclusion of a remainder of up to 15 bytes.
-
107  const size_t nblocks = lenBytes >> 4; // bytes / 16
+
107  const size_t nblocks = lenBytes >> 4; // bytes / 16
108 
109  // Process the 128-bit blocks (the body) into the hash
-
110  const uint64_t* blocks = (const uint64_t*)(data);
-
111  for (size_t i = 0; i < nblocks; ++i) { // 16 bytes per block
-
112  uint64_t k1 = getblock64(blocks, i * 2 + 0);
-
113  uint64_t k2 = getblock64(blocks, i * 2 + 1);
-
114 
-
115  k1 *= c1; k1 = MURMUR3_ROTL64(k1,31); k1 *= c2; out.h1 ^= k1;
-
116  out.h1 = MURMUR3_ROTL64(out.h1,27);
-
117  out.h1 += out.h2;
-
118  out.h1 = out.h1*5+0x52dce729;
-
119 
-
120  k2 *= c2; k2 = MURMUR3_ROTL64(k2,33); k2 *= c1; out.h2 ^= k2;
-
121  out.h2 = MURMUR3_ROTL64(out.h2,31);
-
122  out.h2 += out.h1;
-
123  out.h2 = out.h2*5+0x38495ab5;
-
124  }
-
125 
-
126  // tail
-
127  const uint8_t * tail = (const uint8_t*)(data + (nblocks << 4));
-
128 
-
129  uint64_t k1 = 0;
-
130  uint64_t k2 = 0;
-
131 
-
132  switch(lenBytes & 15)
-
133  {
-
134  case 15: k2 ^= ((uint64_t)tail[14]) << 48; // falls through
-
135  case 14: k2 ^= ((uint64_t)tail[13]) << 40; // falls through
-
136  case 13: k2 ^= ((uint64_t)tail[12]) << 32; // falls through
-
137  case 12: k2 ^= ((uint64_t)tail[11]) << 24; // falls through
-
138  case 11: k2 ^= ((uint64_t)tail[10]) << 16; // falls through
-
139  case 10: k2 ^= ((uint64_t)tail[ 9]) << 8; // falls through
-
140  case 9: k2 ^= ((uint64_t)tail[ 8]) << 0;
-
141  k2 *= c2; k2 = MURMUR3_ROTL64(k2,33); k2 *= c1; out.h2 ^= k2;
-
142  // falls through
-
143  case 8: k1 ^= ((uint64_t)tail[ 7]) << 56; // falls through
-
144  case 7: k1 ^= ((uint64_t)tail[ 6]) << 48; // falls through
-
145  case 6: k1 ^= ((uint64_t)tail[ 5]) << 40; // falls through
-
146  case 5: k1 ^= ((uint64_t)tail[ 4]) << 32; // falls through
-
147  case 4: k1 ^= ((uint64_t)tail[ 3]) << 24; // falls through
-
148  case 3: k1 ^= ((uint64_t)tail[ 2]) << 16; // falls through
-
149  case 2: k1 ^= ((uint64_t)tail[ 1]) << 8; // falls through
-
150  case 1: k1 ^= ((uint64_t)tail[ 0]) << 0;
-
151  k1 *= c1; k1 = MURMUR3_ROTL64(k1,31); k1 *= c2; out.h1 ^= k1;
-
152  };
-
153 
-
154  //----------
-
155  // finalization
-
156 
-
157  out.h1 ^= lenBytes;
-
158  out.h2 ^= lenBytes;
-
159 
-
160  out.h1 += out.h2;
-
161  out.h2 += out.h1;
-
162 
-
163  out.h1 = fmix64(out.h1);
-
164  out.h2 = fmix64(out.h2);
-
165 
-
166  out.h1 += out.h2;
-
167  out.h2 += out.h1;
-
168 }
-
169 
-
170 //-----------------------------------------------------------------------------
-
171 
-
172 MURMUR3_FORCE_INLINE uint16_t compute_seed_hash(uint64_t seed) {
-
173  HashState hashes;
-
174  MurmurHash3_x64_128(&seed, sizeof(seed), 0, hashes);
-
175  return static_cast<uint16_t>(hashes.h1 & 0xffff);
-
176 }
-
177 
-
178 #undef MURMUR3_FORCE_INLINE
-
179 #undef MURMUR3_ROTL64
-
180 #undef MURMUR3_BIG_CONSTANT
-
181 
-
182 #endif // _MURMURHASH3_H_
+
110  for (size_t i = 0; i < nblocks; ++i) { // 16 bytes per block
+
111  uint64_t k1 = getblock64(data, i * 2 + 0);
+
112  uint64_t k2 = getblock64(data, i * 2 + 1);
+
113 
+
114  k1 *= c1; k1 = MURMUR3_ROTL64(k1,31); k1 *= c2; out.h1 ^= k1;
+
115  out.h1 = MURMUR3_ROTL64(out.h1,27);
+
116  out.h1 += out.h2;
+
117  out.h1 = out.h1*5+0x52dce729;
+
118 
+
119  k2 *= c2; k2 = MURMUR3_ROTL64(k2,33); k2 *= c1; out.h2 ^= k2;
+
120  out.h2 = MURMUR3_ROTL64(out.h2,31);
+
121  out.h2 += out.h1;
+
122  out.h2 = out.h2*5+0x38495ab5;
+
123  }
+
124 
+
125  // tail
+
126  const uint8_t * tail = (const uint8_t*)(data + (nblocks << 4));
+
127 
+
128  uint64_t k1 = 0;
+
129  uint64_t k2 = 0;
+
130 
+
131  switch(lenBytes & 15)
+
132  {
+
133  case 15: k2 ^= ((uint64_t)tail[14]) << 48; // falls through
+
134  case 14: k2 ^= ((uint64_t)tail[13]) << 40; // falls through
+
135  case 13: k2 ^= ((uint64_t)tail[12]) << 32; // falls through
+
136  case 12: k2 ^= ((uint64_t)tail[11]) << 24; // falls through
+
137  case 11: k2 ^= ((uint64_t)tail[10]) << 16; // falls through
+
138  case 10: k2 ^= ((uint64_t)tail[ 9]) << 8; // falls through
+
139  case 9: k2 ^= ((uint64_t)tail[ 8]) << 0;
+
140  k2 *= c2; k2 = MURMUR3_ROTL64(k2,33); k2 *= c1; out.h2 ^= k2;
+
141  // falls through
+
142  case 8: k1 ^= ((uint64_t)tail[ 7]) << 56; // falls through
+
143  case 7: k1 ^= ((uint64_t)tail[ 6]) << 48; // falls through
+
144  case 6: k1 ^= ((uint64_t)tail[ 5]) << 40; // falls through
+
145  case 5: k1 ^= ((uint64_t)tail[ 4]) << 32; // falls through
+
146  case 4: k1 ^= ((uint64_t)tail[ 3]) << 24; // falls through
+
147  case 3: k1 ^= ((uint64_t)tail[ 2]) << 16; // falls through
+
148  case 2: k1 ^= ((uint64_t)tail[ 1]) << 8; // falls through
+
149  case 1: k1 ^= ((uint64_t)tail[ 0]) << 0;
+
150  k1 *= c1; k1 = MURMUR3_ROTL64(k1,31); k1 *= c2; out.h1 ^= k1;
+
151  };
+
152 
+
153  //----------
+
154  // finalization
+
155 
+
156  out.h1 ^= lenBytes;
+
157  out.h2 ^= lenBytes;
+
158 
+
159  out.h1 += out.h2;
+
160  out.h2 += out.h1;
+
161 
+
162  out.h1 = fmix64(out.h1);
+
163  out.h2 = fmix64(out.h2);
+
164 
+
165  out.h1 += out.h2;
+
166  out.h2 += out.h1;
+
167 }
+
168 
+
169 //-----------------------------------------------------------------------------
+
170 
+
171 MURMUR3_FORCE_INLINE uint16_t compute_seed_hash(uint64_t seed) {
+
172  HashState hashes;
+
173  MurmurHash3_x64_128(&seed, sizeof(seed), 0, hashes);
+
174  return static_cast<uint16_t>(hashes.h1 & 0xffff);
+
175 }
+
176 
+
177 #undef MURMUR3_FORCE_INLINE
+
178 #undef MURMUR3_ROTL64
+
179 #undef MURMUR3_BIG_CONSTANT
+
180 
+
181 #endif // _MURMURHASH3_H_