75 typedef typename bits::enum_storage_type<T>::type st;
76 typedef void (
flags::*bool_type)()
const;
77 void bool_type_true()
const {}
79 flags(): m_value(0) {}
80 flags(T t): m_value(
static_cast<st
>(t)) {}
81 friend flags operator|(
const flags & l,
const T & r) {
return l |
flags(r);}
83 friend flags operator|(
const T & l,
const flags & r) {
return flags(l) | r;}
85 friend flags operator&(
const T & l,
const flags & r) {
return flags(
flags(l).m_value & r.m_value);}
86 friend flags operator&(
const flags & l,
const T & r) {
return flags(l.m_value &
flags(r).m_value);}
87 flags & operator|=(
const T & r) {
return *
this |=
flags(r); }
88 flags & operator|=(
const flags & r) { m_value |= r.m_value;
return *
this; }
90 operator bool_type()
const {
return m_value?&flags::bool_type_true:NULL;}
91 flags operator~()
const {
return flags(~m_value);}
94 friend void serialize(D & dst,
const flags<T> & f) {
95 serialize(dst, f.m_value);
99 friend void unserialize(S & src,
flags<T> & f) {
100 unserialize(src, f.m_value);
103 explicit flags(st value): m_value(value) {}
107 #define TPIE_DECLARE_OPERATORS_FOR_FLAGS(T) \
108 inline tpie::flags<T> operator|(const T & l, const T & r) {return tpie::flags<T>(l) | r;} \
109 inline tpie::flags<T> operator~(const T & l) {return ~tpie::flags<T>(l);}
114 #endif //#_TPIE_FLAGS_H