// Copyright (C) 2015 Jérôme Leclercq // This file is part of the "Nazara Engine - Core module" // For conditions of distribution and use, see copyright notice in Config.hpp #include #include namespace Nz { /*! * \ingroup core * \class Nz::Flags * \brief Core class that represents a set of bits * * This class meets the requirements of Container, AllocatorAwareContainer, SequenceContainer */ template constexpr Flags::Flags(UInt32 value) : m_value(value) { } template constexpr Flags::Flags(E enumVal) : Flags(GetFlagValue(enumVal)) { } template constexpr Flags::operator bool() const { return m_value != 0; } template constexpr Flags::operator UInt32() const { return m_value; } template constexpr Flags Flags::operator~() const { return Flags(~m_value); } template constexpr Flags Flags::operator&(Flags rhs) const { return Flags(m_value & rhs.m_value); } template constexpr Flags Flags::operator|(Flags rhs) const { return Flags(m_value | rhs.m_value); } template constexpr Flags Flags::operator^(Flags rhs) const { return Flags(m_value ^ rhs.m_value); } template constexpr bool Flags::operator==(Flags rhs) const { return m_value == rhs.m_value; } template constexpr bool Flags::operator!=(Flags rhs) const { return !operator==(rhs); } template /*constexpr*/ Flags& Flags::operator|=(Flags rhs) { m_value |= rhs.m_value; return *this; } template /*constexpr*/ Flags& Flags::operator&=(Flags rhs) { m_value &= rhs.m_value; return *this; } template /*constexpr*/ Flags& Flags::operator^=(Flags rhs) { m_value ^= rhs.m_value; return *this; } template constexpr UInt32 Flags::GetFlagValue(E enumValue) { return 1U << static_cast(enumValue); } template constexpr std::enable_if_t::value, Flags> operator~(E lhs) { return ~Flags(lhs); } template constexpr std::enable_if_t::value, Flags> operator|(E lhs, E rhs) { return Flags(lhs) | rhs; } template constexpr std::enable_if_t::value, Flags> operator&(E lhs, E rhs) { return Flags(lhs) & rhs; } template constexpr std::enable_if_t::value, Flags> operator^(E lhs, E rhs) { return Flags(lhs) ^ rhs; } } #include