deaddev-bitmask 1.0.1
C++ bitmask library
Loading...
Searching...
No Matches
deaddev::details Namespace Reference

some utility structures and functions More...

Classes

struct  bitmask_operations_check_traits
 trait implementation More...
 
struct  bitmask_traits
 used for deaddev::details::is_bitmask_v<T> and deaddev::details::bitmask_all_flags_v<T> More...
 
struct  empty_bitmask_traits
 default value More...
 

Functions

template<typename T >
DEADDEV_CONSTEVAL auto combine_flags (::std::underlying_type_t< T > &result, T value) -> void
 Flag combination routine.
 
template<typename T >
DEADDEV_CONSTEVAL auto calculate_all_flags_cpp_before_17 (T val) -> T
 sentinel recursion overload for all flags calculation
 
template<typename T , typename... Args>
DEADDEV_CONSTEVAL auto calculate_all_flags_cpp_before_17 (T arg, Args... args) -> T
 C++14 implementation for calculate_all_flags.
 
template<typename T , typename... Args>
DEADDEV_CONSTEVAL auto calculate_all_flags (Args... args) -> T
 Combines flags.
 
template<typename T >
DEADDEV_CONSTEVAL auto calculate_all_flags () -> T
 returns all flags
 
auto adl_bitmask_operations_check (...) -> ::deaddev::details::empty_bitmask_traits
 noop
 

Variables

template<typename T >
constexpr bool is_scoped_enum_v
 c++14 compatible std::is_scoped_enum
 
template<typename T , typename = typename ::std::enable_if<::std::is_enum<T>::value>::type>
constexpr bool is_bitmask_v
 Is T a bitmask type.
 
template<typename T , typename = typename ::std::enable_if<::std::is_enum<T>::value>::type>
constexpr T bitmask_all_flags_v
 All flags combined.
 

Detailed Description

some utility structures and functions

Function Documentation

◆ adl_bitmask_operations_check()

auto deaddev::details::adl_bitmask_operations_check ( ...) -> ::deaddev::details::empty_bitmask_traits

noop

This function does nothing but it's used to get bitmask traits type using argument-dependent lookup (ADL)

Parameters
...placeholder for ADL
Returns
deaddev::details::empty_bitmask_traits default traits

◆ calculate_all_flags() [1/2]

template<typename T >
DEADDEV_CONSTEVAL auto deaddev::details::calculate_all_flags ( ) -> T

returns all flags

there's no all flags specified then library will use (T)-1

Template Parameters
Tbitmask type
Returns
T value with all bits are set to 1

◆ calculate_all_flags() [2/2]

template<typename T , typename... Args>
DEADDEV_CONSTEVAL auto deaddev::details::calculate_all_flags ( Args... args) -> T

Combines flags.

Uses folding expressions to easily combine all flags using binary or operator

Template Parameters
Tenum type
Argsenum types or integers
Parameters
argsall flags list
Returns
T all flags combination

◆ calculate_all_flags_cpp_before_17() [1/2]

template<typename T , typename... Args>
DEADDEV_CONSTEVAL auto deaddev::details::calculate_all_flags_cpp_before_17 ( T arg,
Args... args ) -> T

C++14 implementation for calculate_all_flags.

Template Parameters
Tenum type
Argsenum values
Parameters
argfirst enum value
argsrest of values
Returns
T combined valuees

◆ calculate_all_flags_cpp_before_17() [2/2]

template<typename T >
DEADDEV_CONSTEVAL auto deaddev::details::calculate_all_flags_cpp_before_17 ( T val) -> T

sentinel recursion overload for all flags calculation

Template Parameters
Tenum type
Parameters
valvalue
Returns
T value

◆ combine_flags()

template<typename T >
DEADDEV_CONSTEVAL auto deaddev::details::combine_flags ( ::std::underlying_type_t< T > & result,
T value ) -> void

Flag combination routine.

Template Parameters
Tflag type
Parameters
result
value

Variable Documentation

◆ bitmask_all_flags_v

template<typename T , typename = typename ::std::enable_if<::std::is_enum<T>::value>::type>
T deaddev::details::bitmask_all_flags_v
constexpr
Initial value:

All flags combined.

All flags combination for better negation

Template Parameters
Tenum type
typenameSFINAE

◆ is_bitmask_v

template<typename T , typename = typename ::std::enable_if<::std::is_enum<T>::value>::type>
bool deaddev::details::is_bitmask_v
constexpr
Initial value:

Is T a bitmask type.

Check if the bitmask operations are enabled for T

Template Parameters
Tenum type
typenameSFINAE

◆ is_scoped_enum_v

template<typename T >
bool deaddev::details::is_scoped_enum_v
constexpr
Initial value:
=
::std::is_enum<T>::value &&
!::std::is_convertible<T, typename ::std::underlying_type<T>::type>::value

c++14 compatible std::is_scoped_enum

Template Parameters
Tenum type