diff options
author | Campbell Barton <ideasman42@gmail.com> | 2013-12-02 10:46:19 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2013-12-02 10:51:27 +0400 |
commit | f64ae4cbe5a724496624de9e479c04f325613be5 (patch) | |
tree | 9631ba79b3c54ac3f6fa0619dff490e724ff1f94 /source/blender/blenlib | |
parent | 4436620150f2884a0b4b9e417b08e19f8a797a86 (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')
-rw-r--r-- | source/blender/blenlib/BLI_memarena.h | 7 | ||||
-rw-r--r-- | source/blender/blenlib/intern/BLI_memarena.c | 48 | ||||
-rw-r--r-- | source/blender/blenlib/intern/polyfill2d.c | 4 |
3 files changed, 36 insertions, 23 deletions
diff --git a/source/blender/blenlib/BLI_memarena.h b/source/blender/blenlib/BLI_memarena.h index 737324ebc16..8d5a7654425 100644 --- a/source/blender/blenlib/BLI_memarena.h +++ b/source/blender/blenlib/BLI_memarena.h @@ -52,12 +52,13 @@ extern "C" { struct MemArena; typedef struct MemArena MemArena; -struct MemArena *BLI_memarena_new(const int bufsize, const char *name) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(2) ATTR_MALLOC; +struct MemArena *BLI_memarena_new(const size_t bufsize, const char *name) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(2) ATTR_MALLOC; void BLI_memarena_free(struct MemArena *ma) ATTR_NONNULL(1); void BLI_memarena_use_malloc(struct MemArena *ma) ATTR_NONNULL(1); void BLI_memarena_use_calloc(struct MemArena *ma) ATTR_NONNULL(1); -void BLI_memarena_use_align(struct MemArena *ma, const int align) ATTR_NONNULL(1); -void *BLI_memarena_alloc(struct MemArena *ma, int size) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1) ATTR_MALLOC ATTR_ALLOC_SIZE(2); +void BLI_memarena_use_align(struct MemArena *ma, const size_t align) ATTR_NONNULL(1); +void *BLI_memarena_alloc(struct MemArena *ma, size_t size) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1) ATTR_MALLOC ATTR_ALLOC_SIZE(2); +void *BLI_memarena_calloc(struct MemArena *ma, size_t size) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1) ATTR_MALLOC ATTR_ALLOC_SIZE(2); void BLI_memarena_clear(MemArena *ma) ATTR_NONNULL(1); 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); } } diff --git a/source/blender/blenlib/intern/polyfill2d.c b/source/blender/blenlib/intern/polyfill2d.c index 088ac761b99..287a0909870 100644 --- a/source/blender/blenlib/intern/polyfill2d.c +++ b/source/blender/blenlib/intern/polyfill2d.c @@ -421,8 +421,8 @@ void BLI_polyfill_calc_arena( struct MemArena *arena) { - unsigned int *indicies = BLI_memarena_alloc(arena, (int)(sizeof(*indicies) * coords_tot)); - eSign *coords_sign = BLI_memarena_alloc(arena, (int)(sizeof(*coords_sign) * coords_tot)); + unsigned int *indicies = BLI_memarena_alloc(arena, sizeof(*indicies) * coords_tot); + eSign *coords_sign = BLI_memarena_alloc(arena, sizeof(*coords_sign) * coords_tot); BLI_polyfill_calc_ex( coords, coords_tot, |