From 4186f2dc2d79318c664f1a55d9f9e790ca5e7f3b Mon Sep 17 00:00:00 2001 From: Tyge Løvset Date: Thu, 12 May 2022 10:13:46 +0200 Subject: Reverted some back, and made c_less_cmp() safer. --- include/stc/ccommon.h | 18 ++++++++++-------- include/stc/template.h | 2 +- 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)) -- cgit v1.2.3