14 #define DECLARE_POSTFIX_INCREMENT(enum_type) \ 15 inline enum_type operator ++(enum_type& e, int) \ 17 enum_type e_org = e; \ 18 e = (enum_type)((std::underlying_type<enum_type>::type)e + 1); \ 21 inline enum_type operator --(enum_type& e, int) \ 23 enum_type e_org = e; \ 24 e = (enum_type)((std::underlying_type<enum_type>::type)e - 1); \ 31 # define DECLARE_ENUM_AS_BIT_SET(mask_t) \ 32 inline mask_t operator | (mask_t m1, mask_t m2) {return (mask_t)((std::underlying_type<mask_t>::type)m1 | m2);} \ 33 inline mask_t operator & (mask_t m1, mask_t m2) {return (mask_t)((std::underlying_type<mask_t>::type)m1 & m2);} \ 34 inline mask_t operator ^ (mask_t m1, mask_t m2) {return (mask_t)((std::underlying_type<mask_t>::type)m1 ^ m2);} \ 35 inline mask_t& operator |= (mask_t& m1, mask_t m2) {m1 = m1 | m2; return m1;} \ 36 inline mask_t& operator &= (mask_t& m1, mask_t m2) {m1 = m1 & m2; return m1;} \ 37 inline mask_t& operator ^= (mask_t& m1, mask_t m2) {m1 = m1 ^ m2; return m1;} \ 38 inline mask_t operator ~(mask_t m) {return (mask_t)(~(std::underlying_type<mask_t>::type)m);} 61 template <
typename Tenum_t,
typename Tstorage_t, Tenum_t Tbegin, Tenum_t Tend, Tenum_t Tinval
id, u
int Tnum_bits = 8 * sizeof(Tstorage_t)>
65 static const Tenum_t
begin = Tbegin;
66 static const Tenum_t
end = Tend;
Helper template class that makes basic properties of given enumeration type visible from outsize...
Tstorage_t storage
storage type (i.e. byte)
static const Tenum_t invalid
what value is used as invalid value (i.e. INVALID_TRACKDIR)
static const uint num_bits
Number of bits for storing the enum in command parameters.
static const Tenum_t end
one after the last valid value (i.e. TRACKDIR_END)
Tenum_t type
enum type (i.e. Trackdir)
Informative template class exposing basic enumeration properties used by several other templates belo...
static const Tenum_t begin
lowest valid value (i.e. TRACKDIR_BEGIN)