[Bf-blender-cvs] [f64ae4c] master: MemArena: use size_t instead of int for alloc args and internal storage.

Campbell Barton noreply at git.blender.org
Mon Dec 2 07:53:29 CET 2013


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;
 		}




More information about the Bf-blender-cvs mailing list