libcdos-fw
CFFlags.h
1 #ifndef __CF_FLAGS_H__
2 #define __CF_FLAGS_H__
3 
4 #include <Core/CFDefines.h>
5 #include <Core/CFTypes.h>
6 
7 class CF_EXPORT CFFlag
8 {
9  int i;
10 public:
11  inline CFFlag(int i);
12  inline operator int() const { return i; }
13 };
14 
15 inline CFFlag::CFFlag(int ai) : i(ai) {}
16 
17 template<typename Enum>
18 class CFFlags
19 {
20  int i;
21 public:
22  typedef Enum enum_type;
23  CF_DECL_CONSTEXPR inline CFFlags(const CFFlags &f) : i(f.i) {}
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) {}
28 
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; }
36 
37  CF_DECL_CONSTEXPR inline operator int() const { return i; }
38 
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)); }
47 
48  CF_DECL_CONSTEXPR inline bool operator!() const { return !i; }
49 
50  inline bool testFlag(Enum f) const { return (i & f) == f && (f != 0 || i == int(f) ); }
51 };
52 
53 #define CF_DECLARE_FLAGS(Flags, Enum)\
54 typedef CFFlags<Enum> Flags;
55 
56 #endif // __CF_FLAGS_H__
Definition: CFFlags.h:7
结构与枚举类型定义.
Definition: CFFlags.h:18