Commit: 3c0605c0efd136ef08d168412fb728a6f5b86126
Author: Campbell Barton
Date:   Wed Sep 24 14:55:30 2014 +1000
Branches: master
https://developer.blender.org/rB3c0605c0efd136ef08d168412fb728a6f5b86126

BMesh: generic callbacks for mempool iterator

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

M       source/blender/bmesh/intern/bmesh_iterators.c
M       source/blender/bmesh/intern/bmesh_iterators.h
M       source/blender/bmesh/intern/bmesh_iterators_inline.h

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

diff --git a/source/blender/bmesh/intern/bmesh_iterators.c 
b/source/blender/bmesh/intern/bmesh_iterators.c
index 91b9774..476878a 100644
--- a/source/blender/bmesh/intern/bmesh_iterators.c
+++ b/source/blender/bmesh/intern/bmesh_iterators.c
@@ -338,50 +338,18 @@ int BM_iter_mesh_count_flag(const char itype, BMesh *bm, 
const char hflag, const
 #  define USE_IMMUTABLE_ASSERT
 #endif
 
-void bmiter__vert_of_mesh_begin(struct BMIter__vert_of_mesh *iter)
+void bmiter__elem_of_mesh_begin(struct BMIter__elem_of_mesh *iter)
 {
 #ifdef USE_IMMUTABLE_ASSERT
-       ((BMIter *)iter)->count = iter->bm->totvert;
+       ((BMIter *)iter)->count = BLI_mempool_count(iter->pooliter.pool);
 #endif
-       BLI_mempool_iternew(iter->bm->vpool, &iter->pooliter);
+       BLI_mempool_iternew(iter->pooliter.pool, &iter->pooliter);
 }
 
-void *bmiter__vert_of_mesh_step(struct BMIter__vert_of_mesh *iter)
+void *bmiter__elem_of_mesh_step(struct BMIter__elem_of_mesh *iter)
 {
 #ifdef USE_IMMUTABLE_ASSERT
-       BLI_assert(((BMIter *)iter)->count <= iter->bm->totvert);
-#endif
-       return BLI_mempool_iterstep(&iter->pooliter);
-}
-
-void bmiter__edge_of_mesh_begin(struct BMIter__edge_of_mesh *iter)
-{
-#ifdef USE_IMMUTABLE_ASSERT
-       ((BMIter *)iter)->count = iter->bm->totedge;
-#endif
-       BLI_mempool_iternew(iter->bm->epool, &iter->pooliter);
-}
-
-void  *bmiter__edge_of_mesh_step(struct BMIter__edge_of_mesh *iter)
-{
-#ifdef USE_IMMUTABLE_ASSERT
-       BLI_assert(((BMIter *)iter)->count <= iter->bm->totedge);
-#endif
-       return BLI_mempool_iterstep(&iter->pooliter);
-}
-
-void  bmiter__face_of_mesh_begin(struct BMIter__face_of_mesh *iter)
-{
-#ifdef USE_IMMUTABLE_ASSERT
-       ((BMIter *)iter)->count = iter->bm->totface;
-#endif
-       BLI_mempool_iternew(iter->bm->fpool, &iter->pooliter);
-}
-
-void  *bmiter__face_of_mesh_step(struct BMIter__face_of_mesh *iter)
-{
-#ifdef USE_IMMUTABLE_ASSERT
-       BLI_assert(((BMIter *)iter)->count <= iter->bm->totface);
+       BLI_assert(((BMIter *)iter)->count <= 
BLI_mempool_count(iter->pooliter.pool));
 #endif
        return BLI_mempool_iterstep(&iter->pooliter);
 }
diff --git a/source/blender/bmesh/intern/bmesh_iterators.h 
b/source/blender/bmesh/intern/bmesh_iterators.h
index fdf0f27..78600c0 100644
--- a/source/blender/bmesh/intern/bmesh_iterators.h
+++ b/source/blender/bmesh/intern/bmesh_iterators.h
@@ -110,16 +110,7 @@ extern const char bm_iter_itype_htype_map[BM_ITYPE_MAX];
        for (ele = BM_iter_new(iter, NULL, itype, data), indexvar = 0; ele; ele 
= BM_iter_step(iter), (indexvar)++)
 
 /* iterator type structs */
-struct BMIter__vert_of_mesh {
-       BMesh *bm;
-       BLI_mempool_iter pooliter;
-};
-struct BMIter__edge_of_mesh {
-       BMesh *bm;
-       BLI_mempool_iter pooliter;
-};
-struct BMIter__face_of_mesh {
-       BMesh *bm;
+struct BMIter__elem_of_mesh {
        BLI_mempool_iter pooliter;
 };
 struct BMIter__edge_of_vert {
@@ -173,9 +164,7 @@ typedef void *(*BMIter__step_cb) (void *);
 typedef struct BMIter {
        /* keep union first */
        union {
-               struct BMIter__vert_of_mesh vert_of_mesh;
-               struct BMIter__edge_of_mesh edge_of_mesh;
-               struct BMIter__face_of_mesh face_of_mesh;
+               struct BMIter__elem_of_mesh elem_of_mesh;
 
                struct BMIter__edge_of_vert edge_of_vert;
                struct BMIter__face_of_vert face_of_vert;
@@ -219,9 +208,7 @@ int     BM_iter_mesh_count_flag(const char itype, BMesh 
*bm, const char hflag, c
        void  bmiter__##name##_begin(struct BMIter__##name *iter); \
        void *bmiter__##name##_step(struct BMIter__##name *iter)
 
-BMITER_CB_DEF(vert_of_mesh);
-BMITER_CB_DEF(edge_of_mesh);
-BMITER_CB_DEF(face_of_mesh);
+BMITER_CB_DEF(elem_of_mesh);
 BMITER_CB_DEF(edge_of_vert);
 BMITER_CB_DEF(face_of_vert);
 BMITER_CB_DEF(loop_of_vert);
diff --git a/source/blender/bmesh/intern/bmesh_iterators_inline.h 
b/source/blender/bmesh/intern/bmesh_iterators_inline.h
index b9733d4..d3e18b9 100644
--- a/source/blender/bmesh/intern/bmesh_iterators_inline.h
+++ b/source/blender/bmesh/intern/bmesh_iterators_inline.h
@@ -60,23 +60,23 @@ BLI_INLINE bool BM_iter_init(BMIter *iter, BMesh *bm, const 
char itype, void *da
                case BM_VERTS_OF_MESH:
                        BLI_assert(bm != NULL);
                        BLI_assert(data == NULL);
-                       iter->begin = 
(BMIter__begin_cb)bmiter__vert_of_mesh_begin;
-                       iter->step  = 
(BMIter__step_cb)bmiter__vert_of_mesh_step;
-                       iter->data.vert_of_mesh.bm = bm;
+                       iter->begin = 
(BMIter__begin_cb)bmiter__elem_of_mesh_begin;
+                       iter->step  = 
(BMIter__step_cb)bmiter__elem_of_mesh_step;
+                       iter->data.elem_of_mesh.pooliter.pool = bm->vpool;
                        break;
                case BM_EDGES_OF_MESH:
                        BLI_assert(bm != NULL);
                        BLI_assert(data == NULL);
-                       iter->begin = 
(BMIter__begin_cb)bmiter__edge_of_mesh_begin;
-                       iter->step  = 
(BMIter__step_cb)bmiter__edge_of_mesh_step;
-                       iter->data.edge_of_mesh.bm = bm;
+                       iter->begin = 
(BMIter__begin_cb)bmiter__elem_of_mesh_begin;
+                       iter->step  = 
(BMIter__step_cb)bmiter__elem_of_mesh_step;
+                       iter->data.elem_of_mesh.pooliter.pool = bm->epool;
                        break;
                case BM_FACES_OF_MESH:
                        BLI_assert(bm != NULL);
                        BLI_assert(data == NULL);
-                       iter->begin = 
(BMIter__begin_cb)bmiter__face_of_mesh_begin;
-                       iter->step  = 
(BMIter__step_cb)bmiter__face_of_mesh_step;
-                       iter->data.face_of_mesh.bm = bm;
+                       iter->begin = 
(BMIter__begin_cb)bmiter__elem_of_mesh_begin;
+                       iter->step  = 
(BMIter__step_cb)bmiter__elem_of_mesh_step;
+                       iter->data.elem_of_mesh.pooliter.pool = bm->fpool;
                        break;
                case BM_EDGES_OF_VERT:
                        BLI_assert(data != NULL);

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to