summaryrefslogtreecommitdiffhomepage
path: root/include
diff options
context:
space:
mode:
authorTyge Løvset <[email protected]>2022-05-12 10:13:46 +0200
committerTyge Løvset <[email protected]>2022-05-12 10:13:46 +0200
commit4186f2dc2d79318c664f1a55d9f9e790ca5e7f3b (patch)
tree998157dd4cc4041e30d9f32dc02685375fab38f9 /include
parent187ee66881ca154f5ef64da46c0be5ee9e6db27a (diff)
downloadSTC-modified-4186f2dc2d79318c664f1a55d9f9e790ca5e7f3b.tar.gz
STC-modified-4186f2dc2d79318c664f1a55d9f9e790ca5e7f3b.zip
Reverted some back, and made c_less_cmp() safer.
Diffstat (limited to 'include')
-rw-r--r--include/stc/ccommon.h18
-rw-r--r--include/stc/template.h2
2 files changed, 11 insertions, 9 deletions
diff --git a/include/stc/ccommon.h b/include/stc/ccommon.h
index 4d70469e..549dd969 100644
--- a/include/stc/ccommon.h
+++ b/include/stc/ccommon.h
@@ -85,19 +85,21 @@
#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_arraylen(a) (sizeof (a)/sizeof *(a))
+// x and y are i_keyraw* type, defaults to i_key*:
+#define c_less_cmp(less, x, y) ((less((y), (x))) - (less((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_hash(x) c_fasthash(x, sizeof *(x))
-#define c_default_from(x) (x)
-#define c_default_toraw(ptr) (*(ptr))
-#define c_default_drop(ptr) ((void) (ptr))
-#define c_derived_keyclone(x) i_keyfrom((i_keyto((&(x)))))
-#define c_derived_valclone(x) i_valfrom((i_valto((&(x)))))
+#define c_default_from(v) (v)
+#define c_default_toraw(vp) (*(vp))
+#define c_default_drop(vp) ((void) (vp))
+#define c_derived_keyclone(v) i_keyfrom((i_keyto((&(v)))))
+#define c_derived_valclone(v) i_valfrom((i_valto((&(v)))))
#define c_option(flag) ((i_opt) & (flag))
#define c_is_fwd (1<<0)
diff --git a/include/stc/template.h b/include/stc/template.h
index 3a568fd1..2082d509 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) (i_less(y, x)) - (i_less(x, y))
+ #define i_cmp(x, y) c_less_cmp(i_less, x, y)
#endif
#if !defined i_eq && defined i_cmp
#define i_eq(x, y) !(i_cmp(x, y))