// AUTOGENERATED COPYRIGHT HEADER START // Copyright (C) 2020-2023 Michael Fabian 'Xaymar' Dirks // AUTOGENERATED COPYRIGHT HEADER END #pragma once #include "warning-disable.hpp" #include #include #include "warning-enable.hpp" template struct enable_bitmask_operators { static const bool enable = false; }; template typename std::enable_if::enable, Enum>::type operator|(Enum lhs, Enum rhs) { using underlying = typename std::underlying_type::type; return static_cast(static_cast(lhs) | static_cast(rhs)); } template typename std::enable_if::enable, Enum>::type operator&(Enum lhs, Enum rhs) { using underlying = typename std::underlying_type::type; return static_cast(static_cast(lhs) & static_cast(rhs)); } template typename std::enable_if::enable, bool>::type any(Enum lhs) { using underlying = typename std::underlying_type::type; return static_cast(lhs) != static_cast(0); } template typename std::enable_if::enable, bool>::type exact(Enum lhs, Enum rhs) { using underlying = typename std::underlying_type::type; return static_cast(lhs) == static_cast(rhs); } template typename std::enable_if::enable, bool>::type has(Enum lhs, Enum rhs) { using underlying = typename std::underlying_type::type; return (lhs & rhs) == rhs; } #define P_ENABLE_BITMASK_OPERATORS(x) \ template<> \ struct enable_bitmask_operators { \ static const bool enable = true; \ };