From 6158681eaf96f539dbd85e1f97bcd4d1edf55d4b Mon Sep 17 00:00:00 2001 From: Tyge Løvset Date: Mon, 18 Jan 2021 22:37:48 +0100 Subject: Minor updates again. --- examples/convert.c | 43 ++++++++++++++++++++++--------------------- stc/ccommon.h | 6 ------ stc/csmap.h | 11 ++++++----- 3 files changed, 28 insertions(+), 32 deletions(-) diff --git a/examples/convert.c b/examples/convert.c index 55f7098f..f5dd5af6 100644 --- a/examples/convert.c +++ b/examples/convert.c @@ -1,13 +1,14 @@ #include "stc/cmap.h" +#include "stc/csmap.h" #include "stc/cvec.h" #include "stc/clist.h" #include "stc/cstr.h" #include using_cmap_str(); -using_cvec(ss, cmap_str_value_t, c_no_compare, cmap_str_value_del, cmap_str_value_clone); -using_clist(ss, cmap_str_value_t, c_no_compare, cmap_str_value_del, cmap_str_value_clone); +using_cvec_str(); +using_clist_str(); int main() { @@ -16,31 +17,31 @@ int main() cmap_str_emplace(&map, "blue", "#0000ff"); cmap_str_emplace(&map, "yellow", "#ffff00"); - puts("cmap_str:"); + puts("MAP:"); c_foreach (i, cmap_str, map) printf(" %s: %s\n", i.ref->first.str, i.ref->second.str); - cmap_str clone = cmap_str_clone(map); - - puts("\ncmap_str clone:"); - c_foreach (i, cmap_str, clone) + puts("\nCLONE MAP:"); + cmap_str mclone = cmap_str_clone(map); + c_foreach (i, cmap_str, mclone) printf(" %s: %s\n", i.ref->first.str, i.ref->second.str); - cvec_ss vec = cvec_ss_init(); - c_convert(cmap_str, map, cvec_ss, &vec, push_back); - - puts("\nvec_ss:"); - c_foreach (i, cvec_ss, vec) - printf(" %s: %s\n", i.ref->first.str, i.ref->second.str); - clist_ss list = clist_ss_init(); - c_convert(cmap_str, map, clist_ss, &list, push_back); + puts("\nMAP TO VECS:"); + cvec_str vec1 = cvec_str_init(), vec2 = cvec_str_init(); + c_foreach (i, cmap_str, mclone) { + cvec_str_emplace_back(&vec1, i.ref->first.str); + cvec_str_emplace_back(&vec2, i.ref->second.str); + } + c_forrange (i, cvec_str_size(vec1)) + printf(" %s: %s\n", vec1.data[i].str, vec2.data[i].str); - puts("\nclist_ss:"); - c_foreach (i, clist_ss, list) - printf(" %s: %s\n", i.ref->first.str, i.ref->second.str); + puts("\nVEC TO LIST:"); + clist_str list = clist_str_init(); + c_foreach (i, cvec_str, vec1) clist_str_emplace_back(&list, i.ref->str); + c_foreach (i, clist_str, list) printf(" %s\n", i.ref->str); - c_del(cmap_str, &map, &clone); - cvec_ss_del(&vec); - clist_ss_del(&list); + c_del(cmap_str, &map, &mclone); + c_del(cvec_str, &vec1, &vec2); + clist_str_del(&list); } \ No newline at end of file diff --git a/stc/ccommon.h b/stc/ccommon.h index b2a98d7e..a94d58a0 100644 --- a/stc/ccommon.h +++ b/stc/ccommon.h @@ -124,12 +124,6 @@ ctype##_push_n(self, __arr, sizeof __arr/sizeof *__arr); \ } while (0) -#define c_convert(ctype1, c1, ctype2, c2ptr, push) do { \ - ctype2* __c2 = c2ptr; \ - c_foreach_3 (__i, ctype1, c1) \ - ctype2##_##push(__c2, ctype2##_value_clone(*__i.ref)); \ -} while (0) - /* For cmap_X and csmap_X only: */ #define c_try_emplace(self, ctype, rkey, mapped) do { \ ctype##_result_t __r = ctype##_insert_key(self, rkey); \ diff --git a/stc/csmap.h b/stc/csmap.h index 0d43eea1..b284401a 100644 --- a/stc/csmap.h +++ b/stc/csmap.h @@ -189,10 +189,11 @@ int main(void) { keyDel(KEY_REF_##C(val)); \ MAP_ONLY_##C( mappedDel(&val->second); ) \ } \ - STC_INLINE void \ - C##_##X##_value_copy(const C##_##X##_value_t* src, C##_##X##_value_t* dst) { \ - *KEY_REF_##C(dst) = keyFromRaw(keyToRaw(KEY_REF_##C(src))); \ - MAP_ONLY_##C( dst->second = mappedFromRaw(mappedToRaw(&src->second)); ) \ + STC_INLINE C##_##X##_value_t \ + C##_##X##_value_clone(C##_##X##_value_t val) { \ + *KEY_REF_##C(&val) = keyFromRaw(keyToRaw(KEY_REF_##C(&val))); \ + MAP_ONLY_##C( val.second = mappedFromRaw(mappedToRaw(&val.second)); ) \ + return val; \ } \ \ STC_API C##_##X##_node_t* C##_##X##_clone_r_(C##_##X##_node_t *tn); \ @@ -432,7 +433,7 @@ static csmap___node_t cbst_nil = {&cbst_nil, &cbst_nil, 0}; cn->link[0] = C##_##X##_clone_r_(tn->link[0]); \ cn->link[1] = C##_##X##_clone_r_(tn->link[1]); \ cn->level = tn->level; \ - C##_##X##_value_copy(&tn->value, &cn->value); \ + cn->value = C##_##X##_value_clone(tn->value); \ return cn; \ } \ \ -- cgit v1.2.3