TSDuck v3.46-4930
MPEG Transport Stream Toolkit
Loading...
Searching...
No Matches
tsEnumUtils.h File Reference

Classes

struct  ts::EnableBitMaskOperators< T >

Namespaces

namespace  ts
 TSDuck namespace, containing all TSDuck classes and functions.

Macros

#define TS_ENABLE_BITMASK_OPERATORS(T)

Functions

template<typename ENUM>
requires std::is_enum_v<ENUM> && ts::EnableBitMaskOperators<ENUM>::value
constexpr bool operator! (ENUM a)
template<typename ENUM>
requires std::is_enum_v<ENUM> && ts::EnableBitMaskOperators<ENUM>::value
constexpr ENUM operator& (ENUM a, ENUM b)
template<typename ENUM>
requires std::is_enum_v<ENUM> && ts::EnableBitMaskOperators<ENUM>::value
ENUM & operator&= (ENUM &a, ENUM b)
template<typename ENUM, typename std::enable_if< std::is_enum< ENUM >::value &&ts::EnableBitMaskOperators< ENUM >::value >::type * = nullptr>
constexpr ENUM operator<< (ENUM a, size_t b)
template<typename ENUM, typename std::enable_if< std::is_enum< ENUM >::value &&ts::EnableBitMaskOperators< ENUM >::value >::type * = nullptr>
ENUM & operator<<= (ENUM &a, size_t b)
template<typename ENUM, typename std::enable_if< std::is_enum< ENUM >::value &&ts::EnableBitMaskOperators< ENUM >::value >::type * = nullptr>
constexpr ENUM operator>> (ENUM a, size_t b)
template<typename ENUM, typename std::enable_if< std::is_enum< ENUM >::value &&ts::EnableBitMaskOperators< ENUM >::value >::type * = nullptr>
ENUM & operator>>= (ENUM &a, size_t b)
template<typename ENUM>
requires std::is_enum_v<ENUM> && ts::EnableBitMaskOperators<ENUM>::value
constexpr ENUM operator^ (ENUM a, ENUM b)
template<typename ENUM>
requires std::is_enum_v<ENUM> && ts::EnableBitMaskOperators<ENUM>::value
ENUM & operator^= (ENUM &a, ENUM b)
template<typename ENUM>
requires std::is_enum_v<ENUM> && ts::EnableBitMaskOperators<ENUM>::value
constexpr ENUM operator| (ENUM a, ENUM b)
template<typename ENUM>
requires std::is_enum_v<ENUM> && ts::EnableBitMaskOperators<ENUM>::value
ENUM & operator|= (ENUM &a, ENUM b)
template<typename ENUM>
requires std::is_enum_v<ENUM> && ts::EnableBitMaskOperators<ENUM>::value
constexpr ENUM operator~ (ENUM a)

Detailed Description

Some utilities on enumeration types.

Function Documentation

◆ operator~()

template<typename ENUM>
requires std::is_enum_v<ENUM> && ts::EnableBitMaskOperators<ENUM>::value
ENUM operator~ ( ENUM a)
inlineconstexpr

Bitmask "not" unary operator on enumeration types.

Template Parameters
ENUMAn enumeration type or enumeration class.
Parameters
[in]aOperand.
Returns
Bitwise "not" a

◆ operator!()

template<typename ENUM>
requires std::is_enum_v<ENUM> && ts::EnableBitMaskOperators<ENUM>::value
bool operator! ( ENUM a)
inlineconstexpr

Boolean "not" operator on enumeration types.

Template Parameters
ENUMAn enumeration type or enumeration class.
Parameters
[in]aEnumeration value. Typically an expression uing bitmask "and" or "or" operators on ENUM.
Returns
True if a is zero (no flag set).

◆ operator|()

template<typename ENUM>
requires std::is_enum_v<ENUM> && ts::EnableBitMaskOperators<ENUM>::value
ENUM operator| ( ENUM a,
ENUM b )
inlineconstexpr

Bitmask "or" operator on enumeration types.

Template Parameters
ENUMAn enumeration type or enumeration class.
Parameters
[in]aFirst operand.
[in]bSecond operand.
Returns
Bitwise a "or" b

◆ operator&()

template<typename ENUM>
requires std::is_enum_v<ENUM> && ts::EnableBitMaskOperators<ENUM>::value
ENUM operator& ( ENUM a,
ENUM b )
inlineconstexpr

Bitmask "and" operator on enumeration types.

