From 6e65e30c6e3c2bc271d3885e749ceb0289bbd9cf Mon Sep 17 00:00:00 2001 From: Tyge Løvset Date: Wed, 22 Dec 2021 08:49:19 +0100 Subject: Changed the c_apply() and c_apply_pair() to one new c_apply() API. Added c_pair(v) for convenience. --- examples/sptr.c | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) (limited to 'examples/sptr.c') diff --git a/examples/sptr.c b/examples/sptr.c index 7e0f7357..e1d734e0 100644 --- a/examples/sptr.c +++ b/examples/sptr.c @@ -28,7 +28,7 @@ void Person_drop(Person* p) { #include #define i_type Persons -#define i_val_bind PSPtr // binds PSPtr_cmp, ... +#define i_val_ref PSPtr // binds PSPtr_cmp, ... #include @@ -37,30 +37,31 @@ int main() c_auto (Persons, vec) c_auto (PSPtr, p, q) { - p = PSPtr_new(Person_new("Laura", "Palmer")); + p = PSPtr_from(Person_new("Laura", "Palmer")); // We want a deep copy -- PSPtr_clone(p) only shares! - q = PSPtr_new(Person_clone(*p.get)); + q = PSPtr_from(Person_clone(*p.get)); cstr_assign(&q.get->name, "Leland"); printf("orig: %s %s\n", p.get->name.str, p.get->last.str); printf("copy: %s %s\n", q.get->name.str, q.get->last.str); - Persons_push_back(&vec, PSPtr_new(Person_new("Dale", "Cooper"))); - Persons_push_back(&vec, PSPtr_new(Person_new("Audrey", "Home"))); - - // NB! Clone/share p and q to the vector using emplace_back() - c_apply(Persons, emplace_back, &vec, {p, q}); + Persons_push_back(&vec, PSPtr_from(Person_new("Dale", "Cooper"))); + Persons_push_back(&vec, PSPtr_from(Person_new("Audrey", "Home"))); + + // Clone/share p and q to the vector + c_apply(v, Persons_push_back(&vec, PSPtr_clone(v)), PSPtr, {p, q}); c_foreach (i, Persons, vec) printf("%s %s\n", i.ref->get->name.str, i.ref->get->last.str); puts(""); - - // Look-up Audrey! Use a (fake) temporary PSPtr for lookup. + + // Look-up Audrey! c_autovar (Person a = Person_new("Audrey", "Home"), Person_drop(&a)) { - const PSPtr *v = Persons_get(&vec, (PSPtr){&a}); + const PSPtr *v = Persons_get(&vec, a); if (v) printf("found: %s %s\n", v->get->name.str, v->get->last.str); } + puts(""); } } -- cgit v1.2.3