[Bf-blender-cvs] [5cd1b53] master: Cleanup: use enum for bmesh_elem_check

Campbell Barton noreply at git.blender.org
Thu Dec 24 16:20:10 CET 2015


Commit: 5cd1b530c8331f7e9cfc967285daa21c7d401957
Author: Campbell Barton
Date:   Fri Dec 25 02:08:01 2015 +1100
Branches: master
https://developer.blender.org/rB5cd1b530c8331f7e9cfc967285daa21c7d401957

Cleanup: use enum for bmesh_elem_check

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

M	source/blender/bmesh/intern/bmesh_core.c

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

diff --git a/source/blender/bmesh/intern/bmesh_core.c b/source/blender/bmesh/intern/bmesh_core.c
index f459cc7..29178c2 100644
--- a/source/blender/bmesh/intern/bmesh_core.c
+++ b/source/blender/bmesh/intern/bmesh_core.c
@@ -525,41 +525,75 @@ BMFace *BM_face_create_verts(
 int bmesh_elem_check(void *element, const char htype)
 {
 	BMHeader *head = element;
-	int err = 0;
+	enum {
+		IS_NULL                                     = (1 << 0),
+		IS_WRONG_TYPE                               = (1 << 1),
+
+		IS_VERT_WRONG_EDGE_TYPE                     = (1 << 2),
+
+		IS_EDGE_NULL_DISK_LINK                      = (1 << 3),
+		IS_EDGE_WRONG_LOOP_TYPE                     = (1 << 4),
+		IS_EDGE_WRONG_FACE_TYPE                     = (1 << 5),
+		IS_EDGE_NULL_RADIAL_LINK                    = (1 << 6),
+		IS_EDGE_ZERO_FACE_LENGTH                    = (1 << 7),
+
+		IS_LOOP_WRONG_FACE_TYPE                     = (1 << 8),
+		IS_LOOP_WRONG_EDGE_TYPE                     = (1 << 9),
+		IS_LOOP_WRONG_VERT_TYPE                     = (1 << 10),
+		IS_LOOP_VERT_NOT_IN_EDGE                    = (1 << 11),
+		IS_LOOP_NULL_CYCLE_LINK                     = (1 << 12),
+		IS_LOOP_ZERO_FACE_LENGTH                    = (1 << 13),
+		IS_LOOP_WRONG_FACE_LENGTH                   = (1 << 14),
+		IS_LOOP_WRONG_RADIAL_LENGTH                 = (1 << 15),
+
+		IS_FACE_NULL_LOOP                           = (1 << 16),
+		IS_FACE_WRONG_LOOP_FACE                     = (1 << 17),
+		IS_FACE_NULL_EDGE                           = (1 << 18),
+		IS_FACE_NULL_VERT                           = (1 << 19),
+		IS_FACE_LOOP_VERT_NOT_IN_EDGE               = (1 << 20),
+		IS_FACE_LOOP_WRONG_RADIAL_LENGTH            = (1 << 21),
+		IS_FACE_LOOP_WRONG_DISK_LENGTH              = (1 << 22),
+		IS_FACE_WRONG_LENGTH                        = (1 << 23),
+	} err = 0;
 
 	if (!element)
-		return (1 << 0);
+		return IS_NULL;
 
 	if (head->htype != htype)
-		return (1 << 1);
+		return IS_WRONG_TYPE;
 	
 	switch (htype) {
 		case BM_VERT:
 		{
 			BMVert *v = element;
 			if (v->e && v->e->head.htype != BM_EDGE) {
-				err |= (1 << 2);
+				err |= IS_VERT_WRONG_EDGE_TYPE;
 			}
 			break;
 		}
 		case BM_EDGE:
 		{
 			BMEdge *e = element;
-			if (e->l && e->l->head.htype != BM_LOOP)
-				err |= (1 << 3);
-			if (e->l && e->l->f->head.htype != BM_FACE)
-				err |= (1 << 4);
 			if (e->v1_disk_link.prev == NULL ||
 			    e->v2_disk_link.prev == NULL ||
 			    e->v1_disk_link.next == NULL ||
 			    e->v2_disk_link.next == NULL)
 			{
-				err |= (1 << 5);
+				err |= IS_EDGE_NULL_DISK_LINK;
+			}
+
+			if (e->l && e->l->head.htype != BM_LOOP) {
+				err |= IS_EDGE_WRONG_LOOP_TYPE;
+			}
+			if (e->l && e->l->f->head.htype != BM_FACE) {
+				err |= IS_EDGE_WRONG_FACE_TYPE;
+			}
+			if (e->l && (e->l->radial_next == NULL || e->l->radial_prev == NULL)) {
+				err |= IS_EDGE_NULL_RADIAL_LINK;
+			}
+			if (e->l && e->l->f->len <= 0) {
+				err |= IS_EDGE_ZERO_FACE_LENGTH;
 			}
-			if (e->l && (e->l->radial_next == NULL || e->l->radial_prev == NULL))
-				err |= (1 << 6);
-			if (e->l && e->l->f->len <= 0)
-				err |= (1 << 7);
 			break;
 		}
 		case BM_LOOP:
@@ -567,21 +601,26 @@ int bmesh_elem_check(void *element, const char htype)
 			BMLoop *l = element, *l2;
 			int i;
 
-			if (l->f->head.htype != BM_FACE)
-				err |= (1 << 8);
-			if (l->e->head.htype != BM_EDGE)
-				err |= (1 << 9);
-			if (l->v->head.htype != BM_VERT)
-				err |= (1 << 10);
+			if (l->f->head.htype != BM_FACE) {
+				err |= IS_LOOP_WRONG_FACE_TYPE;
+			}
+			if (l->e->head.htype != BM_EDGE) {
+				err |= IS_LOOP_WRONG_EDGE_TYPE;
+			}
+			if (l->v->head.htype != BM_VERT) {
+				err |= IS_LOOP_WRONG_VERT_TYPE;
+			}
 			if (!BM_vert_in_edge(l->e, l->v)) {
 				fprintf(stderr, "%s: fatal bmesh error (vert not in edge)! (bmesh internal error)\n", __func__);
-				err |= (1 << 11);
+				err |= IS_LOOP_VERT_NOT_IN_EDGE;
 			}
 
-			if (l->radial_next == NULL || l->radial_prev == NULL)
-				err |= (1 << 12);
-			if (l->f->len <= 0)
-				err |= (1 << 13);
+			if (l->radial_next == NULL || l->radial_prev == NULL) {
+				err |= IS_LOOP_NULL_CYCLE_LINK;
+			}
+			if (l->f->len <= 0) {
+				err |= IS_LOOP_ZERO_FACE_LENGTH;
+			}
 
 			/* validate boundary loop -- invalid for hole loops, of course,
 			 * but we won't be allowing those for a while yet */
@@ -595,11 +634,13 @@ int bmesh_elem_check(void *element, const char htype)
 				i++;
 			} while ((l2 = l2->next) != l);
 
-			if (i != l->f->len || l2 != l)
-				err |= (1 << 14);
+			if (i != l->f->len || l2 != l) {
+				err |= IS_LOOP_WRONG_FACE_LENGTH;
+			}
 
-			if (!bmesh_radial_validate(bmesh_radial_length(l), l))
-				err |= (1 << 15);
+			if (!bmesh_radial_validate(bmesh_radial_length(l), l)) {
+				err |= IS_LOOP_WRONG_RADIAL_LENGTH;
+			}
 
 			break;
 		}
@@ -616,36 +657,43 @@ int bmesh_elem_check(void *element, const char htype)
 			if (!f->l_first)
 #endif
 			{
-				err |= (1 << 16);
+				err |= IS_FACE_NULL_LOOP;
 			}
 			l_iter = l_first = BM_FACE_FIRST_LOOP(f);
 			do {
 				if (l_iter->f != f) {
 					fprintf(stderr, "%s: loop inside one face points to another! (bmesh internal error)\n", __func__);
-					err |= (1 << 17);
+					err |= IS_FACE_WRONG_LOOP_FACE;
 				}
 
-				if (!l_iter->e)
-					err |= (1 << 18);
-				if (!l_iter->v)
-					err |= (1 << 19);
+				if (!l_iter->e) {
+					err |= IS_FACE_NULL_EDGE;
+				}
+				if (!l_iter->v) {
+					err |= IS_FACE_NULL_VERT;
+				}
 				if (l_iter->e && l_iter->v) {
-					if (!BM_vert_in_edge(l_iter->e, l_iter->v) || !BM_vert_in_edge(l_iter->e, l_iter->next->v)) {
-						err |= (1 << 20);
+					if (!BM_vert_in_edge(l_iter->e, l_iter->v) ||
+					    !BM_vert_in_edge(l_iter->e, l_iter->next->v))
+					{
+						err |= IS_FACE_LOOP_VERT_NOT_IN_EDGE;
 					}
 
-					if (!bmesh_radial_validate(bmesh_radial_length(l_iter), l_iter))
-						err |= (1 << 21);
+					if (!bmesh_radial_validate(bmesh_radial_length(l_iter), l_iter)) {
+						err |= IS_FACE_LOOP_WRONG_RADIAL_LENGTH;
+					}
 
-					if (!bmesh_disk_count(l_iter->v) || !bmesh_disk_count(l_iter->next->v))
-						err |= (1 << 22);
+					if (!bmesh_disk_count(l_iter->v) || !bmesh_disk_count(l_iter->next->v)) {
+						err |= IS_FACE_LOOP_WRONG_DISK_LENGTH;
+					}
 				}
 
 				len++;
 			} while ((l_iter = l_iter->next) != l_first);
 
-			if (len != f->len)
-				err |= (1 << 23);
+			if (len != f->len) {
+				err |= IS_FACE_WRONG_LENGTH;
+			}
 			break;
 		}
 		default:




More information about the Bf-blender-cvs mailing list