diff options
author | Campbell Barton <ideasman42@gmail.com> | 2014-09-24 08:55:30 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2014-09-24 08:55:30 +0400 |
commit | 3c0605c0efd136ef08d168412fb728a6f5b86126 (patch) | |
tree | 5a44e8503dfca6e0abd02778576ac007275584c5 /source/blender | |
parent | 059e0dafb41010b440f31323acbb93e61e72efdd (diff) |
BMesh: generic callbacks for mempool iterator
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/bmesh/intern/bmesh_iterators.c | 42 | ||||
-rw-r--r-- | source/blender/bmesh/intern/bmesh_iterators.h | 19 | ||||
-rw-r--r-- | source/blender/bmesh/intern/bmesh_iterators_inline.h | 18 |
3 files changed, 17 insertions, 62 deletions
diff --git a/source/blender/bmesh/intern/bmesh_iterators.c b/source/blender/bmesh/intern/bmesh_iterators.c index 91b9774634d..476878ad38c 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 fdf0f27f05f..78600c00af3 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 b9733d4702f..d3e18b97acb 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); |