summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorTyge Løvset <[email protected]>2021-01-18 22:37:48 +0100
committerTyge Løvset <[email protected]>2021-01-18 22:37:48 +0100
commit6158681eaf96f539dbd85e1f97bcd4d1edf55d4b (patch)
tree281f07f1ce0e6130b274f10af78989d7204edf6d
parent21769ca6769b5e0e6bd45f29a8676aa4f8c02af2 (diff)
downloadSTC-modified-6158681eaf96f539dbd85e1f97bcd4d1edf55d4b.tar.gz
STC-modified-6158681eaf96f539dbd85e1f97bcd4d1edf55d4b.zip
Minor updates again.
-rw-r--r--examples/convert.c43
-rw-r--r--stc/ccommon.h6
-rw-r--r--stc/csmap.h11
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 <stdio.h>
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; \
} \
\