[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [52552] trunk/blender/source/blender: use more rigid type checking for bmesh slot subtypes.

Campbell Barton ideasman42 at gmail.com
Mon Nov 26 04:16:38 CET 2012


Revision: 52552
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=52552
Author:   campbellbarton
Date:     2012-11-26 03:16:29 +0000 (Mon, 26 Nov 2012)
Log Message:
-----------
use more rigid type checking for bmesh slot subtypes.

Modified Paths:
--------------
    trunk/blender/source/blender/bmesh/intern/bmesh_operator_api_inline.h
    trunk/blender/source/blender/bmesh/intern/bmesh_operators.c
    trunk/blender/source/blender/bmesh/operators/bmo_dupe.c
    trunk/blender/source/blender/bmesh/operators/bmo_extrude.c
    trunk/blender/source/blender/bmesh/operators/bmo_mirror.c
    trunk/blender/source/blender/bmesh/operators/bmo_removedoubles.c
    trunk/blender/source/blender/bmesh/operators/bmo_triangulate.c
    trunk/blender/source/blender/editors/mesh/editmesh_tools.c
    trunk/blender/source/blender/modifiers/intern/MOD_array.c
    trunk/blender/source/blender/modifiers/intern/MOD_skin.c

Modified: trunk/blender/source/blender/bmesh/intern/bmesh_operator_api_inline.h
===================================================================
--- trunk/blender/source/blender/bmesh/intern/bmesh_operator_api_inline.h	2012-11-26 02:41:46 UTC (rev 52551)
+++ trunk/blender/source/blender/bmesh/intern/bmesh_operator_api_inline.h	2012-11-26 03:16:29 UTC (rev 52552)
@@ -72,12 +72,22 @@
 BLI_INLINE void BMO_slot_map_int_insert(BMOperator *op, BMOpSlot *slot,
                                         void *element, int val)
 {
+	BLI_assert(slot->slot_subtype == BMO_OP_SLOT_SUBTYPE_MAP_INT);
 	BMO_slot_map_insert(op, slot, element, &val, sizeof(int));
 }
 
+BLI_INLINE void BMO_slot_map_bool_insert(BMOperator *op, BMOpSlot *slot,
+                                        void *element, int val)
+{
+	BLI_assert(slot->slot_subtype == BMO_OP_SLOT_SUBTYPE_MAP_BOOL);
+	BLI_assert(val == FALSE || val == TRUE);
+	BMO_slot_map_insert(op, slot, element, &val, sizeof(int));
+}
+
 BLI_INLINE void BMO_slot_map_float_insert(BMOperator *op, BMOpSlot *slot,
                                           void *element, float val)
 {
+	BLI_assert(slot->slot_subtype == BMO_OP_SLOT_SUBTYPE_MAP_FLOAT);
 	BMO_slot_map_insert(op, slot, element, &val, sizeof(float));
 }
 
@@ -90,9 +100,26 @@
 BLI_INLINE void BMO_slot_map_ptr_insert(BMOperator *op, BMOpSlot *slot,
                                         const void *element, void *val)
 {
+	BLI_assert(slot->slot_subtype == BMO_OP_SLOT_SUBTYPE_MAP_INTERNAL);
 	BMO_slot_map_insert(op, slot, element, &val, sizeof(void *));
 }
 
+BLI_INLINE void BMO_slot_map_elem_insert(BMOperator *op, BMOpSlot *slot,
+                                        const void *element, void *val)
+{
+	BLI_assert(slot->slot_subtype == BMO_OP_SLOT_SUBTYPE_MAP_ELEM);
+	BMO_slot_map_insert(op, slot, element, &val, sizeof(void *));
+}
+
+
+/* no values */
+BLI_INLINE void BMO_slot_map_empty_insert(BMOperator *op, BMOpSlot *slot,
+                                        const void *element)
+{
+	BLI_assert(slot->slot_subtype == BMO_OP_SLOT_SUBTYPE_MAP_EMPTY);
+	BMO_slot_map_insert(op, slot, element, NULL, 0);
+}
+
 BLI_INLINE int BMO_slot_map_contains(BMOpSlot *slot, const void *element)
 {
 	BLI_assert(slot->slot_type == BMO_OP_SLOT_MAPPING);
@@ -126,7 +153,10 @@
 
 BLI_INLINE float BMO_slot_map_float_get(BMOpSlot *slot, const void *element)
 {
-	float *val = (float *) BMO_slot_map_data_get(slot, element);
+	float *val;
+	BLI_assert(slot->slot_subtype == BMO_OP_SLOT_SUBTYPE_MAP_FLOAT);
+
+	val = (float *) BMO_slot_map_data_get(slot, element);
 	if (val) return *val;
 
 	return 0.0f;
@@ -134,18 +164,43 @@
 
 BLI_INLINE int BMO_slot_map_int_get(BMOpSlot *slot, const void *element)
 {
-	int *val = (int *) BMO_slot_map_data_get(slot, element);
+	int *val;
+	BLI_assert(slot->slot_subtype == BMO_OP_SLOT_SUBTYPE_MAP_INT);
+
+	val = (int *) BMO_slot_map_data_get(slot, element);
 	if (val) return *val;
 
 	return 0;
 }
 
-BLI_INLINE void *BMO_slot_map_ptr_get(BMOpSlot *slot, const void *element)
+BLI_INLINE int BMO_slot_map_bool_get(BMOpSlot *slot, const void *element)
 {
+	int *val;
+	BLI_assert(slot->slot_subtype == BMO_OP_SLOT_SUBTYPE_MAP_BOOL);
+
+	val = (int *) BMO_slot_map_data_get(slot, element);
+	BLI_assert(val == NULL || *val == FALSE || *val == TRUE);
+	if (val) return *val;
+
+	return 0;
+}
+
+BLI_INLINE void *BMO_slot_map_ptr_get_(BMOpSlot *slot, const void *element)
+{
 	void **val = (void **) BMO_slot_map_data_get(slot, element);
+	BLI_assert(slot->slot_subtype == BMO_OP_SLOT_SUBTYPE_MAP_INTERNAL);
 	if (val) return *val;
 
 	return NULL;
 }
 
+BLI_INLINE void *BMO_slot_map_elem_get(BMOpSlot *slot, const void *element)
+{
+	void **val = (void **) BMO_slot_map_data_get(slot, element);
+	BLI_assert(slot->slot_subtype == BMO_OP_SLOT_SUBTYPE_MAP_ELEM);
+	if (val) return *val;
+
+	return NULL;
+}
+
 #endif /* __BMESH_OPERATOR_API_INLINE_H__ */

Modified: trunk/blender/source/blender/bmesh/intern/bmesh_operators.c
===================================================================
--- trunk/blender/source/blender/bmesh/intern/bmesh_operators.c	2012-11-26 02:41:46 UTC (rev 52551)
+++ trunk/blender/source/blender/bmesh/intern/bmesh_operators.c	2012-11-26 03:16:29 UTC (rev 52552)
@@ -131,8 +131,9 @@
 {
 	unsigned int i;
 	for (i = 0; slot_types[i].type; i++) {
-		slot_args[i].slot_name = slot_types[i].name;
-		slot_args[i].slot_type = slot_types[i].type;
+		slot_args[i].slot_name    = slot_types[i].name;
+		slot_args[i].slot_type    = slot_types[i].type;
+		slot_args[i].slot_subtype = slot_types[i].subtype;
 		// slot_args[i].index = i;  // UNUSED
 	}
 }
@@ -610,6 +611,9 @@
 	if (!slot->data.ghash) {
 		slot->data.ghash = BLI_ghash_ptr_new("bmesh slot map hash");
 	}
+	else {
+		BLI_assert(slot->data.ghash);
+	}
 
 	BLI_ghash_insert(slot->data.ghash, (void *)element, mapping);
 }

Modified: trunk/blender/source/blender/bmesh/operators/bmo_dupe.c
===================================================================
--- trunk/blender/source/blender/bmesh/operators/bmo_dupe.c	2012-11-26 02:41:46 UTC (rev 52551)
+++ trunk/blender/source/blender/bmesh/operators/bmo_dupe.c	2012-11-26 03:16:29 UTC (rev 52552)
@@ -104,8 +104,7 @@
 	if (rlen < 2) {
 		/* not sure what non-manifold cases of greater then three
 		 * radial should do. */
-		BMO_slot_map_ptr_insert(op, slot_boundarymap_out,
-		                        source_edge, target_edge);
+		BMO_slot_map_elem_insert(op, slot_boundarymap_out, source_edge, target_edge);
 	}
 
 	/* Insert new edge into the edge hash */
@@ -158,8 +157,8 @@
 
 	/* create new face */
 	target_face = BM_face_create(target_mesh, vtar, edar, source_face->len, FALSE);
-	BMO_slot_map_ptr_insert(op, slot_facemap_out, source_face, target_face);
-	BMO_slot_map_ptr_insert(op, slot_facemap_out, target_face, source_face);
+	BMO_slot_map_elem_insert(op, slot_facemap_out, source_face, target_face);
+	BMO_slot_map_elem_insert(op, slot_facemap_out, target_face, source_face);
 
 	BM_elem_attrs_copy(source_mesh, target_mesh, source_face, target_face);
 
@@ -235,7 +234,7 @@
 			}
 
 			if (isolated) {
-				BMO_slot_map_ptr_insert(op, slot_isovertmap_out, v, v2);
+				BMO_slot_map_elem_insert(op, slot_isovertmap_out, v, v2);
 			}
 
 			BMO_elem_flag_enable(bm_src, v, DUPE_DONE);

Modified: trunk/blender/source/blender/bmesh/operators/bmo_extrude.c
===================================================================
--- trunk/blender/source/blender/bmesh/operators/bmo_extrude.c	2012-11-26 02:41:46 UTC (rev 52551)
+++ trunk/blender/source/blender/bmesh/operators/bmo_extrude.c	2012-11-26 03:16:29 UTC (rev 52552)
@@ -354,7 +354,7 @@
 
 	slot_facemap_out = BMO_slot_get(dupeop.slots_out, "facemap.out");
 	if (bm->act_face && BMO_elem_flag_test(bm, bm->act_face, EXT_INPUT)) {
-		bm->act_face = BMO_slot_map_ptr_get(slot_facemap_out, bm->act_face);
+		bm->act_face = BMO_slot_map_elem_get(slot_facemap_out, bm->act_face);
 	}
 
 	if (delorig) {

Modified: trunk/blender/source/blender/bmesh/operators/bmo_mirror.c
===================================================================
--- trunk/blender/source/blender/bmesh/operators/bmo_mirror.c	2012-11-26 02:41:46 UTC (rev 52551)
+++ trunk/blender/source/blender/bmesh/operators/bmo_mirror.c	2012-11-26 03:16:29 UTC (rev 52552)
@@ -92,7 +92,7 @@
 	v = BM_iter_new(&iter, bm, BM_VERTS_OF_MESH, NULL);
 	for (i = 0; i < ototvert; i++) {
 		if (fabsf(v->co[axis]) <= dist) {
-			BMO_slot_map_ptr_insert(&weldop, slot_targetmap, vmap[i], v);
+			BMO_slot_map_elem_insert(&weldop, slot_targetmap, vmap[i], v);
 		}
 		v = BM_iter_step(&iter);
 	}

Modified: trunk/blender/source/blender/bmesh/operators/bmo_removedoubles.c
===================================================================
--- trunk/blender/source/blender/bmesh/operators/bmo_removedoubles.c	2012-11-26 02:41:46 UTC (rev 52551)
+++ trunk/blender/source/blender/bmesh/operators/bmo_removedoubles.c	2012-11-26 03:16:29 UTC (rev 52552)
@@ -44,7 +44,7 @@
 	int split = FALSE;
 
 	BM_ITER_ELEM (l, &liter, f, BM_LOOPS_OF_FACE) {
-		v2 = BMO_slot_map_ptr_get(slot_targetmap, l->v);
+		v2 = BMO_slot_map_elem_get(slot_targetmap, l->v);
 		/* ok: if v2 is NULL (e.g. not in the map) then it's
 		 *     a target vert, otherwise it's a double */
 		if ((v2 && BM_vert_in_face(f, v2)) &&
@@ -110,7 +110,7 @@
 
 	/* mark merge verts for deletion */
 	BM_ITER_MESH (v, &iter, bm, BM_VERTS_OF_MESH) {
-		if ((v2 = BMO_slot_map_ptr_get(slot_targetmap, v))) {
+		if ((v2 = BMO_slot_map_elem_get(slot_targetmap, v))) {
 			BMO_elem_flag_enable(bm, v, ELE_DEL);
 
 			/* merge the vertex flags, else we get randomly selected/unselected verts */
@@ -126,8 +126,8 @@
 
 	BM_ITER_MESH (e, &iter, bm, BM_EDGES_OF_MESH) {
 		if (BMO_elem_flag_test(bm, e->v1, ELE_DEL) || BMO_elem_flag_test(bm, e->v2, ELE_DEL)) {
-			v  = BMO_slot_map_ptr_get(slot_targetmap, e->v1);
-			v2 = BMO_slot_map_ptr_get(slot_targetmap, e->v2);
+			v  = BMO_slot_map_elem_get(slot_targetmap, e->v1);
+			v2 = BMO_slot_map_elem_get(slot_targetmap, e->v2);
 			
 			if (!v) v = e->v1;
 			if (!v2) v2 = e->v2;
@@ -175,10 +175,10 @@
 			v = l->v;
 			v2 = l->next->v;
 			if (BMO_elem_flag_test(bm, v, ELE_DEL)) {
-				v = BMO_slot_map_ptr_get(slot_targetmap, v);
+				v = BMO_slot_map_elem_get(slot_targetmap, v);
 			}
 			if (BMO_elem_flag_test(bm, v2, ELE_DEL)) {
-				v2 = BMO_slot_map_ptr_get(slot_targetmap, v2);
+				v2 = BMO_slot_map_elem_get(slot_targetmap, v2);
 			}
 			
 			e2 = v != v2 ? BM_edge_exists(v, v2) : NULL;
@@ -208,10 +208,10 @@
 		v2 = loops[1]->v;
 
 		if (BMO_elem_flag_test(bm, v, ELE_DEL)) {
-			v = BMO_slot_map_ptr_get(slot_targetmap, v);
+			v = BMO_slot_map_elem_get(slot_targetmap, v);
 		}
 		if (BMO_elem_flag_test(bm, v2, ELE_DEL)) {
-			v2 = BMO_slot_map_ptr_get(slot_targetmap, v2);
+			v2 = BMO_slot_map_elem_get(slot_targetmap, v2);
 		}
 		
 		f2 = BM_face_create_ngon(bm, v, v2, edges, a, TRUE);
@@ -360,7 +360,7 @@
 			copy_v3_v3(snapv->co, vec);
 		}
 		else {
-			BMO_slot_map_ptr_insert(&weldop, slot_targetmap, v, snapv);
+			BMO_slot_map_elem_insert(&weldop, slot_targetmap, v, snapv);
 		}
 	}
 
@@ -414,9 +414,9 @@
 			copy_v3_v3(edges[i]->v2->co, center);
 			
 			if (edges[i]->v1 != edges[0]->v1)
-				BMO_slot_map_ptr_insert(&weldop, slot_targetmap, edges[i]->v1, edges[0]->v1);
+				BMO_slot_map_elem_insert(&weldop, slot_targetmap, edges[i]->v1, edges[0]->v1);
 			if (edges[i]->v2 != edges[0]->v1)
-				BMO_slot_map_ptr_insert(&weldop, slot_targetmap, edges[i]->v2, edges[0]->v1);

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list