summaryrefslogtreecommitdiffhomepage
path: root/examples/share_ptr2.c
blob: 65240969b538dd171c0c1e7d6334bd2b4b3ffdc6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <stc/cptr.h>
#include <stc/cmap.h>
#include <stc/cstr.h>
#include <stdio.h>

typedef struct { cstr_t name, last; } Person;

Person* Person_from(Person* p, cstr_t name, cstr_t last) {
    p->name = name, p->last = last;
    return p;
}
void Person_del(Person* p) {
    c_del(cstr, &p->name, &p->last);
}

using_csptr(ps, Person, Person_del, c_no_compare);
using_cmap(ps, int, csptr_ps, csptr_ps_del);


int main() {
    cmap_ps map = cmap_ps_init();
    c_forrange (i, 20) {
        c_try_emplace(&map, cmap_ps, (i * 7) % 10,
                            csptr_ps_from(Person_from(c_new(Person), cstr_from_fmt("Name %d", (i * 7) % 10),
                                                                     cstr_from_fmt("Last %d", (i * 9) % 10))));
    }
    c_foreach (i, cmap_ps, map)
        printf(" %d: %s\n", i.ref->first, i.ref->second.get->name.str);
    cmap_ps_del(&map);
}