16 #define DECLARE_POSTFIX_INCREMENT(enum_type) \ 17 inline enum_type operator ++(enum_type& e, int) \ 19 enum_type e_org = e; \ 20 e = (enum_type)((std::underlying_type<enum_type>::type)e + 1); \ 23 inline enum_type operator --(enum_type& e, int) \ 25 enum_type e_org = e; \ 26 e = (enum_type)((std::underlying_type<enum_type>::type)e - 1); \ 33 # define DECLARE_ENUM_AS_BIT_SET(mask_t) \ 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) {return (mask_t)((std::underlying_type<mask_t>::type)m1 & m2);} \ 36 inline mask_t operator ^ (mask_t m1, mask_t m2) {return (mask_t)((std::underlying_type<mask_t>::type)m1 ^ m2);} \ 37 inline mask_t& operator |= (mask_t& m1, mask_t m2) {m1 = m1 | m2; return m1;} \ 38 inline mask_t& operator &= (mask_t& m1, mask_t m2) {m1 = m1 & m2; return m1;} \ 39 inline mask_t& operator ^= (mask_t& m1, mask_t m2) {m1 = m1 ^ m2; return m1;} \ 40 inline mask_t operator ~(mask_t m) {return (mask_t)(~(std::underlying_type<mask_t>::type)m);} 63 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)>
67 static const Tenum_t
begin = Tbegin;
68 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)