Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2013-12-02 10:46:19 +0400
committerCampbell Barton <ideasman42@gmail.com>2013-12-02 10:51:27 +0400
commitf64ae4cbe5a724496624de9e479c04f325613be5 (patch)
tree9631ba79b3c54ac3f6fa0619dff490e724ff1f94 /source/blender/blenlib/intern/BLI_memarena.c
parent4436620150f2884a0b4b9e417b08e19f8a797a86 (diff)
MemArena: use size_t instead of int for alloc args and internal storage.
also add BLI_memarena_calloc to be used when calloc isnt enabled for the arena.
Diffstat (limited to 'source/blender/blenlib/intern/BLI_memarena.c')
-rw-r--r--source/blender/blenlib/intern/BLI_memarena.c48
1 files changed, 30 insertions, 18 deletions
diff --git a/source/blender/blenlib/intern/BLI_memarena.c b/source/blender/blenlib/intern/BLI_memarena.c
index 4a6712201a9..ce04ac61ef4 100644
--- a/source/blender/blenlib/intern/BLI_memarena.c
+++ b/source/blender/blenlib/intern/BLI_memarena.c
@@ -30,10 +30,12 @@
* \ingroup bli
*/
+#include <stdlib.h>
#include <string.h>
#include "MEM_guardedalloc.h"
+#include "BLI_utildefines.h"
#include "BLI_memarena.h"
#include "BLI_linklist.h"
#include "BLI_strict_flags.h"
@@ -44,16 +46,16 @@
struct MemArena {
unsigned char *curbuf;
- int bufsize, cursize;
const char *name;
+ LinkNode *bufs;
- int use_calloc;
- int align;
+ size_t bufsize, cursize;
+ size_t align;
- LinkNode *bufs;
+ bool use_calloc;
};
-MemArena *BLI_memarena_new(const int bufsize, const char *name)
+MemArena *BLI_memarena_new(const size_t bufsize, const char *name)
{
MemArena *ma = MEM_callocN(sizeof(*ma), "memarena");
ma->bufsize = bufsize;
@@ -77,7 +79,7 @@ void BLI_memarena_use_malloc(MemArena *ma)
ma->use_calloc = 0;
}
-void BLI_memarena_use_align(struct MemArena *ma, const int align)
+void BLI_memarena_use_align(struct MemArena *ma, const size_t align)
{
/* align should be a power of two */
ma->align = align;
@@ -102,12 +104,12 @@ static void memarena_curbuf_align(MemArena *ma)
{
unsigned char *tmp;
- tmp = (unsigned char *)PADUP( (intptr_t) ma->curbuf, ma->align);
- ma->cursize -= (int)(tmp - ma->curbuf);
+ tmp = (unsigned char *)PADUP((intptr_t)ma->curbuf, (int)ma->align);
+ ma->cursize -= (size_t)(tmp - ma->curbuf);
ma->curbuf = tmp;
}
-void *BLI_memarena_alloc(MemArena *ma, int size)
+void *BLI_memarena_alloc(MemArena *ma, size_t size)
{
void *ptr;
@@ -119,14 +121,11 @@ void *BLI_memarena_alloc(MemArena *ma, int size)
if (size > ma->bufsize - (ma->align - 1)) {
ma->cursize = PADUP(size + 1, ma->align);
}
- else
+ else {
ma->cursize = ma->bufsize;
+ }
- if (ma->use_calloc)
- ma->curbuf = MEM_callocN((size_t)ma->cursize, ma->name);
- else
- ma->curbuf = MEM_mallocN((size_t)ma->cursize, ma->name);
-
+ ma->curbuf = (ma->use_calloc ? MEM_callocN : MEM_mallocN)(ma->cursize, ma->name);
BLI_linklist_prepend(&ma->bufs, ma->curbuf);
memarena_curbuf_align(ma);
}
@@ -142,6 +141,19 @@ void *BLI_memarena_alloc(MemArena *ma, int size)
return ptr;
}
+void *BLI_memarena_calloc(MemArena *ma, size_t size)
+{
+ void *ptr;
+
+ /* no need to use this function call if we're calloc'ing by default */
+ BLI_assert(ma->use_calloc == false);
+
+ ptr = BLI_memarena_alloc(ma, size);
+ memset(ptr, 0, size);
+
+ return ptr;
+}
+
/**
* Clear for reuse, avoids re-allocation when an arena may
* otherwise be free'd and recreated.
@@ -150,7 +162,7 @@ void BLI_memarena_clear(MemArena *ma)
{
if (ma->bufs) {
unsigned char *curbuf_prev;
- int curbuf_used;
+ size_t curbuf_used;
if (ma->bufs->next) {
BLI_linklist_freeN(ma->bufs->next);
@@ -162,11 +174,11 @@ void BLI_memarena_clear(MemArena *ma)
memarena_curbuf_align(ma);
/* restore to original size */
- curbuf_used = (int)(curbuf_prev - ma->curbuf);
+ curbuf_used = (size_t)(curbuf_prev - ma->curbuf);
ma->cursize += curbuf_used;
if (ma->use_calloc) {
- memset(ma->curbuf, 0, (size_t)curbuf_used);
+ memset(ma->curbuf, 0, curbuf_used);
}
}