summaryrefslogtreecommitdiffhomepage
path: root/docs/cvec_api.md
diff options
context:
space:
mode:
authorTyge Løvset <[email protected]>2021-01-20 23:08:47 +0100
committerTyge Løvset <[email protected]>2021-01-20 23:08:47 +0100
commitb0716d34433af4714f9a0b68278579fa1dd2b24e (patch)
tree162330d3fb25cd1b8de095e68fa40bebc6886919 /docs/cvec_api.md
parent13c60c38e84e66585038d7509cb485ae33900db5 (diff)
downloadSTC-modified-b0716d34433af4714f9a0b68278579fa1dd2b24e.tar.gz
STC-modified-b0716d34433af4714f9a0b68278579fa1dd2b24e.zip
Improved README.md
Diffstat (limited to 'docs/cvec_api.md')
-rw-r--r--docs/cvec_api.md39
1 files changed, 39 insertions, 0 deletions
diff --git a/docs/cvec_api.md b/docs/cvec_api.md
index 23083920..a94d10e1 100644
--- a/docs/cvec_api.md
+++ b/docs/cvec_api.md
@@ -173,3 +173,42 @@ item: Mary
item: Jake
item: 2 elements so far
```
+### Example 3
+
+Container with elements of structs:
+```c
+#include <stc/cstr.h>
+#include <stc/cvec.h>
+
+typedef struct {
+ cstr name; // dynamic string
+ int id;
+} User;
+
+int User_compare(const User* a, const User* b) {
+ int c = strcmp(a->name.str, b->name.str);
+ return c != 0 ? c : a->id - b->id;
+}
+void User_del(User* self) {
+ cstr_del(&self->name);
+}
+User User_clone(User user) {
+ user.name = cstr_clone(user.name);
+ return user;
+}
+
+// declare a memory managed, clonable vector of users:
+using_cvec(u, User, User_compare, User_del, User_clone);
+
+int main(void) {
+ cvec_u vec = cvec_u_init();
+ cvec_u_push_back(&vec, (User) {cstr_from("admin"), 0});
+ cvec_u_push_back(&vec, (User) {cstr_from("joe"), 1});
+
+ cvec_u vec2 = cvec_u_clone(vec);
+ c_foreach (i, cvec_u, vec2)
+ printf("%s: %d\n", i.ref->name.str, i.ref->id);
+
+ c_del(cvec_u, &vec, &vec2); // cleanup
+}
+```