16template <
typename E >
17concept FlagLike = std::is_enum_v< E > && std::unsigned_integral< std::underlying_type_t< E > > &&
18 (
static_cast< std::underlying_type_t< E >
>( E::NO_FLAG ) == 0 );
20template < FlagLike E >
21KOKKOS_INLINE_FUNCTION
constexpr E
operator|( E a, E b )
23 using T = std::underlying_type_t< E >;
24 return static_cast< E
>(
static_cast< T
>( a ) |
static_cast< T
>( b ) );
27template < FlagLike E >
28KOKKOS_INLINE_FUNCTION
constexpr E
operator&( E a, E b )
30 using T = std::underlying_type_t< E >;
31 return static_cast< E
>(
static_cast< T
>( a ) &
static_cast< T
>( b ) );
42template < FlagLike E >
43KOKKOS_INLINE_FUNCTION
constexpr bool has_flag( E mask_value, E flag )
noexcept
45 using U = std::underlying_type_t< E >;
47 if ( flag == E::NO_FLAG )
49 return mask_value == E::NO_FLAG;
52 return static_cast< U
>( mask_value & flag ) ==
static_cast< U
>( flag );
Concept for types that behave like bitmask flags.
Definition bit_masking.hpp:17
constexpr E operator&(E a, E b)
Definition bit_masking.hpp:28
constexpr bool has_flag(E mask_value, E flag) noexcept
Checks if a bitmask value contains a specific flag.
Definition bit_masking.hpp:43
constexpr E operator|(E a, E b)
Definition bit_masking.hpp:21