31#ifndef ETL_BIT_INCLUDED
32#define ETL_BIT_INCLUDED
42#if ETL_USING_CPP20 && ETL_USING_STL
51 template <
typename TDestination,
typename TSource>
53 typename etl::enable_if< !(etl::is_integral<TDestination>::value && etl::is_integral<TSource>::value) && (
sizeof(TDestination) ==
sizeof(TSource))
54 && etl::is_trivially_copyable<TSource>::value && etl::is_trivially_copyable<TDestination>::value,
57 TDestination destination;
59 memcpy(&destination, &source,
sizeof(TDestination));
67 template <
typename TDestination,
typename TSource>
68 ETL_NODISCARD ETL_CONSTEXPR14
69 typename etl::enable_if< (etl::is_integral<TDestination>::value && etl::is_integral<TSource>::value) && (
sizeof(TDestination) ==
sizeof(TSource)),
72 return static_cast<TDestination
>(source);
79 ETL_CONSTEXPR14
typename etl::enable_if<etl::is_integral<T>::value, T>
::type byteswap(T value) ETL_NOEXCEPT
88 ETL_NODISCARD ETL_CONSTEXPR14
typename etl::enable_if<etl::is_unsigned<T>::value,
bool>
::type has_single_bit(T value) ETL_NOEXCEPT
90 return (value & (value - 1)) == 0;
96 ETL_NODISCARD ETL_CONSTEXPR14
typename etl::enable_if<etl::is_unsigned<T>::value,
int>
::type countl_zero(T value) ETL_NOEXCEPT
104 template <
typename T>
105 ETL_NODISCARD ETL_CONSTEXPR14
typename etl::enable_if<etl::is_unsigned<T>::value,
int>
::type countl_one(T value) ETL_NOEXCEPT
113 template <
typename T>
114 ETL_NODISCARD ETL_CONSTEXPR14
typename etl::enable_if<etl::is_unsigned<T>::value,
int>
::type countr_zero(T value) ETL_NOEXCEPT
122 template <
typename T>
123 ETL_NODISCARD ETL_CONSTEXPR14
typename etl::enable_if<etl::is_unsigned<T>::value,
int>
::type countr_one(T value) ETL_NOEXCEPT
131 template <
typename T>
132 ETL_CONSTEXPR14
typename etl::enable_if<etl::is_unsigned<T>::value, T>
::type bit_width(T value) ETL_NOEXCEPT
134#if ETL_USING_CPP20 && ETL_USING_STL
135 return static_cast<T
>(std::bit_width(value));
144 template <
typename T>
145 ETL_NODISCARD ETL_CONSTEXPR14
typename etl::enable_if<etl::is_unsigned<T>::value, T>
::type bit_ceil(T value)
147#if ETL_USING_CPP20 && ETL_USING_STL
148 return std::bit_ceil(value);
164 template <
typename T>
165 ETL_NODISCARD ETL_CONSTEXPR14
typename etl::enable_if<etl::is_unsigned<T>::value, T>
::type bit_floor(T value) ETL_NOEXCEPT
167#if ETL_USING_CPP20 && ETL_USING_STL
168 return std::bit_floor(value);
184 template <
typename T>
185 ETL_NODISCARD ETL_CONSTEXPR14
typename etl::enable_if<etl::is_unsigned<T>::value, T>
::type rotl(T value,
int n) ETL_NOEXCEPT
200 template <
typename T>
201 ETL_NODISCARD ETL_CONSTEXPR14
typename etl::enable_if<etl::is_unsigned<T>::value, T>
::type rotr(T value,
int n) ETL_NOEXCEPT
216 template <
typename T>
217 ETL_NODISCARD ETL_CONSTEXPR14
typename etl::enable_if<etl::is_unsigned<T>::value,
int>
::type popcount(T value) ETL_NOEXCEPT
ETL_CONSTEXPR14 etl::enable_if< etl::is_integral< T >::value &&etl::is_unsigned< T >::value &&(etl::integral_limits< T >::bits==16U), uint_least8_t >::type count_trailing_ones(T value)
Definition binary.h:1377
ETL_CONSTEXPR14 T rotate_left(T value)
Definition binary.h:117
ETL_CONSTEXPR14 etl::enable_if< etl::is_integral< T >::value &&etl::is_unsigned< T >::value &&(etl::integral_limits< T >::bits==16U), uint_least8_t >::type count_bits(T value)
Definition binary.h:918
ETL_CONSTEXPR14 etl::enable_if< etl::is_integral< T >::value &&etl::is_unsigned< T >::value &&(etl::integral_limits< T >::bits==16U), uint_least8_t >::type count_trailing_zeros(T value)
Definition binary.h:1133
ETL_CONSTEXPR14 etl::enable_if< etl::is_integral< T >::value &&etl::is_unsigned< T >::value &&(etl::integral_limits< T >::bits==16U), uint_least8_t >::type count_leading_ones(T value)
Definition binary.h:1859
ETL_CONSTEXPR14 etl::enable_if< etl::is_integral< T >::value &&etl::is_unsigned< T >::value &&(etl::integral_limits< T >::bits==16U), uint_least8_t >::type count_leading_zeros(T value)
Definition binary.h:1615
ETL_CONSTEXPR14 etl::enable_if< etl::is_integral< T >::value &&etl::is_unsigned< T >::value &&(etl::integral_limits< T >::bits==16U), T >::type reverse_bytes(T value)
Definition binary.h:745
ETL_CONSTEXPR14 T rotate_right(T value)
Definition binary.h:162
Definition integral_limits.h:518
bitset_ext
Definition absolute.h:40
ETL_NODISCARD ETL_CONSTEXPR14 etl::enable_if< etl::is_unsigned< T >::value, T >::type rotr(T value, int n) ETL_NOEXCEPT
rotr
Definition bit.h:201
ETL_NODISCARD ETL_CONSTEXPR14 etl::enable_if< etl::is_unsigned< T >::value, int >::type countl_one(T value) ETL_NOEXCEPT
countl_one
Definition bit.h:105
ETL_NODISCARD ETL_CONSTEXPR14 etl::enable_if< etl::is_unsigned< T >::value, T >::type rotl(T value, int n) ETL_NOEXCEPT
rotl
Definition bit.h:185
ETL_NODISCARD ETL_CONSTEXPR14 etl::enable_if< etl::is_unsigned< T >::value, T >::type bit_floor(T value) ETL_NOEXCEPT
bit_floor
Definition bit.h:165
ETL_CONSTEXPR14 etl::enable_if< etl::is_integral< T >::value, T >::type byteswap(T value) ETL_NOEXCEPT
byteswap
Definition bit.h:79
ETL_NODISCARD ETL_CONSTEXPR14 etl::enable_if< etl::is_unsigned< T >::value, int >::type popcount(T value) ETL_NOEXCEPT
popcount
Definition bit.h:217
ETL_NODISCARD ETL_CONSTEXPR14 etl::enable_if< etl::is_unsigned< T >::value, bool >::type has_single_bit(T value) ETL_NOEXCEPT
has_single_bit
Definition bit.h:88
ETL_NODISCARD ETL_CONSTEXPR14 etl::enable_if< etl::is_unsigned< T >::value, int >::type countr_one(T value) ETL_NOEXCEPT
countr_one
Definition bit.h:123
ETL_CONSTEXPR14 etl::enable_if< etl::is_unsigned< T >::value, T >::type bit_width(T value) ETL_NOEXCEPT
bit_width
Definition bit.h:132
ETL_NODISCARD ETL_CONSTEXPR14 etl::enable_if< etl::is_unsigned< T >::value, int >::type countr_zero(T value) ETL_NOEXCEPT
countr_zero
Definition bit.h:114
ETL_NODISCARD ETL_CONSTEXPR14 etl::enable_if< etl::is_unsigned< T >::value, T >::type bit_ceil(T value)
bit_ceil
Definition bit.h:145
ETL_NODISCARD ETL_CONSTEXPR14 etl::enable_if< etl::is_unsigned< T >::value, int >::type countl_zero(T value) ETL_NOEXCEPT
countl_zero
Definition bit.h:96
ETL_NODISCARD etl::enable_if<!(etl::is_integral< TDestination >::value &&etl::is_integral< TSource >::value)&&(sizeof(TDestination)==sizeof(TSource))&&etl::is_trivially_copyable< TSource >::value &&etl::is_trivially_copyable< TDestination >::value, TDestination >::type bit_cast(const TSource &source) ETL_NOEXCEPT
bit_cast - Type to different type.
Definition bit.h:55