diff options
author | Campbell Barton <ideasman42@gmail.com> | 2015-04-29 16:54:32 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2015-04-29 16:59:48 +0300 |
commit | 3acc1ba49c95786841608c0b516a7fd0879bad76 (patch) | |
tree | 5e8ed01aa9716eb42d9f38bdca1e0c6df31c9455 | |
parent | d6b28bbb1d61f059ec28156fb275393ee3389d57 (diff) |
Add macro BLI_SMALLSTACK_AS_TABLE
Use for edge-split (a little less overhead compare to popping each item).
-rw-r--r-- | source/blender/blenlib/BLI_linklist_stack.h | 10 | ||||
-rw-r--r-- | source/blender/bmesh/intern/bmesh_core.c | 12 |
2 files changed, 13 insertions, 9 deletions
diff --git a/source/blender/blenlib/BLI_linklist_stack.h b/source/blender/blenlib/BLI_linklist_stack.h index 9ac233a8fa4..a4b8f77bfa6 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 558d41c12be..3266ee0394d 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]); } } |