summaryrefslogtreecommitdiffhomepage
path: root/examples/box.c
diff options
context:
space:
mode:
Diffstat (limited to 'examples/box.c')
-rw-r--r--examples/box.c39
1 files changed, 19 insertions, 20 deletions
diff --git a/examples/box.c b/examples/box.c
index c7763bb8..d400799b 100644
--- a/examples/box.c
+++ b/examples/box.c
@@ -3,7 +3,7 @@
typedef struct { cstr name, last; } Person;
-Person Person_from(const char* name, const char* last) {
+Person Person_new(const char* name, const char* last) {
return (Person){.name = cstr_from(name), .last = cstr_from(last)};
}
@@ -17,44 +17,43 @@ Person Person_clone(Person p) {
p.last = cstr_clone(p.last);
return p;
}
-void Person_del(Person* p) {
- printf("del: %s %s\n", p->name.str, p->last.str);
- c_del(cstr, &p->name, &p->last);
+
+void Person_drop(Person* p) {
+ printf("drop: %s %s\n", p->name.str, p->last.str);
+ c_drop(cstr, &p->name, &p->last);
}
-#define i_val Person
-#define i_cmp Person_cmp
-#define i_from Person_clone
-#define i_del Person_del
-#define i_tag prs
+#define i_type PPtr
+#define i_val_bind Person // binds Person_cmp, ...
#include <stc/cbox.h>
-#define i_val_ref cbox_prs
-#define i_tag prs
+#define i_type Persons
+#define i_val_bind PPtr // binds PPtr_cmp, ...
#include <stc/cvec.h>
int main()
{
- c_auto (cvec_prs, vec)
- c_auto (cbox_prs, p, q)
+ c_auto (Persons, vec)
+ c_auto (PPtr, p, q)
{
- p = cbox_prs_new(Person_from("Dave", "Cooper"));
+ p = PPtr_new(Person_new("Dave", "Cooper"));
- q = cbox_prs_clone(p);
+ q = PPtr_clone(p);
cstr_assign(&q.get->name, "Dale");
printf("%s %s.\n", p.get->name.str, p.get->last.str);
printf("%s %s.\n", q.get->name.str, q.get->last.str);
- cvec_prs_push_back(&vec, cbox_prs_new(Person_from("Laura", "Palmer")));
- cvec_prs_push_back(&vec, cbox_prs_new(Person_from("Shelly", "Johnson")));
+ Persons_push_back(&vec, PPtr_new(Person_new("Laura", "Palmer")));
+ Persons_push_back(&vec, PPtr_new(Person_new("Shelly", "Johnson")));
- c_foreach (i, cvec_prs, vec)
+ c_foreach (i, Persons, vec)
printf("%s: %s\n", i.ref->get->name.str, i.ref->get->last.str);
- c_autovar (Person per = Person_from("Laura", "Palmer"), Person_del(&per)) {
- const cbox_prs *v = cvec_prs_get(&vec, (cbox_prs){&per});
+ // Look-up Shelly!
+ c_autovar (Person s = Person_new("Shelly", "Johnson"), Person_drop(&s)) {
+ const PPtr *v = Persons_get(&vec, (PPtr){&s});
if (v) printf("found: %s: %s\n", v->get->name.str, v->get->last.str);
}
}