src/macros.h

changeset 1050
848ad1516e4d
parent 1049
71946fed475a
child 1059
7800dbb00632
equal deleted inserted replaced
1049:71946fed475a 1050:848ad1516e4d
38 #else // WIN32 38 #else // WIN32
39 # define DIRSLASH "/" 39 # define DIRSLASH "/"
40 # define DIRSLASH_CHAR '/' 40 # define DIRSLASH_CHAR '/'
41 #endif // WIN32 41 #endif // WIN32
42 42
43 #define dvalof(A) dprint ("value of '%1' = %2\n", #A, A) 43 #define printValueOf(A) dprint ("value of '%1' = %2\n", #A, A)
44 #define for_axes(AX) for (const Axis AX : std::initializer_list<const Axis> ({X, Y, Z})) 44 #define for_axes(AX) for (const Axis AX : std::initializer_list<const Axis> ({X, Y, Z}))
45 45
46 #define MAKE_ITERABLE_ENUM(T, FIRST, LAST) \ 46 #define MAKE_ITERABLE_ENUM(T, FIRST, LAST) \
47 template<> \ 47 template<> \
48 struct EnumLimits<T> \ 48 struct EnumLimits<T> \
61 61
62 #define DEFINE_FLAG_ACCESS_METHODS \ 62 #define DEFINE_FLAG_ACCESS_METHODS \
63 bool checkFlag(Flag flag) const { return !!(m_flags & flag); } \ 63 bool checkFlag(Flag flag) const { return !!(m_flags & flag); } \
64 void setFlag(Flag flag) { m_flags |= flag; } \ 64 void setFlag(Flag flag) { m_flags |= flag; } \
65 void unsetFlag(Flag flag) { m_flags &= ~flag; } 65 void unsetFlag(Flag flag) { m_flags &= ~flag; }
66
67 // once-statement
68 struct OnceGuard
69 {
70 bool triggered;
71 OnceGuard() : triggered (false) {}
72
73 bool pass()
74 {
75 if (triggered)
76 {
77 return false;
78 }
79 else
80 {
81 triggered = true;
82 return true;
83 }
84 }
85 };
86
87 #define TEE_2(A,B) A ## B
88 #define TEE(A,B) TEE_2(A,B)
89 #define once static OnceGuard TEE(_once_, __LINE__); if (TEE(_once_, __LINE__).pass())

mercurial