diff options
| author | Tyge Løvset <[email protected]> | 2020-09-27 22:36:38 +0200 |
|---|---|---|
| committer | Tyge Løvset <[email protected]> | 2020-09-27 22:36:38 +0200 |
| commit | 40f41d2d717431023c8b835ac48bd6b90e630aa5 (patch) | |
| tree | 0fde6e304c42d9117be8bcff120b196f1e7da67d /examples | |
| parent | fa79e56bce051e43cbd236c96039b528b1f4ae98 (diff) | |
| download | STC-modified-40f41d2d717431023c8b835ac48bd6b90e630aa5.tar.gz STC-modified-40f41d2d717431023c8b835ac48bd6b90e630aa5.zip | |
Fixed csptr and examples.
Diffstat (limited to 'examples')
| -rw-r--r-- | examples/share_ptr.c | 14 | ||||
| -rw-r--r-- | examples/share_ptr2.c | 10 |
2 files changed, 15 insertions, 9 deletions
diff --git a/examples/share_ptr.c b/examples/share_ptr.c index 5f5a0cc7..28f1975c 100644 --- a/examples/share_ptr.c +++ b/examples/share_ptr.c @@ -6,7 +6,7 @@ typedef struct { cstr_t name, last; } Person;
-Person* Person_from(Person* p, const char* name, const char* last) {
+Person* Person_make(Person* p, const char* name, const char* last) {
p->name = cstr(name), p->last = cstr(last);
return p;
}
@@ -27,9 +27,13 @@ int main() { clist_pe queue = clist_pe_init();
cvec_pe vec = cvec_pe_init();
+ csptr_pe joe = csptr_pe_make((Person) {cstr("Joe"), cstr("Jordan")});
+ clist_pe_push_back(&queue, csptr_pe_share(joe));
+ cvec_pe_push_back(&vec, csptr_pe_share(joe));
+
puts("Push 10:");
c_forrange (i, 10) {
- csptr_pe p = csptr_pe_make(c_new(Person));
+ csptr_pe p = csptr_pe_from(c_new(Person));
p.get->name = cstr_from("Name %d", (i * 7) % 10);
p.get->last = cstr_from("Last %d", (i * 7) % 10);
clist_pe_push_back(&queue, p);
@@ -53,13 +57,15 @@ int main() { c_foreach (i, cvec_pe, vec)
printf(" %s\n", i.val->get->name.str);
- Person lost; Person_from(&lost, "Name 5", "Last 5");
+ Person lost; Person_make(&lost, "Name 5", "Last 5");
csptr_pe ptmp = {&lost, NULL}; // share pointer without counter - OK.
clist_pe_iter_t lit = clist_pe_find(&queue, ptmp);
Person_del(&lost);
-
if (lit.val) printf("Found: %s\n", lit.val->get->name.str);
+ printf("use %ld\n", *joe.use_count);
+ csptr_pe_del(&joe);
+
puts("Destroy queue:");
clist_pe_del(&queue);
diff --git a/examples/share_ptr2.c b/examples/share_ptr2.c index 1b90f49e..4c589ad1 100644 --- a/examples/share_ptr2.c +++ b/examples/share_ptr2.c @@ -5,12 +5,12 @@ typedef struct { cstr_t name, last; } Person;
-Person* Person_make(Person* p, cstr_t name, cstr_t last) {
+Person* Person_from(Person* p, cstr_t name, cstr_t last) {
printf("make %s\n", name.str);
p->name = name, p->last = last;
return p;
}
-Person* Person_from(Person* p, const char* name, const char* last) {
+Person* Person_make(Person* p, const char* name, const char* last) {
p->name = cstr(name), p->last = cstr(last);
return p;
}
@@ -19,7 +19,7 @@ void Person_del(Person* p) { c_del(cstr, &p->name, &p->last);
}
-using_csptr(pe, Person, Person_del);
+using_csptr(pe, Person, Person_del, c_no_compare);
using_cmap(pe, int, csptr_pe, csptr_pe_del);
@@ -30,10 +30,10 @@ int main() { // c_try_emplace: The last argument is completely ignored if key already exist in map, so no memory leak happens!
c_forrange (i, 20) { // When i>9, all key will exist, so value arg is not executed.
c_try_emplace(&map, cmap_pe, (i * 7) % 10,
- csptr_pe_make(Person_make(c_new(Person), cstr_from("Name %d", (i * 7) % 10),
+ csptr_pe_from(Person_from(c_new(Person), cstr_from("Name %d", (i * 7) % 10),
cstr_from("Last %d", (i * 9) % 10))));
}
- c_try_emplace(&map, cmap_pe, 11, csptr_pe_make(Person_from(c_new(Person), "Hello", "world!")));
+ c_try_emplace(&map, cmap_pe, 11, csptr_pe_from(Person_make(c_new(Person), "Hello", "World!")));
c_foreach (i, cmap_pe, map)
printf(" %d: %s\n", i.val->first, i.val->second.get->name.str);
|
