From b064f6962e1c76ffaaef3b1299193a65630f917f Mon Sep 17 00:00:00 2001 From: Martin Fouilleul Date: Wed, 23 Apr 2025 13:59:24 +0200 Subject: [PATCH] store and maintain element count in oc_list --- src/util/lists.c | 8 +++++++- src/util/lists.h | 1 + 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/util/lists.c b/src/util/lists.c index 9b2bfe13b..8580dcdf0 100644 --- a/src/util/lists.c +++ b/src/util/lists.c @@ -11,7 +11,7 @@ void oc_list_init(oc_list* list) { - list->first = list->last = 0; + memset(list, 0, sizeof(oc_list)); } void oc_list_insert(oc_list* list, oc_list_elt* afterElt, oc_list_elt* elt) @@ -27,6 +27,7 @@ void oc_list_insert(oc_list* list, oc_list_elt* afterElt, oc_list_elt* elt) list->last = elt; } afterElt->next = elt; + list->len++; OC_DEBUG_ASSERT(elt->next != elt, "oc_list_insert(): can't insert an element into itself"); } @@ -46,6 +47,7 @@ void oc_list_insert_before(oc_list* list, oc_list_elt* beforeElt, oc_list_elt* e } beforeElt->prev = elt; + list->len++; OC_DEBUG_ASSERT(elt->next != elt, "oc_list_insert_before(): can't insert an element into itself"); } @@ -70,6 +72,8 @@ void oc_list_remove(oc_list* list, oc_list_elt* elt) list->last = elt->prev; } elt->prev = elt->next = 0; + OC_DEBUG_ASSERT(list->len); + list->len--; } void oc_list_push_front(oc_list* list, oc_list_elt* elt) @@ -85,6 +89,7 @@ void oc_list_push_front(oc_list* list, oc_list_elt* elt) list->last = elt; } list->first = elt; + list->len++; } oc_list_elt* oc_list_pop_front(oc_list* list) @@ -114,6 +119,7 @@ void oc_list_push_back(oc_list* list, oc_list_elt* elt) list->first = elt; } list->last = elt; + list->len++; } oc_list_elt* oc_list_pop_back(oc_list* list) diff --git a/src/util/lists.h b/src/util/lists.h index 12061c6b4..fed47cc4c 100644 --- a/src/util/lists.h +++ b/src/util/lists.h @@ -77,6 +77,7 @@ typedef struct oc_list { oc_list_elt* first; oc_list_elt* last; + u64 len; } oc_list; ORCA_API bool oc_list_empty(oc_list list);