[Bf-blender-cvs] [b539aee0c98] master: BLI_memarena: remove use of BLI_linklist
Campbell Barton
noreply at git.blender.org
Tue Feb 12 06:53:29 CET 2019
Commit: b539aee0c98524bb24591ce5398bf3b851ee2e05
Author: Campbell Barton
Date: Tue Feb 12 16:21:27 2019 +1100
Branches: master
https://developer.blender.org/rBb539aee0c98524bb24591ce5398bf3b851ee2e05
BLI_memarena: remove use of BLI_linklist
Preprare for using memarena w/ makesdna, BLI_linklist depends on
BLI_mempool. Since linked list use in here is simple, do it inline.
===================================================================
M source/blender/blenlib/intern/BLI_memarena.c
===================================================================
diff --git a/source/blender/blenlib/intern/BLI_memarena.c b/source/blender/blenlib/intern/BLI_memarena.c
index 12b4b5350ef..71260086afa 100644
--- a/source/blender/blenlib/intern/BLI_memarena.c
+++ b/source/blender/blenlib/intern/BLI_memarena.c
@@ -36,17 +36,21 @@
#include "BLI_utildefines.h"
#include "BLI_memarena.h"
-#include "BLI_linklist.h"
#include "BLI_strict_flags.h"
#ifdef WITH_MEM_VALGRIND
# include "valgrind/memcheck.h"
#endif
+struct MemBuf {
+ struct MemBuf *next;
+ uchar data[0];
+};
+
struct MemArena {
unsigned char *curbuf;
const char *name;
- LinkNode *bufs;
+ struct MemBuf *bufs;
size_t bufsize, cursize;
size_t align;
@@ -54,6 +58,15 @@ struct MemArena {
bool use_calloc;
};
+static void memarena_buf_free_all(struct MemBuf *mb)
+{
+ while (mb != NULL) {
+ struct MemBuf *mb_next = mb->next;
+ MEM_freeN(mb);
+ mb = mb_next;
+ }
+}
+
MemArena *BLI_memarena_new(const size_t bufsize, const char *name)
{
MemArena *ma = MEM_callocN(sizeof(*ma), "memarena");
@@ -86,8 +99,7 @@ void BLI_memarena_use_align(struct MemArena *ma, const size_t align)
void BLI_memarena_free(MemArena *ma)
{
- BLI_linklist_freeN(ma->bufs);
-
+ memarena_buf_free_all(ma->bufs);
#ifdef WITH_MEM_VALGRIND
VALGRIND_DESTROY_MEMPOOL(ma);
#endif
@@ -124,8 +136,11 @@ void *BLI_memarena_alloc(MemArena *ma, size_t size)
ma->cursize = ma->bufsize;
}
- ma->curbuf = (ma->use_calloc ? MEM_callocN : MEM_mallocN)(ma->cursize, ma->name);
- BLI_linklist_prepend(&ma->bufs, ma->curbuf);
+ struct MemBuf *mb = (ma->use_calloc ? MEM_callocN : MEM_mallocN)(sizeof(*mb) + ma->cursize, ma->name);
+ ma->curbuf = mb->data;
+ mb->next = ma->bufs;
+ ma->bufs = mb;
+
memarena_curbuf_align(ma);
}
@@ -164,12 +179,12 @@ void BLI_memarena_clear(MemArena *ma)
size_t curbuf_used;
if (ma->bufs->next) {
- BLI_linklist_freeN(ma->bufs->next);
+ memarena_buf_free_all(ma->bufs->next);
ma->bufs->next = NULL;
}
curbuf_prev = ma->curbuf;
- ma->curbuf = ma->bufs->link;
+ ma->curbuf = ma->bufs->data;
memarena_curbuf_align(ma);
/* restore to original size */
More information about the Bf-blender-cvs
mailing list