소스 검색

Improved enum flags testing.

woollybah 6 년 전
부모
커밋
3d58a221d7
1개의 변경된 파일11개의 추가작업 그리고 5개의 파일을 삭제
  1. 11 5
      blitz.mod/blitz_enum.c

+ 11 - 5
blitz.mod/blitz_enum.c

@@ -69,13 +69,19 @@ ENUM_TO_STRING(BBSIZET,t)
 int bbEnumTryConvert_##chr(BBEnum * bbEnum, type ordinalValue, type * ordinalResult) {\
 int bbEnumTryConvert_##chr(BBEnum * bbEnum, type ordinalValue, type * ordinalResult) {\
 	type * value = (type*)bbEnum->values;\
 	type * value = (type*)bbEnum->values;\
 	if (bbEnum->flags) {\
 	if (bbEnum->flags) {\
-		int result;\
-		for (int i = 0; i < bbEnum->length; i++) {\
-			if (ordinalValue & *value) {\
-				result |= *value++;\
+		if (ordinalValue == 0) {\
+			for (int i = 0; i < bbEnum->length; i++) {\
+				if (*value++ == 0) {\
+					return 1;\
+				}\
 			}\
 			}\
+			return 0;\
+		}\
+		type val = ordinalValue;\
+		for (int i = 0; i < bbEnum->length; i++) {\
+			val ^= *value++;\
 		}\
 		}\
-		if (result == ordinalValue) {\
+		if (val == 0) {\
 			*ordinalResult = ordinalValue;\
 			*ordinalResult = ordinalValue;\
 			return 1;\
 			return 1;\
 		}\
 		}\