[Bf-blender-cvs] [3acc1ba] master: Add macro BLI_SMALLSTACK_AS_TABLE

Campbell Barton noreply at git.blender.org
Wed Apr 29 16:00:07 CEST 2015


Commit: 3acc1ba49c95786841608c0b516a7fd0879bad76
Author: Campbell Barton
Date:   Wed Apr 29 23:54:32 2015 +1000
Branches: master
https://developer.blender.org/rB3acc1ba49c95786841608c0b516a7fd0879bad76

Add macro BLI_SMALLSTACK_AS_TABLE

Use for edge-split (a little less overhead compare to popping each item).

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

M	source/blender/blenlib/BLI_linklist_stack.h
M	source/blender/bmesh/intern/bmesh_core.c

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

diff --git a/source/blender/blenlib/BLI_linklist_stack.h b/source/blender/blenlib/BLI_linklist_stack.h
index 9ac233a..a4b8f77 100644
--- a/source/blender/blenlib/BLI_linklist_stack.h
+++ b/source/blender/blenlib/BLI_linklist_stack.h
@@ -168,6 +168,16 @@
 #define BLI_SMALLSTACK_IS_EMPTY(var) \
 	((_BLI_SMALLSTACK_CAST(var) _##var##_stack) == NULL)
 
+/* fill in a lookup table */
+#define BLI_SMALLSTACK_AS_TABLE(var, data) \
+{ \
+	LinkNode *_##var##_iter; \
+	unsigned int i; \
+	for (_##var##_iter = _##var##_stack, i = 0; _##var##_iter; _##var##_iter = _##var##_iter->next, i++) { \
+		(data)[i] = _BLI_SMALLSTACK_CAST(var) (_##var##_iter->link); \
+	} \
+} ((void)0)
+
 /* loop over stack members last-added-first */
 #define BLI_SMALLSTACK_ITER_BEGIN(var, item) \
 	{ \
diff --git a/source/blender/bmesh/intern/bmesh_core.c b/source/blender/bmesh/intern/bmesh_core.c
index 558d41c..3266ee0 100644
--- a/source/blender/bmesh/intern/bmesh_core.c
+++ b/source/blender/bmesh/intern/bmesh_core.c
@@ -2209,18 +2209,12 @@ void bmesh_vert_separate(
 
 	if (r_vout != NULL) {
 		BMVert **verts;
-		int i;
 
 		verts = MEM_mallocN(sizeof(BMVert *) * verts_num, __func__);
-		verts[0] = v;
-
-		for (i = 1; i < verts_num; i++) {
-			verts[i] = BLI_SMALLSTACK_POP(verts_new);
-			BLI_assert(verts[i] != NULL);
-		}
-		BLI_assert(BLI_SMALLSTACK_POP(verts_new) == NULL);
-
 		*r_vout = verts;
+
+		verts[0] = v;
+		BLI_SMALLSTACK_AS_TABLE(verts_new, &verts[1]);
 	}
 }




More information about the Bf-blender-cvs mailing list