Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2012-11-27 04:50:59 +0400
committerCampbell Barton <ideasman42@gmail.com>2012-11-27 04:50:59 +0400
commitf8bc346effae72fc9ef27e3e750f4983286a2012 (patch)
tree8652dd760db292616410f3c2e35f280be923ddd6 /source/blender/bmesh/intern/bmesh_operators.c
parentf9e339ef005144ace447d686c4cecaa66f40cf1c (diff)
bmesh/py operator api:
add type checking for element buffers, there was nothing stopping python from passing any element type into an argument when in some cases only verts/edges/faces were expected. now operator args define which types they support.
Diffstat (limited to 'source/blender/bmesh/intern/bmesh_operators.c')
-rw-r--r--source/blender/bmesh/intern/bmesh_operators.c30
1 files changed, 21 insertions, 9 deletions
diff --git a/source/blender/bmesh/intern/bmesh_operators.c b/source/blender/bmesh/intern/bmesh_operators.c
index 83fd338ef1f..f1bf4fd4d37 100644
--- a/source/blender/bmesh/intern/bmesh_operators.c
+++ b/source/blender/bmesh/intern/bmesh_operators.c
@@ -884,6 +884,7 @@ static void bmo_slot_buffer_from_flag(BMesh *bm, BMOperator *op,
totelement = BMO_mesh_disabled_flag_count(bm, htype, oflag);
BLI_assert(slot->slot_type == BMO_OP_SLOT_ELEMENT_BUF);
+ BLI_assert(((slot->slot_subtype.elem & BM_ALL_NOLOOP) & htype) == htype);
if (totelement) {
BMIter iter;
@@ -959,6 +960,7 @@ void BMO_slot_buffer_hflag_enable(BMesh *bm,
const char do_flush_hide = (do_flush && (hflag & BM_ELEM_HIDDEN));
BLI_assert(slot->slot_type == BMO_OP_SLOT_ELEMENT_BUF);
+ BLI_assert(((slot->slot_subtype.elem & BM_ALL_NOLOOP) & htype) == htype);
for (i = 0; i < slot->len; i++, data++) {
if (!(htype & (*data)->head.htype))
@@ -993,6 +995,7 @@ void BMO_slot_buffer_hflag_disable(BMesh *bm,
const char do_flush_hide = (do_flush && (hflag & BM_ELEM_HIDDEN));
BLI_assert(slot->slot_type == BMO_OP_SLOT_ELEMENT_BUF);
+ BLI_assert(((slot->slot_subtype.elem & BM_ALL_NOLOOP) & htype) == htype);
for (i = 0; i < slot->len; i++, data++) {
if (!(htype & (*data)->head.htype))
@@ -1043,6 +1046,7 @@ void BMO_slot_buffer_flag_enable(BMesh *bm,
int i;
BLI_assert(slot->slot_type == BMO_OP_SLOT_ELEMENT_BUF);
+ BLI_assert(((slot->slot_subtype.elem & BM_ALL_NOLOOP) & htype) == htype);
for (i = 0; i < slot->len; i++) {
if (!(htype & data[i]->htype))
@@ -1066,6 +1070,7 @@ void BMO_slot_buffer_flag_disable(BMesh *bm,
int i;
BLI_assert(slot->slot_type == BMO_OP_SLOT_ELEMENT_BUF);
+ BLI_assert(((slot->slot_subtype.elem & BM_ALL_NOLOOP) & htype) == htype);
for (i = 0; i < slot->len; i++) {
if (!(htype & data[i]->htype))
@@ -1256,25 +1261,29 @@ void *BMO_iter_new(BMOIter *iter,
void *BMO_iter_step(BMOIter *iter)
{
- if (iter->slot->slot_type == BMO_OP_SLOT_ELEMENT_BUF) {
- BMHeader *h;
+ BMOpSlot *slot = iter->slot;
+ if (slot->slot_type == BMO_OP_SLOT_ELEMENT_BUF) {
+ BMHeader *ele;
- if (iter->cur >= iter->slot->len) {
+ if (iter->cur >= slot->len) {
return NULL;
}
- h = iter->slot->data.buf[iter->cur++];
- while (!(iter->restrictmask & h->htype)) {
- if (iter->cur >= iter->slot->len) {
+ ele = slot->data.buf[iter->cur++];
+ while (!(iter->restrictmask & ele->htype)) {
+ if (iter->cur >= slot->len) {
return NULL;
}
- h = iter->slot->data.buf[iter->cur++];
+ ele = slot->data.buf[iter->cur++];
+ BLI_assert((ele == NULL) || (slot->slot_subtype.elem & ele->htype));
}
- return h;
+ BLI_assert((ele == NULL) || (slot->slot_subtype.elem & ele->htype));
+
+ return ele;
}
- else if (iter->slot->slot_type == BMO_OP_SLOT_MAPPING) {
+ else if (slot->slot_type == BMO_OP_SLOT_MAPPING) {
BMOElemMapping *map;
void *ret = BLI_ghashIterator_getKey(&iter->giter);
map = BLI_ghashIterator_getValue(&iter->giter);
@@ -1285,6 +1294,9 @@ void *BMO_iter_step(BMOIter *iter)
return ret;
}
+ else {
+ BLI_assert(0);
+ }
return NULL;
}