/* Low Latency IPC Library for high-speed traffic Copyright (C) 2019 Michael Fabian Dirks This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ #pragma once #include 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)); } #define ENABLE_BITMASK_OPERATORS(x) \ template<> \ struct enable_bitmask_operators { \ static const bool enable = true; \ };