From 74e61369f255f0cfa2c6d22adcaec426ff2aae9f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=80=9A=E6=B4=B2?= Date: Mon, 12 Jun 2023 11:30:04 +0800 Subject: [PATCH] FFlist / FFstrbuf: add InitMove functions --- src/util/FFlist.h | 17 +++++++++++++++++ src/util/FFstrbuf.c | 13 ------------- src/util/FFstrbuf.h | 16 +++++++++++++++- 3 files changed, 32 insertions(+), 14 deletions(-) diff --git a/src/util/FFlist.h b/src/util/FFlist.h index eccd30b55..ce045be98 100644 --- a/src/util/FFlist.h +++ b/src/util/FFlist.h @@ -58,6 +58,23 @@ static inline void ffListSort(FFlist* list, int(*compar)(const void*, const void qsort(list->data, list->length, list->elementSize, compar); } +// Move the contents of `src` into `list`, and left `src` empty +static inline void ffListInitMove(FFlist* list, FFlist* src) +{ + if (src) + { + list->elementSize = src->elementSize; + list->capacity = src->capacity; + list->length = src->length; + list->data = list->data; + ffListInit(src, list->elementSize); + } + else + { + ffListInit(list, 0); + } +} + static inline void ffListDestroy(FFlist* list) { if (!list->data) return; diff --git a/src/util/FFstrbuf.c b/src/util/FFstrbuf.c index eccea2341..c05a7fa36 100644 --- a/src/util/FFstrbuf.c +++ b/src/util/FFstrbuf.c @@ -22,19 +22,6 @@ void ffStrbufInitCopy(FFstrbuf* strbuf, const FFstrbuf* src) ffStrbufAppend(strbuf, src); } -void ffStrbufInitMove(FFstrbuf* strbuf, FFstrbuf* src) -{ - if (src) - { - strbuf->allocated = src->allocated; - strbuf->chars = src->chars; - strbuf->length = src->length; - ffStrbufInit(src); - } - else - ffStrbufInit(strbuf); -} - void ffStrbufInitVF(FFstrbuf* strbuf, const char* format, va_list arguments) { assert(format != NULL); diff --git a/src/util/FFstrbuf.h b/src/util/FFstrbuf.h index 32eb3da8c..c47719679 100644 --- a/src/util/FFstrbuf.h +++ b/src/util/FFstrbuf.h @@ -28,9 +28,9 @@ typedef struct FFstrbuf char* chars; } FFstrbuf; +static inline void ffStrbufInit(FFstrbuf* strbuf); void ffStrbufInitA(FFstrbuf* strbuf, uint32_t allocate); void ffStrbufInitCopy(FFstrbuf* __restrict strbuf, const FFstrbuf* __restrict src); -void ffStrbufInitMove(FFstrbuf* strbuf, FFstrbuf* src); void ffStrbufInitVF(FFstrbuf* strbuf, const char* format, va_list arguments); void ffStrbufEnsureFree(FFstrbuf* strbuf, uint32_t free); @@ -104,6 +104,20 @@ FF_C_NODISCARD static inline FFstrbuf ffStrbufCreateCopy(const FFstrbuf* src) return strbuf; } +// Move the content of `src` into `strbuf`, and left `src` empty +static inline void ffStrbufInitMove(FFstrbuf* strbuf, FFstrbuf* src) +{ + if (src) + { + strbuf->allocated = src->allocated; + strbuf->chars = src->chars; + strbuf->length = src->length; + ffStrbufInit(src); + } + else + ffStrbufInit(strbuf); +} + FF_C_NODISCARD static inline FFstrbuf ffStrbufCreateMove(FFstrbuf* src) { FFstrbuf strbuf;