From 7d770eac625d3cc48c51285ce089276bca08d82b Mon Sep 17 00:00:00 2001 From: Tyge Løvset <60263450+tylov@users.noreply.github.com> Date: Thu, 6 Jan 2022 10:19:43 +0100 Subject: Update cbox_api.md --- docs/cbox_api.md | 31 +++++++++++++------------------ 1 file changed, 13 insertions(+), 18 deletions(-) diff --git a/docs/cbox_api.md b/docs/cbox_api.md index 3cc40aa0..ba2c3b54 100644 --- a/docs/cbox_api.md +++ b/docs/cbox_api.md @@ -21,8 +21,10 @@ See similar c++ class [std::unique_ptr](https://en.cppreference.com/w/cpp/memory #define i_val // value: REQUIRED #define i_cmp // three-way compare two i_val* : REQUIRED IF i_val is a non-integral type #define i_drop // destroy value func - defaults to empty destruct +#define i_valraw // convertion type #define i_from // create from raw/clone func - REQUIRED if i_drop is defined, // unless 'i_opt c_no_clone' is defined. +#define i_valto // to-raw func. #define i_tag // type name tag, defaults to i_val #include ``` @@ -34,6 +36,7 @@ compare the pointer addresses when used. Additionally, `c_no_clone` or `i_is_fwd ```c cbox_X cbox_X_init(); // return an empty cbox cbox_X cbox_X_new(i_valraw raw); // like cbox_X_from(), but create owned value from raw. + // nb! available only if i_valraw is defined. cbox_X cbox_X_from(i_val val); // allocate new heap object with val. Take ownership of val. cbox_X cbox_X_from_ptr(i_val* p); // create a cbox from a pointer. Takes ownership of p. @@ -63,22 +66,11 @@ bool cbox_X_value_eq(const i_val* x, const i_val* y); // cbox_X_value_cm ```c #include -#include -void int_drop(int* x) { +void int_drop(int* x) { // for demo. printf("drop: %d\n", *x); } -// When 'i_drop' is defined, you are also forced to define a clone function with -// 'i_from', as it is normally required when i_drop destroys resources. -// -// If cloning is not needed, define 'i_opt c_no_clone' instead of 'i_from' -// both for the cbox type and the container of cbox elements. It will also -// disable emplace container functions. -// -// This applies to all container types, except those with carc elements, as they -// define cloning internally. - #define i_val int #define i_drop int_drop // optional func, just to display elements destroyed #define i_from c_default_from @@ -98,10 +90,10 @@ int main() c_auto (csset_int, set) // declare and init set, call drop at scope exit { c_apply(v, cvec_int_push_back(&vec, v), cbox_int, { - cbox_int_new(2021), - cbox_int_new(2012), - cbox_int_new(2022), - cbox_int_new(2015), + cbox_int_from(2021), + cbox_int_from(2012), + cbox_int_from(2022), + cbox_int_from(2015), }); printf("vec:"); c_foreach (i, cvec_int, vec) printf(" %d", *i.ref->get); @@ -109,8 +101,11 @@ int main() // add odd numbers from vec to set c_foreach (i, cvec_int, vec) - if (*i.ref->get & 1) - csset_int_emplace(&set, *i.ref); // deep copy (clones) *i.ref object + if (*i.ref->get & 1) { + csset_int_emplace(&set, *i.ref->get); // clone + // same as: + //csset_int_insert(&set, cbox_int_clone(*i.ref)); + } // erase the two last elements in vec cvec_int_pop_back(&vec); -- cgit v1.2.3 From 26c449c95223173dcb9de7b84684099c55b41db1 Mon Sep 17 00:00:00 2001 From: Tyge Løvset <60263450+tylov@users.noreply.github.com> Date: Thu, 6 Jan 2022 10:35:13 +0100 Subject: Update cbox_api.md --- docs/cbox_api.md | 57 ++++++++++++++++++++++++++++---------------------------- 1 file changed, 28 insertions(+), 29 deletions(-) diff --git a/docs/cbox_api.md b/docs/cbox_api.md index ba2c3b54..1e8c4ae9 100644 --- a/docs/cbox_api.md +++ b/docs/cbox_api.md @@ -36,7 +36,7 @@ compare the pointer addresses when used. Additionally, `c_no_clone` or `i_is_fwd ```c cbox_X cbox_X_init(); // return an empty cbox cbox_X cbox_X_new(i_valraw raw); // like cbox_X_from(), but create owned value from raw. - // nb! available only if i_valraw is defined. + // NB! available only if i_valraw is defined. cbox_X cbox_X_from(i_val val); // allocate new heap object with val. Take ownership of val. cbox_X cbox_X_from_ptr(i_val* p); // create a cbox from a pointer. Takes ownership of p. @@ -66,58 +66,57 @@ bool cbox_X_value_eq(const i_val* x, const i_val* y); // cbox_X_value_cm ```c #include - -void int_drop(int* x) { // for demo. +void int_drop(int* x) { printf("drop: %d\n", *x); } +#define i_type IBox #define i_val int #define i_drop int_drop // optional func, just to display elements destroyed -#define i_from c_default_from -#include // cbox_int +#define i_from c_default_from // must specify because i_drop was defined. +#include -#define i_key_sptr cbox_int // note: use i_key_sptr instead of i_key -#define i_tag int // tag otherwise defaults to 'ref' -#include // csset_int (like: std::set>) +#define i_type ISet +#define i_key_sptr IBox // NB: use i_key_sptr instead of i_key +#include // ISet : std::set> -#define i_val_sptr cbox_int // note: use i_val_sptr instead of i_val -#define i_tag int // tag otherwise defaults to 'ref' -#include // cvec_int (like: std::vector>) +#define i_type IVec +#define i_val_sptr IBox // NB: use i_val_sptr instead of i_val +#include // IVec : std::vector> int main() { - c_auto (cvec_int, vec) // declare and init vec, call drop at scope exit - c_auto (csset_int, set) // declare and init set, call drop at scope exit + c_auto (IVec, vec) // declare and init vec, call drop at scope exit + c_auto (ISet, set) // similar { - c_apply(v, cvec_int_push_back(&vec, v), cbox_int, { - cbox_int_from(2021), - cbox_int_from(2012), - cbox_int_from(2022), - cbox_int_from(2015), + c_apply(v, IVec_push(&vec, v), IBox, { + IBox_from(2021), IBox_from(2012), IBox_from(2022), IBox_from(2015), }); + printf("vec:"); - c_foreach (i, cvec_int, vec) printf(" %d", *i.ref->get); + c_foreach (i, IVec, vec) + printf(" %d", *i.ref->get); puts(""); // add odd numbers from vec to set - c_foreach (i, cvec_int, vec) + c_foreach (i, IVec, vec) if (*i.ref->get & 1) { - csset_int_emplace(&set, *i.ref->get); // clone + ISet_emplace(&set, *i.ref->get); // clone // same as: - //csset_int_insert(&set, cbox_int_clone(*i.ref)); + //ISet_insert(&set, IBox_clone(*i.ref)); } - // erase the two last elements in vec - cvec_int_pop_back(&vec); - cvec_int_pop_back(&vec); + // pop the two last elements in vec + IVec_pop(&vec); + IVec_pop(&vec); printf("vec:"); - c_foreach (i, cvec_int, vec) printf(" %d", *i.ref->get); + c_foreach (i, IVec, vec) + printf(" %d", *i.ref->get); printf("\nset:"); - c_foreach (i, csset_int, set) printf(" %d", *i.ref->get); - - puts("\nDone"); + c_foreach (i, ISet, set) + printf(" %d", *i.ref->get); } } ``` -- cgit v1.2.3 From f8bc84427ffe6949e02470d27afe498d2778dd17 Mon Sep 17 00:00:00 2001 From: Tyge Løvset <60263450+tylov@users.noreply.github.com> Date: Thu, 6 Jan 2022 10:38:38 +0100 Subject: Update cbox_api.md --- docs/cbox_api.md | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/docs/cbox_api.md b/docs/cbox_api.md index 1e8c4ae9..32271f58 100644 --- a/docs/cbox_api.md +++ b/docs/cbox_api.md @@ -126,10 +126,7 @@ vec: 2021 2012 2022 2015 drop: 2015 drop: 2022 vec: 2021 2012 -set: 2015 2021 -Done -drop: 2021 -drop: 2015 -drop: 2021 +set: 2021drop: 2021 drop: 2012 +drop: 2021 ``` -- cgit v1.2.3