summaryrefslogtreecommitdiffhomepage
path: root/include/stc
diff options
context:
space:
mode:
authorTyge Løvset <[email protected]>2022-05-11 19:15:20 +0200
committerTyge Løvset <[email protected]>2022-05-11 19:15:20 +0200
commit187ee66881ca154f5ef64da46c0be5ee9e6db27a (patch)
tree9a9206e401f0d9fa8eefb3fe40f98dd90bd68ef8 /include/stc
parent4482966b231f49aaceedde42f6bf18c1f05818b6 (diff)
downloadSTC-modified-187ee66881ca154f5ef64da46c0be5ee9e6db27a.tar.gz
STC-modified-187ee66881ca154f5ef64da46c0be5ee9e6db27a.zip
Added robustness (hopefully).
Diffstat (limited to 'include/stc')
-rw-r--r--include/stc/ccommon.h7
-rw-r--r--include/stc/template.h2
2 files changed, 4 insertions, 5 deletions
diff --git a/include/stc/ccommon.h b/include/stc/ccommon.h
index d481c42e..4d70469e 100644
--- a/include/stc/ccommon.h
+++ b/include/stc/ccommon.h
@@ -86,12 +86,11 @@
#define c_delete(T, ptr) do { T *_c_p = ptr; T##_drop(_c_p); c_free(_c_p); } while (0)
#define c_swap(T, x, y) do { T _c_t = x; x = y; y = _c_t; } while (0)
#define c_arraylen(a) (sizeof (a)/sizeof (a)[0])
-#define c_less_cmp(less, x, y) (less(y, x) - less(x, y))
-#define c_default_less(x, y) (*(x) < *(y))
-#define c_default_cmp(x, y) c_less_cmp(c_default_less, x, y)
+#define c_default_less(x, y) (*(x) < *(y))
#define c_default_eq(x, y) (*(x) == *(y))
#define c_memcmp_eq(x, y) (memcmp(x, y, sizeof *(x)) == 0)
+#define c_default_cmp(x, y) (c_default_less(y, x) - c_default_less(x, y))
#define c_default_hash(p) c_fasthash(p, sizeof *(p))
#define c_default_from(x) (x)
@@ -119,9 +118,9 @@ typedef const char* crawstr;
#define _c_ROTL(x, k) (x << (k) | x >> (8*sizeof(x) - (k)))
STC_INLINE uint64_t c_fasthash(const void* key, size_t len) {
+ const uint8_t *x = (const uint8_t*) key;
uint64_t u8, h = 1; size_t n = len >> 3;
uint32_t u4;
- const uint8_t *x = (const uint8_t*) key;
while (n--) {
memcpy(&u8, x, 8), x += 8;
h += (_c_ROTL(u8, 26) ^ u8)*0xc6a4a7935bd1e99d;
diff --git a/include/stc/template.h b/include/stc/template.h
index 2082d509..3a568fd1 100644
--- a/include/stc/template.h
+++ b/include/stc/template.h
@@ -175,7 +175,7 @@
#define i_keydrop c_default_drop
#endif
#ifdef i_less
- #define i_cmp(x, y) c_less_cmp(i_less, x, y)
+ #define i_cmp(x, y) (i_less(y, x)) - (i_less(x, y))
#endif
#if !defined i_eq && defined i_cmp
#define i_eq(x, y) !(i_cmp(x, y))