From c44df963a425d054f3b86cbb4aca353be5f919ba Mon Sep 17 00:00:00 2001 From: Tyge Løvset Date: Mon, 18 Jan 2021 13:01:41 +0100 Subject: Internal reorganizing. --- stc/cmap.h | 11 +++----- stc/csmap.h | 85 +++++++++++++++++++++++++++++-------------------------------- 2 files changed, 45 insertions(+), 51 deletions(-) diff --git a/stc/cmap.h b/stc/cmap.h index 7191bb44..f30203ea 100644 --- a/stc/cmap.h +++ b/stc/cmap.h @@ -219,8 +219,6 @@ typedef struct {size_t idx; uint32_t hx;} cmap_bucket_t, cset_bucket_t; STC_API void \ C##_##X##_reserve(C##_##X* self, size_t size); \ STC_API void \ - C##_##X##_push_n(C##_##X* self, const C##_##X##_rawvalue_t arr[], size_t size); \ - STC_API void \ C##_##X##_del(C##_##X* self); \ STC_API void \ C##_##X##_clear(C##_##X* self); \ @@ -245,6 +243,10 @@ typedef struct {size_t idx; uint32_t hx;} cmap_bucket_t, cset_bucket_t; return SET_ONLY_##C(C##_##X##_insert_key(self, raw)) \ MAP_ONLY_##C(C##_##X##_emplace(self, raw.first, raw.second)); \ } \ + STC_INLINE void \ + C##_##X##_push_n(C##_##X* self, const C##_##X##_rawvalue_t arr[], size_t n) { \ + for (size_t i=0; isize == 0) return; \ diff --git a/stc/csmap.h b/stc/csmap.h index 49600b96..6279a30a 100644 --- a/stc/csmap.h +++ b/stc/csmap.h @@ -201,9 +201,6 @@ int main(void) { C##_##X clone = {C##_##X##_clone_r_(bst.root), bst.size}; \ return clone; \ } \ -\ - STC_API void \ - C##_##X##_push_n(C##_##X* self, const C##_##X##_rawvalue_t arr[], size_t size); \ \ STC_API C##_##X##_value_t* \ C##_##X##_find(const C##_##X* self, RawKey rkey, C##_##X##_iter_t* it); \ @@ -228,6 +225,10 @@ int main(void) { return SET_ONLY_##C( C##_##X##_insert_key(self, raw) ) \ MAP_ONLY_##C( C##_##X##_emplace(self, raw.first, raw.second) ); \ } \ + STC_INLINE void \ + C##_##X##_push_n(C##_##X* self, const C##_##X##_rawvalue_t arr[], size_t n) { \ + for (size_t i=0; iroot; \ + it->_top = 0; \ + while (tn->level) { \ + C##_##X##_rawkey_t rx = keyToRaw(KEY_REF_##C(&tn->value)); \ + switch (keyCompareRaw(&rx, &rkey)) { \ + case -1: tn = tn->link[1]; break; \ + case 1: it->_st[it->_top++] = tn; tn = tn->link[0]; break; \ + case 0: it->ref = &tn->value; it->_tn = tn->link[1]; return it->ref; \ + } \ + } \ + return (it->ref = NULL); \ } \ +\ STC_DEF void \ - C##_##X##_del_r_(C##_##X##_node_t* tn) { \ - if (tn->level != 0) { \ - C##_##X##_del_r_(tn->link[0]); \ - C##_##X##_del_r_(tn->link[1]); \ - C##_##X##_value_del(&tn->value); \ - c_free(tn); \ - } \ + C##_##X##_next(C##_##X##_iter_t *it) { \ + C##_##X##_node_t *tn = it->_tn; \ + if (it->_top || tn->level) { \ + while (tn->level) { \ + it->_st[it->_top++] = tn; \ + tn = tn->link[0]; \ + } \ + tn = it->_st[--it->_top]; \ + it->_tn = tn->link[1]; \ + it->ref = &tn->value; \ + } else \ + it->ref = NULL; \ } \ \ static C##_##X##_node_t * \ @@ -344,21 +361,6 @@ static csmap___node_t cbst_nil = {&cbst_nil, &cbst_nil, 0}; } \ return tn; \ } \ -\ - STC_DEF void \ - C##_##X##_next(C##_##X##_iter_t *it) { \ - C##_##X##_node_t *tn = it->_tn; \ - if (it->_top || tn->level) { \ - while (tn->level) { \ - it->_st[it->_top++] = tn; \ - tn = tn->link[0]; \ - } \ - tn = it->_st[--it->_top]; \ - it->_tn = tn->link[1]; \ - it->ref = &tn->value; \ - } else \ - it->ref = NULL; \ - } \ \ STC_DEF C##_##X##_node_t* \ C##_##X##_insert_key_r_(C##_##X##_node_t* tn, const C##_##X##_rawkey_t* rkey, C##_##X##_result_t* res) { \ @@ -418,21 +420,6 @@ static csmap___node_t cbst_nil = {&cbst_nil, &cbst_nil, 0}; } \ return tn; \ } \ -\ - STC_DEF C##_##X##_value_t* \ - C##_##X##_find(const C##_##X* self, C##_##X##_rawkey_t rkey, C##_##X##_iter_t* it) { \ - C##_##X##_node_t *tn = self->root; \ - it->_top = 0; \ - while (tn->level) { \ - C##_##X##_rawkey_t rx = keyToRaw(KEY_REF_##C(&tn->value)); \ - switch (keyCompareRaw(&rx, &rkey)) { \ - case -1: tn = tn->link[1]; break; \ - case 1: it->_st[it->_top++] = tn; tn = tn->link[0]; break; \ - case 0: it->ref = &tn->value; it->_tn = tn->link[1]; return it->ref; \ - } \ - } \ - return (it->ref = NULL); \ - } \ \ STC_DEF C##_##X##_node_t* \ C##_##X##_clone_r_(C##_##X##_node_t *tn) { \ @@ -443,6 +430,16 @@ static csmap___node_t cbst_nil = {&cbst_nil, &cbst_nil, 0}; cn->level = tn->level; \ C##_##X##_value_copy(&tn->value, &cn->value); \ return cn; \ + } \ +\ + STC_DEF void \ + C##_##X##_del_r_(C##_##X##_node_t* tn) { \ + if (tn->level != 0) { \ + C##_##X##_del_r_(tn->link[0]); \ + C##_##X##_del_r_(tn->link[1]); \ + C##_##X##_value_del(&tn->value); \ + c_free(tn); \ + } \ } #else -- cgit v1.2.3