diff options
| author | Tyge Løvset <[email protected]> | 2021-01-04 20:03:51 +0100 |
|---|---|---|
| committer | Tyge Løvset <[email protected]> | 2021-01-04 20:03:51 +0100 |
| commit | 36097d97ec2c446732daa2cb8c88b5e10717452c (patch) | |
| tree | ce297bcabcf43a7348783d52b9db7a4ca06d5da9 | |
| parent | a285bfb891ea00df8ab5cbb21f899ce9ced5f460 (diff) | |
| download | STC-modified-36097d97ec2c446732daa2cb8c88b5e10717452c.tar.gz STC-modified-36097d97ec2c446732daa2cb8c88b5e10717452c.zip | |
Added cmap_X_value_del() and added convert.c example.
| -rw-r--r-- | docs/cdeq_api.md | 4 | ||||
| -rw-r--r-- | docs/clist_api.md | 2 | ||||
| -rw-r--r-- | docs/cmap_api.md | 5 | ||||
| -rw-r--r-- | docs/cpque_api.md | 4 | ||||
| -rw-r--r-- | docs/cqueue_api.md | 2 | ||||
| -rw-r--r-- | docs/cset_api.md | 4 | ||||
| -rw-r--r-- | docs/cvec_api.md | 2 | ||||
| -rw-r--r-- | examples/convert.c | 46 | ||||
| -rw-r--r-- | stc/ccommon.h | 4 | ||||
| -rw-r--r-- | stc/cmap.h | 5 |
10 files changed, 67 insertions, 11 deletions
diff --git a/docs/cdeq_api.md b/docs/cdeq_api.md index 701b5dc8..83c2779e 100644 --- a/docs/cdeq_api.md +++ b/docs/cdeq_api.md @@ -70,7 +70,7 @@ cdeq_X_value_t* cdeq_X_at(cdeq_X* self, size_t idx); cdeq_X_value_t* cdeq_X_front(cdeq_X* self); cdeq_X_value_t* cdeq_X_back(cdeq_X* self); -void cdeq_X_push_n(cdeq_X *self, const cdeq_X_input_t arr[], size_t size); +void cdeq_X_push_n(cdeq_X *self, const cdeq_X_rawvalue_t arr[], size_t size); void cdeq_X_push_front(cdeq_X* self, Value value); void cdeq_X_push_back(cdeq_X* self, Value value); void cdeq_X_emplace_front(cdeq_X* self, RawValue raw); @@ -106,7 +106,7 @@ void cdeq_X_next(cdeq_X_iter_t* it); cdeq_X_value_t* cdeq_X_itval(cdeq_X_iter_t it); size_t cdeq_X_index(const cdeq_X deq, cdeq_X_iter_t it); -Value cdeq_X_value_from_raw(RawValue raw); +cdeq_X_value_t cdeq_X_value_clone(cdeq_X_value_t val); ``` ## Examples diff --git a/docs/clist_api.md b/docs/clist_api.md index f0f85d1b..d608f8c7 100644 --- a/docs/clist_api.md +++ b/docs/clist_api.md @@ -94,7 +94,7 @@ clist_X_iter_t clist_X_end(const clist_X* self); void clist_X_next(clist_X_iter_t* it); clist_X_value_t* clist_X_itval(clist_X_iter_t it); -Value clist_X_value_from_raw(RawValue raw); +clist_X_value_t clist_X_value_clone(clist_X_value_t val); ``` ## Example diff --git a/docs/cmap_api.md b/docs/cmap_api.md index d3b85439..fa55b3a1 100644 --- a/docs/cmap_api.md +++ b/docs/cmap_api.md @@ -99,7 +99,7 @@ size_t cmap_X_capacity(cmap_X m); void cmap_X_push_n(cmap_X* self, const cmap_X_rawvalue_t arr[], size_t size); cmap_X_result_t cmap_X_emplace(cmap_X* self, RawKey rkey, RawMapped rmapped); -cmap_X_result_t cmap_X_insert(cmap_X* self, cmap_X_input_t rval); +cmap_X_result_t cmap_X_insert(cmap_X* self, cmap_X_rawvalue_t rval); cmap_X_result_t cmap_X_insert_or_assign(cmap_X* self, RawKey rkey, RawMapped rmapped); cmap_X_result_t cmap_X_put(cmap_X* self, RawKey rkey, RawMapped rmapped); cmap_X_result_t cmap_X_put_mapped(cmap_X* self, RawKey rkey, Mapped mapped); @@ -117,7 +117,8 @@ cmap_X_iter_t cmap_X_end(cmap_X* self); void cmap_X_next(cmap_X_iter_t* it); cmap_X_mapped_t* cmap_X_itval(cmap_X_iter_t it); -cmap_bucket_t cmap_X_bucket(const cmap_X* self, const cmap_X_rawkey_t* rkeyPtr); +cmap_X_value_t cmap_X_value_clone(cmap_X_value_t val); +void cmap_X_value_del(cmap_X_value_t* val); uint32_t c_default_hash(const void *data, size_t len); uint32_t c_default_hash32(const void* data, size_t len); ``` diff --git a/docs/cpque_api.md b/docs/cpque_api.md index 9ac48ec7..c402ea24 100644 --- a/docs/cpque_api.md +++ b/docs/cpque_api.md @@ -44,11 +44,13 @@ bool cpque_X_empty(cpque_X pq); const cpque_X_value_t* cpque_X_top(const cpque_X* self); -void cpque_X_push_n(cpque_X *self, const cpque_X_input_t arr[], size_t size); +void cpque_X_push_n(cpque_X *self, const cpque_X_rawvalue_t arr[], size_t size); void cpque_X_emplace(cpque_X* self, cpque_X_rawvalue_t raw); void cpque_X_push(cpque_X* self, cpque_X_value_t value); void cpque_X_pop(cpque_X* self); void cpque_X_erase_at(cpque_X* self, size_t idx); + +cpque_X_value_t cpque_X_value_clone(cpque_X_value_t val); ``` ## Example diff --git a/docs/cqueue_api.md b/docs/cqueue_api.md index f5fe3f21..3973eda2 100644 --- a/docs/cqueue_api.md +++ b/docs/cqueue_api.md @@ -52,6 +52,8 @@ cqueue_X_iter_t cqueue_X_begin(cqueue_X* self); cqueue_X_iter_t cqueue_X_end(cqueue_X* self); void cqueue_X_next(cqueue_X_iter_t* it); cqueue_X_value_t* cqueue_X_itval(cqueue_X_iter_t it); + +cqueue_X_value_t cqueue_X_value_clone(cqueue_X_value_t val); ``` ## Examples diff --git a/docs/cset_api.md b/docs/cset_api.md index 31698a87..831b5cdf 100644 --- a/docs/cset_api.md +++ b/docs/cset_api.md @@ -82,8 +82,8 @@ cset_X_iter_t cset_X_end(cset_X* self); void cset_X_next(cset_X_iter_t* it);
cset_X_value_t* cset_X_itval(cset_X_iter_t it);
-cset_bucket_t cset_X_bucket(const cset_X* self, const cset_X_rawkey_t* rkeyPtr);
-
+cset_X_value_t cset_X_value_clone(cset_X_value_t val);
+void cset_X_value_del(cset_X_value_t* val);
uint32_t c_default_hash(const void *data, size_t len);
uint32_t c_default_hash32(const void* data, size_t len);
```
diff --git a/docs/cvec_api.md b/docs/cvec_api.md index 9377f08c..53c9e0f2 100644 --- a/docs/cvec_api.md +++ b/docs/cvec_api.md @@ -103,7 +103,7 @@ void cvec_X_next(cvec_X_iter_t* it); cvec_X_value_t* cvec_X_itval(cvec_X_iter_t it); size_t cvec_X_index(const cvec_X vec, cvec_X_iter_t it); -Value cvec_X_value_from_raw(RawValue raw); +cvec_X_value_t cvec_X_value_clone(cvec_X_value_t val); ``` ## Examples diff --git a/examples/convert.c b/examples/convert.c new file mode 100644 index 00000000..c5724b54 --- /dev/null +++ b/examples/convert.c @@ -0,0 +1,46 @@ +
+#include "stc/cmap.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);
+
+int main()
+{
+ cmap_str map = cmap_inits;
+ cmap_str_emplace(&map, "green", "#00ff00");
+ cmap_str_emplace(&map, "blue", "#0000ff");
+ cmap_str_emplace(&map, "yellow", "#ffff00");
+
+ puts("cmap_str:");
+ 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)
+ 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, push_back, &vec);
+
+ 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, push_back, &list);
+
+ puts("\nclist_ss:");
+ c_foreach (i, clist_ss, list)
+ printf(" %s: %s\n", i.ref->first.str, i.ref->second.str);
+
+ c_del(cmap_str, &map, &clone);
+ cvec_ss_del(&vec);
+ clist_ss_del(&list);
+}
\ No newline at end of file diff --git a/stc/ccommon.h b/stc/ccommon.h index 856ffaf5..f8c32705 100644 --- a/stc/ccommon.h +++ b/stc/ccommon.h @@ -123,8 +123,8 @@ #define c_defcon(ctype, c, ...) \
ctype c = ctype##_init(); c_push_items(&c, ctype, __VA_ARGS__)
-#define c_convert(ctype1, c1, ctype2, c2, put) do { \
- ctype2* __c2 = &(c2); \
+#define c_convert(ctype1, c1, ctype2, put, c2ref) do { \
+ ctype2* __c2 = c2ref; \
c_foreach_3 (__i, ctype1, c1) \
ctype2##_##put(__c2, ctype2##_value_clone(*__i.ref)); \
} while (0)
@@ -205,6 +205,11 @@ typedef struct {size_t idx; uint32_t hx;} cmap_bucket_t, cset_bucket_t; CMAP_ONLY_##ctype( val.second = mappedFromRaw(mappedToRaw(&val.second)); ) \
return val; \
} \
+ STC_INLINE void \
+ ctype##_##X##_value_del(ctype##_##X##_value_t* val) { \
+ keyDel(&KEY_REF_##ctype(val)); \
+ CMAP_ONLY_##ctype( mappedDel(&val->second); ) \
+ } \
STC_INLINE size_t \
ctype##_##X##_bucket_count(ctype##_##X m) {return (size_t) m.bucket_count;} \
STC_INLINE size_t \
|
