From 21496e32695744d4679fc11105352c61522ce601 Mon Sep 17 00:00:00 2001 From: Aldrik Ramaekers Date: Fri, 8 Aug 2025 20:34:22 +0200 Subject: contact crud --- src/administration.cpp | 65 ++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 58 insertions(+), 7 deletions(-) (limited to 'src/administration.cpp') 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 + 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 -- cgit v1.2.3-70-g09d2