diff options
| author | Aldrik Ramaekers <aldrikboy@gmail.com> | 2025-08-08 20:34:22 +0200 |
|---|---|---|
| committer | Aldrik Ramaekers <aldrikboy@gmail.com> | 2025-08-08 20:34:22 +0200 |
| commit | 21496e32695744d4679fc11105352c61522ce601 (patch) | |
| tree | a4bda5abe657f25f5d9054a055d5cdfe93ca64f1 /src/administration.cpp | |
| parent | 550b3bf614d8eeb116cceadf3e180ca7a4490976 (diff) | |
contact crud
Diffstat (limited to 'src/administration.cpp')
| -rw-r--r-- | src/administration.cpp | 65 |
1 files changed, 58 insertions, 7 deletions
diff --git a/src/administration.cpp b/src/administration.cpp index 94b1910..052f007 100644 --- a/src/administration.cpp +++ b/src/administration.cpp @@ -1,18 +1,19 @@ #include "administration.hpp" -#include <stdio.h> + administration g_administration; -void init_administration_obj() +void administration_create() { list_init(&g_administration.contacts); + strncpy(g_administration.path, "[unsaved project]", sizeof(g_administration.path)); // @localize } -void destroy_administration_obj() +void administration_destroy() { list_destroy(&g_administration.contacts); } -bool create_contact(contact data) +bool administration_create_contact(contact data) { contact* new_contact = (contact*)malloc(sizeof(contact)); memcpy((void*)new_contact, (void*)&data, sizeof(contact)); @@ -23,7 +24,7 @@ bool create_contact(contact data) return true; } -bool update_contact(contact data) +bool administration_update_contact(contact data) { list_iterator_start(&g_administration.contacts); while (list_iterator_hasnext(&g_administration.contacts)) { @@ -31,6 +32,24 @@ bool update_contact(contact data) if (strcmp(c->id, data.id) == 0) { memcpy(c, &data, sizeof(data)); + list_iterator_stop(&g_administration.contacts); + return true; + } + } + list_iterator_stop(&g_administration.contacts); + + return false; +} + +bool administration_remove_contact(contact data) +{ + list_iterator_start(&g_administration.contacts); + while (list_iterator_hasnext(&g_administration.contacts)) { + contact* c = (contact *)list_iterator_next(&g_administration.contacts); + + if (strcmp(c->id, data.id) == 0) { + list_iterator_stop(&g_administration.contacts); + list_delete(&g_administration.contacts, c); return true; } } @@ -39,7 +58,39 @@ bool update_contact(contact data) return false; } -void remove_contact(int index) +s32 administration_create_id() +{ + return g_administration.next_id; +} + +u32 administration_get_contact_count() +{ + return list_size(&g_administration.contacts); +} + +u32 administration_get_contacts(u32 page_index, u32 page_size, contact* buffer) +{ + assert(buffer); + + u32 write_cursor = 0; + + u32 read_start = page_index * page_size; + + list_iterator_start(&g_administration.contacts); + while (list_iterator_hasnext(&g_administration.contacts)) { + contact c = *(contact *)list_iterator_next(&g_administration.contacts); + + if (g_administration.contacts.iter_pos <= read_start) continue; + + buffer[write_cursor++] = c; + if (write_cursor >= page_size) break; + } + list_iterator_stop(&g_administration.contacts); + + return write_cursor; +} + +char* administration_get_file_path() { - list_delete_at(&g_administration.contacts, index); + return g_administration.path; }
\ No newline at end of file |
