summaryrefslogtreecommitdiffhomepage
path: root/examples/sptr.c
diff options
context:
space:
mode:
authorTyge Løvset <[email protected]>2021-12-22 08:49:19 +0100
committerTyge Løvset <[email protected]>2021-12-22 08:50:15 +0100
commit6e65e30c6e3c2bc271d3885e749ceb0289bbd9cf (patch)
treeccffa7b7dde19fb551f99c7eed529bdc7308e494 /examples/sptr.c
parent1b90b6c3eea0f3e07f8a2d2abe3686917d1d86a8 (diff)
downloadSTC-modified-6e65e30c6e3c2bc271d3885e749ceb0289bbd9cf.tar.gz
STC-modified-6e65e30c6e3c2bc271d3885e749ceb0289bbd9cf.zip
Changed the c_apply() and c_apply_pair() to one new c_apply() API. Added c_pair(v) for convenience.
Diffstat (limited to 'examples/sptr.c')
-rw-r--r--examples/sptr.c23
1 files changed, 12 insertions, 11 deletions
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 <stc/csptr.h>
#define i_type Persons
-#define i_val_bind PSPtr // binds PSPtr_cmp, ...
+#define i_val_ref PSPtr // binds PSPtr_cmp, ...
#include <stc/cvec.h>
@@ -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("");
}
}