From 6ed8aac6bbf35165646a147f5b16881024074ce8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=80=9A=E6=B4=B2?= Date: Fri, 13 Mar 2026 09:52:18 +0800 Subject: [PATCH] FFlist: adds `ffListReserve` --- src/common/FFlist.h | 9 +++++++++ src/common/impl/FFlist.c | 6 +----- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/common/FFlist.h b/src/common/FFlist.h index 4ef1239bd..ec7801212 100644 --- a/src/common/FFlist.h +++ b/src/common/FFlist.h @@ -106,6 +106,15 @@ static inline void ffListClear(FFlist* list) list->length = 0; } +static inline void ffListReserve(FFlist* list, uint32_t newCapacity) +{ + if (__builtin_expect(newCapacity <= list->capacity, false)) + return; + + list->data = (uint8_t*) realloc(list->data, (size_t) newCapacity * list->elementSize); + list->capacity = newCapacity; +} + #define FF_LIST_FOR_EACH(itemType, itemVarName, listVar) \ assert(sizeof(itemType) == (listVar).elementSize); \ for(itemType* itemVarName = (itemType*)(listVar).data; \ diff --git a/src/common/impl/FFlist.c b/src/common/impl/FFlist.c index 55dc28671..f389ced41 100644 --- a/src/common/impl/FFlist.c +++ b/src/common/impl/FFlist.c @@ -6,11 +6,7 @@ void* ffListAdd(FFlist* list) { if(list->length == list->capacity) - { - list->capacity = list->capacity == 0 ? FF_LIST_DEFAULT_ALLOC : list->capacity * 2; - // realloc(NULL, newSize) is same as malloc(newSize) - list->data = realloc(list->data, (size_t)list->capacity * list->elementSize); - } + ffListReserve(list, list->capacity == 0 ? FF_LIST_DEFAULT_ALLOC : list->capacity * 2); ++list->length; return ffListGet(list, list->length - 1);