Template Parameters
ENUMAn enumeration type or enumeration class.
Parameters
[in]aFirst operand.
[in]bSecond operand.
Returns
Bitwise a "and" b

◆ operator^()

template<typename ENUM>
requires std::is_enum_v<ENUM> && ts::EnableBitMaskOperators<ENUM>::value
ENUM operator^ ( ENUM a,
ENUM b )
inlineconstexpr

Bitmask "xor" operator on enumeration types.

Template Parameters
ENUMAn enumeration type or enumeration class.
Parameters
[in]aFirst operand.
[in]bSecond operand.
Returns
Bitwise a "xor" b

◆ operator|=()

template<typename ENUM>
requires std::is_enum_v<ENUM> && ts::EnableBitMaskOperators<ENUM>::value
ENUM & operator|= ( ENUM & a,
ENUM b )
inline

Bitmask "assign or" operator on enumeration types.

Template Parameters
ENUMAn enumeration type or enumeration class.
Parameters
[in,out]aVariable to update.
[in]bSecond operand.
Returns
A reference to a.

◆ operator&=()

template<typename ENUM>
requires std::is_enum_v<ENUM> && ts::EnableBitMaskOperators<ENUM>::value
ENUM & operator&= ( ENUM & a,
ENUM b )
inline

Bitmask "assign and" operator on enumeration types.

Template Parameters
ENUMAn enumeration type or enumeration class.
Parameters
[in,out]aVariable to update.
[in]bSecond operand.
Returns
A reference to a.

◆ operator^=()

template<typename ENUM>
requires std::is_enum_v<ENUM> && ts::EnableBitMaskOperators<ENUM>::value
ENUM & operator^= ( ENUM & a,
ENUM b )
inline

Bitmask "assign xor" operator on enumeration types.

Template Parameters
ENUMAn enumeration type or enumeration class.
Parameters
[in,out]aVariable to update.
[in]bSecond operand.
Returns
A reference to a.

◆ operator<<()

template<typename ENUM, typename std::enable_if< std::is_enum< ENUM >::value &&ts::EnableBitMaskOperators< ENUM >::value >::type * = nullptr>
ENUM operator<< ( ENUM a,
size_t b )
inlineconstexpr

Bitmask "left shift" operator on enumeration types.

Template Parameters
ENUMAn enumeration type or enumeration class.
Parameters
[in]aEnum value to shift.
[in]bNumber of bits to shift.
Returns
Bitwise a, shifted left b bits.

Implementation note: The use of std::enable_if instead of the "requires" directive is a workaround for a bug in clang 19.

◆ operator>>()

template<typename ENUM, typename std::enable_if< std::is_enum< ENUM >::value &&ts::EnableBitMaskOperators< ENUM >::value >::type * = nullptr>
ENUM operator>> ( ENUM a,
size_t b )
inlineconstexpr

Bitmask "right shift" operator on enumeration types.

Template Parameters
ENUMAn enumeration type or enumeration class.
Parameters
[in]aEnum value to shift.
[in]bNumber of bits to shift.
Returns
Bitwise a, shifted right b bits.

Implementation note: The use of std::enable_if instead of the "requires" directive is a workaround for a bug in clang 19.

◆ operator<<=()

template<typename ENUM, typename std::enable_if< std::is_enum< ENUM >::value &&ts::EnableBitMaskOperators< ENUM >::value >::type * = nullptr>
ENUM & operator<<= ( ENUM & a,
size_t b )
inline

Bitmask "assign left shift" operator on enumeration types.

Template Parameters
ENUMAn enumeration type or enumeration class.
Parameters
[in,out]aEnum variable to shift.
[in]bNumber of bits to shift.
Returns
A reference to a.

Implementation note: The use of std::enable_if instead of the "requires" directive is a workaround for a bug in clang 19.

◆ operator>>=()

template<typename ENUM, typename std::enable_if< std::is_enum< ENUM >::value &&ts::EnableBitMaskOperators< ENUM >::value >::type * = nullptr>
ENUM & operator>>= ( ENUM & a,
size_t b )
inline

Bitmask "assign right shift" operator on enumeration types.

Template Parameters
ENUMAn enumeration type or enumeration class.
Parameters
[in,out]aEnum variable to shift.
[in]bNumber of bits to shift.
Returns
A reference to a.

Implementation note: The use of std::enable_if instead of the "requires" directive is a workaround for a bug in clang 19.