Add macro BLI_SMALLSTACK_AS_TABLE
authorCampbell Barton <ideasman42@gmail.com>
Wed, 29 Apr 2015 13:54:32 +0000 (23:54 +1000)
committerCampbell Barton <ideasman42@gmail.com>
Wed, 29 Apr 2015 13:59:48 +0000 (23:59 +1000)
Use for edge-split (a little less overhead compare to popping each item).

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

index 9ac233a8fa4a2722edb9de2ea4326a07a8aa5c65..a4b8f77bfa6c8f7b234c501ddc0dd28054d2d1da 100644 (file)
 #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) \
        { \
index 558d41c12be8bccdcad44d01e0a7359c9a19d80a..3266ee0394dbd3853282d0ad858ef329795da32a 100644 (file)
@@ -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]);
        }
 }