4 #include <Core/CFDefines.h> 12 inline operator int()
const {
return i; }
15 inline CFFlag::CFFlag(
int ai) : i(ai) {}
17 template<
typename Enum>
22 typedef Enum enum_type;
24 CF_DECL_CONSTEXPR
inline CFFlags(Enum f) : i(f) {}
25 CF_DECL_CONSTEXPR
inline CFFlags(CFInt f) : i(f) {}
26 CF_DECL_CONSTEXPR
inline CFFlags() : i(0) {}
27 inline CFFlags(
CFFlag f) : i(f) {}
29 inline CFFlags &operator=(
const CFFlags &f) { i = f.i;
return *
this; }
30 inline CFFlags &operator&=(CFInt mask) { i &= mask;
return *
this; }
31 inline CFFlags &operator&=(CFUInt mask) { i &= mask;
return *
this; }
32 inline CFFlags &operator|=(CFFlags f) { i |= f.i;
return *
this; }
33 inline CFFlags &operator|=(Enum f) { i |= f;
return *
this; }
34 inline CFFlags &operator^=(CFFlags f) { i ^= f.i;
return *
this; }
35 inline CFFlags &operator^=(Enum f) { i ^= f;
return *
this; }
37 CF_DECL_CONSTEXPR
inline operator int()
const {
return i; }
39 CF_DECL_CONSTEXPR
inline CFFlags operator|(CFFlags f)
const {
return CFFlags(Enum(i | f.i)); }
40 CF_DECL_CONSTEXPR
inline CFFlags operator|(Enum f)
const {
return CFFlags(Enum(i | f)); }
41 CF_DECL_CONSTEXPR
inline CFFlags operator^(CFFlags f)
const {
return CFFlags(Enum(i ^ f.i)); }
42 CF_DECL_CONSTEXPR
inline CFFlags operator^(Enum f)
const {
return CFFlags(Enum(i ^ f)); }
43 CF_DECL_CONSTEXPR
inline CFFlags operator&(
int mask)
const {
return CFFlags(Enum(i & mask)); }
44 CF_DECL_CONSTEXPR
inline CFFlags operator&(uint mask)
const {
return CFFlags(Enum(i & mask)); }
45 CF_DECL_CONSTEXPR
inline CFFlags operator&(Enum f)
const {
return CFFlags(Enum(i & f)); }
46 CF_DECL_CONSTEXPR
inline CFFlags operator~()
const {
return CFFlags(Enum(~i)); }
48 CF_DECL_CONSTEXPR
inline bool operator!()
const {
return !i; }
50 inline bool testFlag(Enum f)
const {
return (i & f) == f && (f != 0 || i == int(f) ); }
53 #define CF_DECLARE_FLAGS(Flags, Enum)\ 54 typedef CFFlags<Enum> Flags; 56 #endif // __CF_FLAGS_H__