Fix --x-initial and --x-assign random stability (#2662) (#5958)

This commit is contained in:
Todd Strader
2025-05-16 13:54:51 -04:00
committed by GitHub
parent 73b3648262
commit 4581023805
35 changed files with 674 additions and 45 deletions
+43
View File
@@ -316,6 +316,49 @@ string VString::aOrAn(const char* word) {
}
}
// MurmurHash64A
uint64_t VString::hashMurmur(const string& str) VL_PURE {
const char* key = str.c_str();
const size_t len = str.size();
const uint64_t seed = 0;
const uint64_t m = 0xc6a4a7935bd1e995ULL;
const int r = 47;
uint64_t h = seed ^ (len * m);
const uint64_t* data = (const uint64_t*)key;
const uint64_t* end = data + (len / 8);
while (data != end) {
uint64_t k = *data++;
k *= m;
k ^= k >> r;
k *= m;
h ^= k;
h *= m;
}
const unsigned char* data2 = (const unsigned char*)data;
switch (len & 7) {
case 7: h ^= uint64_t(data2[6]) << 48; /* fallthrough */
case 6: h ^= uint64_t(data2[5]) << 40; /* fallthrough */
case 5: h ^= uint64_t(data2[4]) << 32; /* fallthrough */
case 4: h ^= uint64_t(data2[3]) << 24; /* fallthrough */
case 3: h ^= uint64_t(data2[2]) << 16; /* fallthrough */
case 2: h ^= uint64_t(data2[1]) << 8; /* fallthrough */
case 1: h ^= uint64_t(data2[0]); h *= m; /* fallthrough */
};
h ^= h >> r;
h *= m;
h ^= h >> r;
return h;
}
//######################################################################
// VHashSha256