From 4db3f43304da1c0b12dcefd15f9f80a4e5a76c79 Mon Sep 17 00:00:00 2001 From: Tyge Løvset Date: Sat, 10 Apr 2021 23:38:31 +0200 Subject: Some final code move. --- stc/cdeq.h | 11 +++++++---- stc/clist.h | 14 +++++++++----- stc/cmap.h | 38 ++++++++++++++++++-------------------- stc/csmap.h | 19 +++++++++---------- stc/cvec.h | 13 ++++++++----- 5 files changed, 51 insertions(+), 44 deletions(-) diff --git a/stc/cdeq.h b/stc/cdeq.h index 3e013078..52dfb5d7 100644 --- a/stc/cdeq.h +++ b/stc/cdeq.h @@ -28,6 +28,7 @@ #include #define using_cdeq(...) c_MACRO_OVERLOAD(using_cdeq, __VA_ARGS__) + #define using_cdeq_2(X, Value) \ using_cdeq_3(X, Value, c_default_compare) #define using_cdeq_3(X, Value, valueCompare) \ @@ -38,10 +39,16 @@ using_cdeq_7(X, Value, valueCompare, valueDel, valueClone, c_trivial_toraw, Value) #define using_cdeq_7(X, Value, valueCompareRaw, valueDel, valueFromRaw, valueToRaw, RawValue) \ _c_using_cdeq(cdeq_##X, Value, valueCompareRaw, valueDel, valueFromRaw, valueToRaw, RawValue) + #define using_cdeq_str() \ _c_using_cdeq(cdeq_str, cstr_t, cstr_compare_raw, cstr_del, cstr_from, cstr_c_str, const char*) +struct cdeq_rep { size_t size, cap; void* base[]; }; +#define cdeq_rep_(self) c_container_of((self)->_base, struct cdeq_rep, base) +typedef int (*c_cmp_fn)(const void*, const void*); + + #define _c_using_cdeq(CX, Value, valueCompareRaw, valueDel, valueFromRaw, valueToRaw, RawValue) \ \ typedef Value CX##_value_t; \ @@ -178,10 +185,6 @@ _c_implement_cdeq(CX, Value, valueCompareRaw, valueDel, valueFromRaw, valueToRaw, RawValue) \ struct stc_trailing_semicolon -struct cdeq_rep { size_t size, cap; void* base[]; }; -#define cdeq_rep_(self) c_container_of((self)->_base, struct cdeq_rep, base) -typedef int (*c_cmp_fn)(const void*, const void*); - /* -------------------------- IMPLEMENTATION ------------------------- */ #if !defined(STC_HEADER) || defined(STC_IMPLEMENTATION) diff --git a/stc/clist.h b/stc/clist.h index fd484bad..66a42a2d 100644 --- a/stc/clist.h +++ b/stc/clist.h @@ -67,9 +67,11 @@ using_clist_7(X, Value, valueCompare, valueDel, valueClone, c_trivial_toraw, Value) #define using_clist_7(X, Value, valueCompareRaw, valueDel, valueFromRaw, valueToRaw, RawValue) \ _c_using_clist(clist_##X, Value, valueCompareRaw, valueDel, valueFromRaw, valueToRaw, RawValue) + #define using_clist_str() \ _c_using_clist(clist_str, cstr_t, cstr_compare_raw, cstr_del, cstr_from, cstr_c_str, const char*) + #define _c_using_clist_types(CX, Value) \ typedef Value CX##_value_t; \ \ @@ -87,6 +89,10 @@ CX##_value_t *ref; \ } CX##_iter_t +_c_using_clist_types(clist_VOID, int); +STC_API size_t _clist_size(const clist_VOID* self); +#define _clist_node(CX, vp) c_container_of(vp, CX##_node_t, value) + #define _c_using_clist(CX, Value, valueCompareRaw, valueDel, valueFromRaw, valueToRaw, RawValue) \ \ @@ -125,7 +131,6 @@ \ STC_API void CX##_splice(CX* self, CX##_iter_t it, CX* other); \ STC_API CX CX##_split(CX* self, CX##_iter_t it1, CX##_iter_t it2); \ -\ STC_API void CX##_sort(CX* self); \ STC_API CX##_iter_t CX##_find_in_range(const CX* self, CX##_iter_t it1, CX##_iter_t it2, RawValue val); \ \ @@ -137,15 +142,18 @@ CX##_value_t* head = self->last ? &self->last->next->value : NULL; \ CX##_iter_t it = {&self->last, self->last, head}; return it; \ } \ +\ STC_INLINE CX##_iter_t \ CX##_end(const CX* self) { \ CX##_iter_t it = {NULL}; return it; \ } \ +\ STC_INLINE void \ CX##_next(CX##_iter_t* it) { \ CX##_node_t* node = it->_prev = _clist_node(CX, it->ref); \ it->ref = (node == *it->_last ? NULL : &node->next->value); \ } \ +\ STC_INLINE CX##_iter_t \ CX##_fwd(CX##_iter_t it, size_t n) { \ while (n-- && it.ref) CX##_next(&it); \ @@ -167,10 +175,6 @@ _c_implement_clist(CX, Value, valueCompareRaw, valueDel, valueFromRaw, valueToRaw, RawValue) \ struct stc_trailing_semicolon -_c_using_clist_types(clist_VOID, int); -STC_API size_t _clist_size(const clist_VOID* self); -#define _clist_node(CX, vp) c_container_of(vp, CX##_node_t, value) - /* -------------------------- IMPLEMENTATION ------------------------- */ #if !defined(STC_HEADER) || defined(STC_IMPLEMENTATION) diff --git a/stc/cmap.h b/stc/cmap.h index ea4e577b..59699ec7 100644 --- a/stc/cmap.h +++ b/stc/cmap.h @@ -63,12 +63,11 @@ int main(void) { #define using_cmap_7(X, Key, Mapped, keyEquals, keyHash, mappedDel, mappedClone) \ using_cmap_9(X, Key, Mapped, keyEquals, keyHash, \ mappedDel, mappedClone, c_trivial_toraw, Mapped) - #define using_cmap_9(X, Key, Mapped, keyEquals, keyHash, \ mappedDel, mappedFromRaw, mappedToRaw, RawMapped) \ - _c_using_chash(cmap_##X, cmap_, Key, Mapped, keyEquals, keyHash, \ - mappedDel, mappedFromRaw, mappedToRaw, RawMapped, \ - c_trivial_del, c_trivial_fromraw, c_trivial_toraw, Key) + using_cmap_13(X, Key, Mapped, keyEquals, keyHash, \ + mappedDel, mappedFromRaw, mappedToRaw, RawMapped, \ + c_trivial_del, c_trivial_fromraw, c_trivial_toraw, Key) #define using_cmap_13(X, Key, Mapped, keyEqualsRaw, keyHashRaw, \ mappedDel, mappedFromRaw, mappedToRaw, RawMapped, \ @@ -129,6 +128,21 @@ int main(void) { cstr_del, cstr_from, cstr_c_str, const char*, \ keyDel, keyFromRaw, keyToRaw, RawKey) +#define SET_ONLY_cmap_(...) +#define MAP_ONLY_cmap_(...) __VA_ARGS__ +#define KEY_REF_cmap_(vp) (&(vp)->first) +#ifndef CMAP_SIZE_T +#define CMAP_SIZE_T uint32_t +#endif +#define _cmap_inits {NULL, NULL, 0, 0, 0.15f, 0.85f} +typedef struct {size_t idx; uint_fast8_t hx;} chash_bucket_t; \ + +STC_API uint64_t c_default_hash(const void *data, size_t len); +STC_INLINE uint64_t c_default_hash32(const void* data, size_t ignored) + {return *(const uint32_t *)data * 0xc6a4a7935bd1e99d;} +STC_INLINE uint64_t c_default_hash64(const void* data, size_t ignored) + {return *(const uint64_t *)data * 0xc6a4a7935bd1e99d;} + #define _c_using_chash(CX, C, Key, Mapped, keyEqualsRaw, keyHashRaw, \ mappedDel, mappedFromRaw, mappedToRaw, RawMapped, \ @@ -289,22 +303,6 @@ int main(void) { keyDel, keyFromRaw, keyToRaw, RawKey) \ struct stc_trailing_semicolon - -#define SET_ONLY_cmap_(...) -#define MAP_ONLY_cmap_(...) __VA_ARGS__ -#define KEY_REF_cmap_(vp) (&(vp)->first) -#ifndef CMAP_SIZE_T -#define CMAP_SIZE_T uint32_t -#endif -#define _cmap_inits {NULL, NULL, 0, 0, 0.15f, 0.85f} -typedef struct {size_t idx; uint_fast8_t hx;} chash_bucket_t; \ - -STC_API uint64_t c_default_hash(const void *data, size_t len); -STC_INLINE uint64_t c_default_hash32(const void* data, size_t ignored) - {return *(const uint32_t *)data * 0xc6a4a7935bd1e99d;} -STC_INLINE uint64_t c_default_hash64(const void* data, size_t ignored) - {return *(const uint64_t *)data * 0xc6a4a7935bd1e99d;} - /* -------------------------- IMPLEMENTATION ------------------------- */ #if !defined(STC_HEADER) || defined(STC_IMPLEMENTATION) diff --git a/stc/csmap.h b/stc/csmap.h index 732d3713..7171a128 100644 --- a/stc/csmap.h +++ b/stc/csmap.h @@ -59,7 +59,6 @@ int main(void) { using_csmap_6(X, Key, Mapped, keyCompare, mappedDel, c_no_clone) #define using_csmap_6(X, Key, Mapped, keyCompare, mappedDel, mappedClone) \ using_csmap_8(X, Key, Mapped, keyCompare, mappedDel, mappedClone, c_trivial_toraw, Mapped) - #define using_csmap_8(X, Key, Mapped, keyCompare, mappedDel, mappedFromRaw, mappedToRaw, RawMapped) \ using_csmap_12(X, Key, Mapped, keyCompare, \ mappedDel, mappedFromRaw, mappedToRaw, RawMapped, \ @@ -124,6 +123,15 @@ int main(void) { cstr_del, cstr_from, cstr_c_str, const char*, \ keyDel, keyFromRaw, keyToRaw, RawKey) +#define SET_ONLY_csmap_(...) +#define MAP_ONLY_csmap_(...) __VA_ARGS__ +#define KEY_REF_csmap_(vp) (&(vp)->first) +#ifndef CSMAP_SIZE_T +#define CSMAP_SIZE_T uint32_t +#endif +struct csmap_rep { size_t root, disp, head, size, cap; void* nodes[]; }; +#define _csmap_rep(self) c_container_of((self)->nodes, struct csmap_rep, nodes) + #define _c_using_aatree(CX, C, Key, Mapped, keyCompareRaw, \ mappedDel, mappedFromRaw, mappedToRaw, RawMapped, \ @@ -287,15 +295,6 @@ int main(void) { keyDel, keyFromRaw, keyToRaw, RawKey) \ struct stc_trailing_semicolon -#define SET_ONLY_csmap_(...) -#define MAP_ONLY_csmap_(...) __VA_ARGS__ -#define KEY_REF_csmap_(vp) (&(vp)->first) -#ifndef CSMAP_SIZE_T -#define CSMAP_SIZE_T uint32_t -#endif -struct csmap_rep { size_t root, disp, head, size, cap; void* nodes[]; }; -#define _csmap_rep(self) c_container_of((self)->nodes, struct csmap_rep, nodes) - /* -------------------------- IMPLEMENTATION ------------------------- */ #if !defined(STC_HEADER) || defined(STC_IMPLEMENTATION) diff --git a/stc/cvec.h b/stc/cvec.h index ffc66037..6a21db16 100644 --- a/stc/cvec.h +++ b/stc/cvec.h @@ -28,6 +28,7 @@ #include #define using_cvec(...) c_MACRO_OVERLOAD(using_cvec, __VA_ARGS__) + #define using_cvec_2(X, Value) \ using_cvec_3(X, Value, c_default_compare) #define using_cvec_3(X, Value, valueCompare) \ @@ -38,10 +39,16 @@ using_cvec_7(X, Value, valueCompare, valueDel, valueClone, c_trivial_toraw, Value) #define using_cvec_7(X, Value, valueCompareRaw, valueDel, valueFromRaw, valueToRaw, RawValue) \ _c_using_cvec(cvec_##X, Value, valueCompareRaw, valueDel, valueFromRaw, valueToRaw, RawValue) + #define using_cvec_str() \ _c_using_cvec(cvec_str, cstr_t, cstr_compare_raw, cstr_del, cstr_from, cstr_c_str, const char*) - + +struct cvec_rep { size_t size, cap; void* data[]; }; +#define _cvec_rep(self) c_container_of((self)->data, struct cvec_rep, data) +typedef int (*c_cmp_fn)(const void*, const void*); + + #define _c_using_cvec(CX, Value, valueCompareRaw, valueDel, valueFromRaw, valueToRaw, RawValue) \ \ typedef Value CX##_value_t; \ @@ -183,10 +190,6 @@ _c_implement_cvec(CX, Value, valueCompareRaw, valueDel, valueFromRaw, valueToRaw, RawValue) \ struct stc_trailing_semicolon -struct cvec_rep { size_t size, cap; void* data[]; }; -#define _cvec_rep(self) c_container_of((self)->data, struct cvec_rep, data) -typedef int (*c_cmp_fn)(const void*, const void*); - /* -------------------------- IMPLEMENTATION ------------------------- */ #if !defined(STC_HEADER) || defined(STC_IMPLEMENTATION) -- cgit v1.2.3