diff options
| author | Stanislaw Halik <sthalik@misaki.pl> | 2018-05-04 11:51:47 +0200 | 
|---|---|---|
| committer | Stanislaw Halik <sthalik@misaki.pl> | 2018-05-05 12:34:52 +0200 | 
| commit | a6f095c01e93090e185afd0d9f26bf4565a552ed (patch) | |
| tree | f20a632b256bfa95b4470654a61f829d5a117f3b /compat | |
| parent | 7f8043b8287e187a7c1d4f0175ed9c527d6bdcc6 (diff) | |
compat, logic/pipeline: add bitwise enum operators
Diffstat (limited to 'compat')
| -rw-r--r-- | compat/enum-operators.hpp | 28 | 
1 files changed, 28 insertions, 0 deletions
diff --git a/compat/enum-operators.hpp b/compat/enum-operators.hpp new file mode 100644 index 00000000..e956c461 --- /dev/null +++ b/compat/enum-operators.hpp @@ -0,0 +1,28 @@ +#pragma once + +#include <type_traits> + +#define OTR_FLAGS_OP2(type, op)                                         \ +    inline type operator op (type a, type b)                            \ +    {                                                                   \ +        using t__ = std::underlying_type_t<type>;                       \ +        return static_cast<type>(t__((a)) op t__((b)));                 \ +    } // end + +#define OTR_FLAGS_SHIFT(type, op)                                       \ +    type operator op (type, unsigned) = delete; + +#define OTR_FLAGS_OP1(type, op)                                         \ +    inline type operator op (type x)                                    \ +    {                                                                   \ +        using t__ = std::underlying_type_t<type>;                       \ +        return static_cast<type>(t__((x)));                             \ +    } // end + +#define DEFINE_ENUM_OPERATORS(type)                                     \ +    OTR_FLAGS_OP2(type, |)                                              \ +    OTR_FLAGS_OP2(type, &)                                              \ +    OTR_FLAGS_OP2(type, ^)                                              \ +    OTR_FLAGS_OP1(type, ~)                                              \ +    OTR_FLAGS_SHIFT(type, <<);                                          \ +    OTR_FLAGS_SHIFT(type, >>); // end  | 
