diff options
author | Campbell Barton <ideasman42@gmail.com> | 2014-09-24 12:45:23 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2014-09-24 12:45:23 +0400 |
commit | ff0b24c4e23dfa050327af3000ef8902577f792d (patch) | |
tree | 8beccae8e50554a4374fa8acdc5f1301f3c5c59c /source/blender/bmesh/intern/bmesh_structure.c | |
parent | 3c0605c0efd136ef08d168412fb728a6f5b86126 (diff) |
BMesh: slight speedup loop-of-verts iterator
Diffstat (limited to 'source/blender/bmesh/intern/bmesh_structure.c')
-rw-r--r-- | source/blender/bmesh/intern/bmesh_structure.c | 25 |
1 files changed, 22 insertions, 3 deletions
diff --git a/source/blender/bmesh/intern/bmesh_structure.c b/source/blender/bmesh/intern/bmesh_structure.c index d8313dab36f..3e8002c0192 100644 --- a/source/blender/bmesh/intern/bmesh_structure.c +++ b/source/blender/bmesh/intern/bmesh_structure.c @@ -108,6 +108,7 @@ bool bmesh_edge_swapverts(BMEdge *e, BMVert *v_orig, BMVert *v_new) * - #bmesh_radial_append * - #bmesh_radial_loop_remove * - #bmesh_radial_facevert_count + * - #bmesh_radial_facevert_check * - #bmesh_radial_faceloop_find_first * - #bmesh_radial_faceloop_find_next * - #bmesh_radial_validate @@ -265,7 +266,7 @@ BMEdge *bmesh_disk_faceedge_find_first(const BMEdge *e, const BMVert *v) { const BMEdge *e_find = e; do { - if (e_find->l && bmesh_radial_facevert_count(e_find->l, v)) { + if (e_find->l && bmesh_radial_facevert_check(e_find->l, v)) { return (BMEdge *)e_find; } } while ((e_find = bmesh_disk_edge_next(e_find, v)) != e); @@ -275,10 +276,10 @@ BMEdge *bmesh_disk_faceedge_find_first(const BMEdge *e, const BMVert *v) BMEdge *bmesh_disk_faceedge_find_next(const BMEdge *e, const BMVert *v) { - BMEdge *e_find = NULL; + BMEdge *e_find; e_find = bmesh_disk_edge_next(e, v); do { - if (e_find->l && bmesh_radial_facevert_count(e_find->l, v)) { + if (e_find->l && bmesh_radial_facevert_check(e_find->l, v)) { return e_find; } } while ((e_find = bmesh_disk_edge_next(e_find, v)) != e); @@ -455,6 +456,24 @@ int bmesh_radial_facevert_count(const BMLoop *l, const BMVert *v) return count; } +/** + * \brief RADIAL CHECK FACE VERT + * + * Quicker check for ``bmesh_radial_facevert_count(...) != 0`` + */ +bool bmesh_radial_facevert_check(const BMLoop *l, const BMVert *v) +{ + const BMLoop *l_iter; + l_iter = l; + do { + if (l_iter->v == v) { + return true; + } + } while ((l_iter = l_iter->radial_next) != l); + + return false; +} + /*****loop cycle functions, e.g. loops surrounding a face**** */ bool bmesh_loop_validate(BMFace *f) { |