From a54a6af49704be823cfbb263b12959e9147c3338 Mon Sep 17 00:00:00 2001 From: Lorenz Stechauner Date: Tue, 3 Jan 2023 14:04:03 +0100 Subject: [PATCH] Add list_insert/append_ptr --- src/lib/list.c | 19 +++++++++++++++++-- src/lib/list.h | 6 +++++- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/src/lib/list.c b/src/lib/list.c index 319e350..50858a1 100644 --- a/src/lib/list.c +++ b/src/lib/list.c @@ -38,12 +38,23 @@ void *list_create(int elem_size, int init_elem_n) { return (unsigned char *) list_ptr + sizeof(list_meta_t); } -unsigned int list_size(void *list_ptr) { +int list_size(const void *list_ptr) { list_meta_t *list = (void *) ((unsigned char *) list_ptr - sizeof(list_meta_t)); return list->size; } void *list_insert(void *list_ptr, void *elem, int n) { + void *ptr = NULL; + list_ptr = list_insert_ptr(list_ptr, &ptr, n); + if (list_ptr != NULL && ptr != NULL) { + list_meta_t *list = (void *) ((unsigned char *) list_ptr - sizeof(list_meta_t)); + memcpy(ptr, elem, list->elem_size); + } + + return list_ptr; +} + +void *list_insert_ptr(void *list_ptr, void **elem, int n) { list_meta_t *list = (void *) ((unsigned char *) list_ptr - sizeof(list_meta_t)); if (n < 0) n = list->size + n + 1; @@ -58,7 +69,7 @@ void *list_insert(void *list_ptr, void *elem, int n) { if (n < list->size) memmove(array + (n + 1) * list->elem_size, array + n * list->elem_size, (list->size - n) * list->elem_size); - memcpy(array + n * list->elem_size, elem, list->elem_size); + *elem = array + n * list->elem_size; list->size++; return (unsigned char *) list + sizeof(list_meta_t); @@ -68,6 +79,10 @@ void *list_append(void *list_ptr, void *elem) { return list_insert(list_ptr, elem, -1); } +void *list_append_ptr(void *list_ptr, void **elem) { + return list_insert_ptr(list_ptr, elem, -1); +} + void *list_remove(void *list_ptr, int n) { list_meta_t *list = (void *) ((unsigned char *) list_ptr - sizeof(list_meta_t)); if (n < 0) diff --git a/src/lib/list.h b/src/lib/list.h index 3fdd17e..0d29c59 100644 --- a/src/lib/list.h +++ b/src/lib/list.h @@ -4,12 +4,16 @@ void *list_create(int elem_size, int init_elem_n); -unsigned int list_size(void *list_ptr); +int list_size(const void *list_ptr); void *list_insert(void *list_ptr, void *elem, int n); +void *list_insert_ptr(void *list_ptr, void **elem, int n); + void *list_append(void *list_ptr, void *elem); +void *list_append_ptr(void *list_ptr, void **elem); + void *list_remove(void *list_ptr, int n); void *list_clear(void *list_ptr);