Commit: f64ae4cbe5a724496624de9e479c04f325613be5
Author: Campbell Barton
Date:   Mon Dec 2 17:46:19 2013 +1100
http://developer.blender.org/rBf64ae4cbe5a724496624de9e479c04f325613be5

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.

===================================================================

M       source/blender/blenkernel/intern/mesh_evaluate.c
M       source/blender/blenlib/BLI_memarena.h
M       source/blender/blenlib/intern/BLI_memarena.c
M       source/blender/blenlib/intern/polyfill2d.c
M       source/blender/editors/sculpt_paint/paint_image_proj.c

===================================================================

diff --git a/source/blender/blenkernel/intern/mesh_evaluate.c 
b/source/blender/blenkernel/intern/mesh_evaluate.c
index adc71e7..0a85d2b 100644
--- a/source/blender/blenkernel/intern/mesh_evaluate.c
+++ b/source/blender/blenkernel/intern/mesh_evaluate.c
@@ -1387,8 +1387,8 @@ int BKE_mesh_recalc_tessellation(CustomData *fdata,
                                arena = 
BLI_memarena_new(BLI_MEMARENA_STD_BUFSIZE, __func__);
                        }
 
-                       tris = BLI_memarena_alloc(arena, (int)sizeof(*tris) * 
totfilltri);
-                       projverts = BLI_memarena_alloc(arena, 
(int)sizeof(*projverts) * mp->totloop);
+                       tris = BLI_memarena_alloc(arena, sizeof(*tris) * 
(size_t)totfilltri);
+                       projverts = BLI_memarena_alloc(arena, 
sizeof(*projverts) * (size_t)mp->totloop);
 
                        zero_v3(normal);
 
diff --git a/source/blender/blenlib/BLI_memarena.h 
b/source/blender/blenlib/BLI_memarena.h
index 737324e..8d5a765 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 4a67122..ce04ac6 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 088ac76..287a090 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,
diff --git a/source/blender/editors/sculpt_paint/paint_image_proj.c 
b/source/blender/editors/sculpt_paint/paint_image_proj.c
index 88cc954..59f398a 100644
--- a/source/blender/editors/sculpt_paint/paint_image_proj.c
+++ b/source/blender/editors/sculpt_paint/paint_image_proj.c
@@ -3294,8 +3294,7 @@ static void project_paint_begin(ProjPaintState *ps)
                projIma->ima = node->link;
                projIma->touch = 0;
                projIma->ibuf = BKE_image_acquire_ibuf(projIma->ima, NULL, 
NULL);
-               projIma->partRedrawRect =  BLI_memarena_alloc(arena, 
sizeof(ImagePaintPartialRedraw) * PROJ_BOUNDBOX_SQUARED);
-               memset(projIma->partRedrawRect, 0, 
sizeof(ImagePaintPartialRedraw) * PROJ_BOUNDBOX_SQUARED);
+               projIma->partRedrawRect =  BLI_memarena_calloc(arena, 
sizeof(ImagePaintPartialRedraw) * PROJ_BOUNDBOX_SQUARED);
        }
 
        /* we have built the array, discard the linked list */
@@ -3344,8 +3343,7 @@ static void project_paint_end(ProjPaintState *ps)
 
                for (a = 0, last_projIma = ps->projImages; a < ps->image_tot; 
a++, last_projIma++) {
                        int size = sizeof(void **) * 
IMAPAINT_TILE_NUMBER(last_projIma->ibuf->x) * 
IMAPAINT_TILE_NUMBER(last_projIma->ibuf->y);
-                       last_projIma->undoRect = (void **) 
BLI_memarena_alloc(arena, size);
-                       memset(last_projIma->undoRect, 0, size);
+                       last_projIma->undoRect = (void **) 
BLI_memarena_calloc(arena, size);
                        last_projIma->ibuf->userflags |= IB_BITMAPDIRTY;
                }

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to