/** * @brief Template class implementation for `EnumFlags`. */ #ifndef STA_CORE_ENUM_FLAGS_TPP #define STA_CORE_ENUM_FLAGS_TPP #ifndef STA_CORE_ENUM_FLAGS_HPP # error "Direct use of internal header. Use instead" #endif // !STA_CORE_ENUM_FLAGS_HPP namespace sta { template EnumFlags::EnumFlags() : flags_{0} {} template EnumFlags::EnumFlags(const EnumFlags & other) : flags_{other.flags_} {} template EnumFlags::EnumFlags(flag_type flag) : flags_{1U << static_cast(flag)} {} template EnumFlags::EnumFlags(uint32_t flags) : flags_{flags} {} template void EnumFlags::set(const EnumFlags & flags) { flags_ |= flags.flags_; } template void EnumFlags::clear(const EnumFlags & flags) { flags_ &= ~(flags.flags_); } template void EnumFlags::clear() { flags_ = 0; } template bool EnumFlags::isSet(const EnumFlags & flags) const { return (flags_ & flags.flags_) == flags.flags_; } template bool EnumFlags::isAnySet(const EnumFlags & flags) const { return (flags_ & flags.flags_) != 0; } template bool EnumFlags::operator ==(const EnumFlags & rhs) const { return (flags_ == rhs.flags_); } template bool EnumFlags::operator !=(const EnumFlags & rhs) const { return (flags_ != rhs.flags_); } template EnumFlags EnumFlags::operator &(const EnumFlags & rhs) const { return EnumFlags(flags_ & rhs.flags_); } template EnumFlags EnumFlags::operator |(const EnumFlags & rhs) const { return EnumFlags(flags_ | rhs.flags_); } template EnumFlags & EnumFlags::operator &=(const EnumFlags & rhs) { flags_ &= rhs.flags_; return *this; } template EnumFlags & EnumFlags::operator |=(const EnumFlags & rhs) { flags_ |= rhs.flags_; return *this; } template EnumFlags::operator uint32_t() { return flags_; } } // namespace sta #endif // STA_CORE_ENUM_FLAGS_TPP