[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [40153] branches/bmesh/blender/source/ blender/bmesh/intern/bmesh_construct.c: replace BLI_arrays with simple malloc'd arrays since the size is known.
Campbell Barton
ideasman42 at gmail.com
Mon Sep 12 07:51:05 CEST 2011
Revision: 40153
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=40153
Author: campbellbarton
Date: 2011-09-12 05:51:04 +0000 (Mon, 12 Sep 2011)
Log Message:
-----------
replace BLI_arrays with simple malloc'd arrays since the size is known. add asserts to ensure the size is correct.
Modified Paths:
--------------
branches/bmesh/blender/source/blender/bmesh/intern/bmesh_construct.c
Modified: branches/bmesh/blender/source/blender/bmesh/intern/bmesh_construct.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/intern/bmesh_construct.c 2011-09-12 05:24:45 UTC (rev 40152)
+++ branches/bmesh/blender/source/blender/bmesh/intern/bmesh_construct.c 2011-09-12 05:51:04 UTC (rev 40153)
@@ -465,14 +465,11 @@
{
BMesh *bm;
BMVert *v, *v2, **vtable = NULL;
- BLI_array_declare(vtable);
BMEdge *e, *e2, **edges = NULL, **etable = NULL;
BLI_array_declare(edges);
- BLI_array_declare(etable);
BMLoop *l, /* *l2,*/ **loops = NULL;
BLI_array_declare(loops);
BMFace *f, *f2, **ftable = NULL;
- BLI_array_declare(ftable);
BMEditSelection *ese;
BMIter iter, liter;
int allocsize[4] = {512,512,2048,512}, numTex, numCol;
@@ -495,17 +492,20 @@
numTex = CustomData_number_of_layers(&bm->pdata, CD_MTEXPOLY);
numCol = CustomData_number_of_layers(&bm->ldata, CD_MLOOPCOL);
+ vtable= MEM_mallocN(sizeof(BMVert *) * bmold->totvert, "BM_Copy_Mesh vtable");
+ etable= MEM_mallocN(sizeof(BMEdge *) * bmold->totedge, "BM_Copy_Mesh etable");
+ ftable= MEM_mallocN(sizeof(BMFace *) * bmold->totface, "BM_Copy_Mesh ftable");
+
v = BMIter_New(&iter, bmold, BM_VERTS_OF_MESH, NULL);
for (i=0; v; v=BMIter_Step(&iter), i++) {
v2 = BM_Make_Vert(bm, v->co, NULL); /* copy between meshes so cant use 'example' argument */
BM_Copy_Attributes(bmold, bm, v, v2);
- BLI_array_growone(vtable);
-
- vtable[BLI_array_count(vtable)-1] = v2;
-
+ vtable[i] = v2;
BM_SetIndex(v, i);
BM_SetIndex(v2, i);
}
+ /* safety check */
+ BLI_assert(i == bmold->totvert);
e = BMIter_New(&iter, bmold, BM_EDGES_OF_MESH, NULL);
for (i=0; e; e=BMIter_Step(&iter), i++) {
@@ -513,12 +513,12 @@
vtable[BM_GetIndex(e->v2)], e, 0);
BM_Copy_Attributes(bmold, bm, e, e2);
- BLI_array_growone(etable);
- etable[BLI_array_count(etable)-1] = e2;
-
+ etable[i] = e2;
BM_SetIndex(e, i);
BM_SetIndex(e2, i);
}
+ /* safety check */
+ BLI_assert(i == bmold->totedge);
f = BMIter_New(&iter, bmold, BM_FACES_OF_MESH, NULL);
for (i=0; f; f=BMIter_Step(&iter), i++) {
@@ -543,11 +543,10 @@
f2 = BM_Make_Ngon(bm, v, v2, edges, f->len, 0);
if (!f2)
continue;
-
+
BM_SetIndex(f, i);
- BLI_array_growone(ftable);
ftable[i] = f2;
-
+
BM_Copy_Attributes(bmold, bm, f, f2);
copy_v3_v3(f2->no, f->no);
@@ -558,6 +557,8 @@
if (f == bmold->act_face) bm->act_face = f2;
}
+ /* safety check */
+ BLI_assert(i == bmold->totface);
/*copy over edit selection history*/
for (ese=bmold->selected.first; ese; ese=ese->next) {
@@ -575,9 +576,9 @@
BM_store_selection(bm, ele);
}
- BLI_array_free(etable);
- BLI_array_free(vtable);
- BLI_array_free(ftable);
+ MEM_freeN(etable);
+ MEM_freeN(vtable);
+ MEM_freeN(ftable);
BLI_array_free(loops);
BLI_array_free(edges);
More information about the Bf-blender-cvs
mailing list