Przeglądaj źródła

Some additions to enum macro

Panagiotis Christopoulos Charitos 8 lat temu
rodzic
commit
1f78f6a2f8
1 zmienionych plików z 26 dodań i 2 usunięć
  1. 26 2
      src/anki/util/Enum.h

+ 26 - 2
src/anki/util/Enum.h

@@ -24,7 +24,7 @@ constexpr inline typename EnumUnderlyingType<TEnum>::Type enumToType(TEnum e)
 	return static_cast<typename EnumUnderlyingType<TEnum>::Type>(e);
 }
 
-#define _ANKI_ENUM_OPERATOR(enum_, qualifier_, operator_, selfOperator_)                                  \
+#define _ANKI_ENUM_OPERATOR(enum_, qualifier_, operator_, assignOperator_)                                \
 	constexpr qualifier_ enum_ operator operator_(const enum_ a, const enum_ b)                           \
 	{                                                                                                     \
 		using Int = EnumUnderlyingType<enum_>::Type;                                                      \
@@ -40,10 +40,22 @@ constexpr inline typename EnumUnderlyingType<TEnum>::Type enumToType(TEnum e)
 		using Int = EnumUnderlyingType<enum_>::Type;                                                      \
 		return static_cast<enum_>(a operator_ static_cast<Int>(b));                                       \
 	}                                                                                                     \
-	qualifier_ enum_& operator selfOperator_(enum_& a, const enum_ b)                                     \
+	qualifier_ enum_& operator assignOperator_(enum_& a, const enum_ b)                                   \
 	{                                                                                                     \
 		a = a operator_ b;                                                                                \
 		return a;                                                                                         \
+	}                                                                                                     \
+	qualifier_ enum_& operator assignOperator_(enum_& a, const EnumUnderlyingType<enum_>::Type b)         \
+	{                                                                                                     \
+		a = a operator_ b;                                                                                \
+		return a;                                                                                         \
+	}                                                                                                     \
+	qualifier_ EnumUnderlyingType<enum_>::Type& operator assignOperator_(                                 \
+		EnumUnderlyingType<enum_>::Type& a, const enum_ b)                                                \
+	{                                                                                                     \
+		using Int = EnumUnderlyingType<enum_>::Type;                                                      \
+		a = a operator_ static_cast<Int>(b);                                                              \
+		return a;                                                                                         \
 	}
 
 #define _ANKI_ENUM_UNARAY_OPERATOR(enum_, qualifier_, operator_)  \
@@ -65,6 +77,18 @@ constexpr inline typename EnumUnderlyingType<TEnum>::Type enumToType(TEnum e)
 		using Int = EnumUnderlyingType<enum_>::Type;      \
 		a = static_cast<enum_>(static_cast<Int>(a) - 1);  \
 		return a;                                         \
+	}                                                     \
+	qualifier_ enum_ operator++(enum_& a, int)            \
+	{                                                     \
+		enum_ old = a;                                    \
+		++a;                                              \
+		return old;                                       \
+	}                                                     \
+	qualifier_ enum_ operator--(enum_& a, int)            \
+	{                                                     \
+		enum_ old = a;                                    \
+		--a;                                              \
+		return old;                                       \
 	}
 
 #define _ANKI_ENUM_NEGATIVE_OPERATOR(enum_, qualifier_) \