summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorTyge Løvset <[email protected]>2021-02-25 23:36:52 +0100
committerTyge Løvset <[email protected]>2021-02-25 23:36:52 +0100
commitfc1f2403e813e9850eecacd5580831f733417a12 (patch)
treefe178b2d3bbd5adb7c1dbb06889a356862658d02
parent849bcd8c1bd152d72f79417fa4b71d0b613a999b (diff)
downloadSTC-modified-fc1f2403e813e9850eecacd5580831f733417a12.tar.gz
STC-modified-fc1f2403e813e9850eecacd5580831f733417a12.zip
FIXED: Serious regression bug in cmap.h. SORRY!
-rw-r--r--stc/cmap.h6
1 files changed, 3 insertions, 3 deletions
diff --git a/stc/cmap.h b/stc/cmap.h
index 79d689b4..0252e14e 100644
--- a/stc/cmap.h
+++ b/stc/cmap.h
@@ -347,7 +347,7 @@ STC_INLINE uint64_t c_default_hash64(const void* data, size_t ignored)
#if !defined(STC_HEADER) || defined(STC_IMPLEMENTATION)
-#define chash_reduce(x, N) ((uint32_t) (((uint64_t) (x) * (N)) >> 32))
+#define chash_reduce32(x, N) ((uint32_t) (((uint64_t)(uint32_t)(x) * (N)) >> 32))
#define chash_entry_index(h, entryPtr) ((entryPtr) - (h).table)
enum {chash_HASH = 0x7f, chash_USED = 0x80};
@@ -384,7 +384,7 @@ enum {chash_HASH = 0x7f, chash_USED = 0x80};
C##_##X##_bucket_(const C##_##X* self, const C##_##X##_rawkey_t* rkeyptr) { \
uint32_t sx, hash = keyHashRaw(rkeyptr, sizeof(C##_##X##_rawkey_t)); \
size_t cap = self->bucket_count; \
- chash_bucket_t b = {chash_reduce(hash, cap), (hash & chash_HASH) | chash_USED}; \
+ chash_bucket_t b = {chash_reduce32(hash, cap), (hash & chash_HASH) | chash_USED}; \
uint8_t* hashx = self->_hashx; \
while ((sx = hashx[b.idx])) { \
if (sx == b.hx) { \
@@ -471,7 +471,7 @@ enum {chash_HASH = 0x7f, chash_USED = 0x80};
if (! hashx[j]) \
break; \
RawKey r = keyToRaw(KEY_REF_##C(slot + j)); \
- k = chash_reduce(keyHashRaw(&r, sizeof(RawKey)), cap); \
+ k = chash_reduce32(keyHashRaw(&r, sizeof(RawKey)), cap); \
if ((j < i) ^ (k <= i) ^ (k > j)) /* is k outside (i, j]? */ \
slot[i] = slot[j], hashx[i] = hashx[j], i = j; \
} \