36#ifndef IMT_BASE_CORE_UTIL_FLAGS_H
37#define IMT_BASE_CORE_UTIL_FLAGS_H
73template<
typename EnumType,
typename LimitsType,
typename BaseType>
89 explicit Flags(EnumType
const flag)
noexcept;
96 explicit Flags(BaseType
const flags)
noexcept;
102 void set(EnumType
const flag);
108 void clear(EnumType
const flag);
115 bool isSet(EnumType
const flag)
const;
141 BaseType toBase(EnumType
const flag)
const;
148template<
typename EnumType,
typename LimitsType,
typename BaseType>
152 static_assert((
sizeof(BaseType) * 8U) >= LimitsType::MAX,
"Base type size to small");
154 static_assert(LimitsType::MIN == 0,
"Enum does not start at 0");
156 static_assert(LimitsType::MAX == (LimitsType::COUNT - 1),
"Enum not sequentialy numbered");
159template<
typename EnumType,
typename LimitsType,
typename BaseType>
161 Flags {toBase(flag)} {
164template<
typename EnumType,
typename LimitsType,
typename BaseType>
169template<
typename EnumType,
typename LimitsType,
typename BaseType>
171 this->m_flags |= toBase(flag);
174template<
typename EnumType,
typename LimitsType,
typename BaseType>
176 this->m_flags &= ~(toBase(flag));
179template<
typename EnumType,
typename LimitsType,
typename BaseType>
181 BaseType
const mask {toBase(flag)};
182 return (this->m_flags & mask) != 0;
185template<
typename EnumType,
typename LimitsType,
typename BaseType>
187 return this->m_flags;
190template<
typename EnumType,
typename LimitsType,
typename BaseType>
192 return Flags(this->m_flags | other.m_flags);
195template<
typename EnumType,
typename LimitsType,
typename BaseType>
197 return Flags(this->m_flags & other.m_flags);
200template<
typename EnumType,
typename LimitsType,
typename BaseType>
202 return static_cast<BaseType
>(1U <<
static_cast<size_t>(flag));
211template<
typename EnumType,
typename LimitsType,
typename BaseType>
213 return left.toInteger() == right.toInteger();
222template<
typename EnumType,
typename LimitsType,
typename BaseType>
224 return !(left == right);
A template to create a type safe flags type from an enum.
Flags intersect(Flags const &other) const
Intersects the flags with another instance.
void clear(EnumType const flag)
Clears the given flag.
Flags() noexcept
Default constructor.
BaseType const & toInteger() const
Returns the base type.
Flags combine(Flags const &other) const
Combines the flags with another instance.
bool isSet(EnumType const flag) const
Checks whether the given flag is set.
void set(EnumType const flag)
Sets the given flag.
bool operator==(DateTimeStamp const left, DateTimeStamp const right) noexcept
Equals operator overload.
bool operator!=(DateTimeStamp const left, DateTimeStamp const right) noexcept
Not equals operator overload.
This is a application specific file which is used to configure Imt.Base.Core.Math.