[Bf-blender-cvs] [e3d6269] master: BMesh: replace BLI_array -> BLI_stack

Campbell Barton noreply at git.blender.org
Sun Jun 21 01:51:08 CEST 2015


Commit: e3d6269ec4b74bf6a210396b3d733f88f30e2394
Author: Campbell Barton
Date:   Sun Jun 21 09:46:12 2015 +1000
Branches: master
https://developer.blender.org/rBe3d6269ec4b74bf6a210396b3d733f88f30e2394

BMesh: replace BLI_array -> BLI_stack

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

M	source/blender/editors/mesh/editmesh_loopcut.c

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

diff --git a/source/blender/editors/mesh/editmesh_loopcut.c b/source/blender/editors/mesh/editmesh_loopcut.c
index c7f9522..ec9ecd6 100644
--- a/source/blender/editors/mesh/editmesh_loopcut.c
+++ b/source/blender/editors/mesh/editmesh_loopcut.c
@@ -32,7 +32,7 @@
 
 #include "MEM_guardedalloc.h"
 
-#include "BLI_array.h"
+#include "BLI_stack.h"
 #include "BLI_string.h"
 #include "BLI_math.h"
 
@@ -224,7 +224,8 @@ static void edgering_preview_calc_edges(RingSelOpData *lcd, DerivedMesh *dm, con
 	BMEdge *eed, *eed_last;
 	BMVert *v[2][2] = {{NULL}}, *v_last;
 	float (*edges)[2][3] = NULL;
-	BLI_array_declare(edges);
+	BLI_Stack *edge_stack;
+
 	int i, tot = 0;
 
 	BMW_init(&walker, bm, BMW_EDGERING,
@@ -232,10 +233,24 @@ static void edgering_preview_calc_edges(RingSelOpData *lcd, DerivedMesh *dm, con
 	         BMW_FLAG_TEST_HIDDEN,
 	         BMW_NIL_LAY);
 
+
+	edge_stack = BLI_stack_new(sizeof(BMEdge *), __func__);
+
+	eed_last = NULL;
+	for (eed = eed_start = BMW_begin(&walker, eed_start); eed; eed = BMW_step(&walker)) {
+		BLI_stack_push(edge_stack, &eed);
+		eed_last = eed;
+	}
+
+	edges = MEM_mallocN(
+	        (sizeof(*edges) * (BLI_stack_count(edge_stack) + (eed_last != eed_start))) * previewlines, __func__);
+
 	v_last   = NULL;
 	eed_last = NULL;
 
-	for (eed = eed_start = BMW_begin(&walker, eed_start); eed; eed = BMW_step(&walker)) {
+	while (!BLI_stack_is_empty(edge_stack)) {
+		BLI_stack_pop(edge_stack, &eed);
+
 		if (eed_last) {
 			if (v_last) {
 				v[1][0] = v[0][0];
@@ -250,8 +265,6 @@ static void edgering_preview_calc_edges(RingSelOpData *lcd, DerivedMesh *dm, con
 			edgering_find_order(eed_last, eed, v_last, v);
 			v_last = v[0][0];
 
-			BLI_array_grow_items(edges, previewlines);
-
 			for (i = 1; i <= previewlines; i++) {
 				const float fac = (i / ((float)previewlines + 1));
 				float v_cos[2][2][3];
@@ -279,8 +292,6 @@ static void edgering_preview_calc_edges(RingSelOpData *lcd, DerivedMesh *dm, con
 
 		edgering_find_order(eed_last, eed_start, v_last, v);
 
-		BLI_array_grow_items(edges, previewlines);
-
 		for (i = 1; i <= previewlines; i++) {
 			const float fac = (i / ((float)previewlines + 1));
 			float v_cos[2][2][3];
@@ -297,6 +308,8 @@ static void edgering_preview_calc_edges(RingSelOpData *lcd, DerivedMesh *dm, con
 		}
 	}
 
+	BLI_stack_free(edge_stack);
+
 	BMW_end(&walker);
 	lcd->edges = edges;
 	lcd->totedge = tot;




More information about the Bf-blender-cvs mailing list