29#ifndef _GLIBCXX_STDBIT_H
30#define _GLIBCXX_STDBIT_H
32#if __cplusplus > 202302L
35#define __STDC_VERSION_STDBIT_H__ 202311L
37#define __STDC_ENDIAN_BIG__ __ORDER_BIG_ENDIAN__
38#define __STDC_ENDIAN_LITTLE__ __ORDER_LITTLE_ENDIAN__
39#define __STDC_ENDIAN_NATIVE__ __BYTE_ORDER__
41#ifndef _GLIBCXX_DOXYGEN
43namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
57 static_assert(std::__unsigned_integer<_Tp>);
58 return std::countl_zero(__value);
92 static_assert(std::__unsigned_integer<_Tp>);
93 return std::countl_one(__value);
123template<
typename _Tp>
127 static_assert(std::__unsigned_integer<_Tp>);
128 return std::countr_zero(__value);
158template<
typename _Tp>
162 static_assert(std::__unsigned_integer<_Tp>);
163 return std::countr_one(__value);
195template<
typename _Tp>
199 static_assert(std::__unsigned_integer<_Tp>);
200 return __value == _Tp(-1) ? 0 : 1 + std::countl_one(__value);
232template<
typename _Tp>
236 static_assert(std::__unsigned_integer<_Tp>);
237 return __value == 0 ? 0 : 1 + std::countl_zero(__value);
269template<
typename _Tp>
273 static_assert(std::__unsigned_integer<_Tp>);
274 return __value == _Tp(-1) ? 0 : 1 + std::countr_one(__value);
306template<
typename _Tp>
310 static_assert(std::__unsigned_integer<_Tp>);
311 return __value == 0 ? 0 : 1 + std::countr_zero(__value);
342template<
typename _Tp>
346 static_assert(std::__unsigned_integer<_Tp>);
347 return std::popcount(_Tp(~__value));
378template<
typename _Tp>
382 static_assert(std::__unsigned_integer<_Tp>);
383 return std::popcount(__value);
414template<
typename _Tp>
418 static_assert(std::__unsigned_integer<_Tp>);
419 return std::has_single_bit(__value);
450template<
typename _Tp>
454 static_assert(std::__unsigned_integer<_Tp>);
455 return std::bit_width(__value);
486template<
typename _Tp>
490 static_assert(std::__unsigned_integer<_Tp>);
491 return std::bit_floor(__value);
506inline unsigned long int
510inline unsigned long long int
525template<
typename _Tp>
529 static_assert(std::__unsigned_integer<_Tp>);
530 constexpr _Tp __msb = _Tp(1) << (__gnu_cxx::__int_traits<_Tp>::__digits - 1);
531 return (__value & __msb) ? 0 : std::bit_ceil(__value);
546inline unsigned long int
550inline unsigned long long int
555#ifndef _GLIBCXX_DOXYGEN
557#define _GLIBCXX_STDBIT_FUNC(F) \
558 using __gnu_cxx::F ## _uc; \
559 using __gnu_cxx::F ## _us; \
560 using __gnu_cxx::F ## _ui; \
561 using __gnu_cxx::F ## _ul; \
562 using __gnu_cxx::F ## _ull; \
578#undef _GLIBCXX_STDBIT_FUNC
unsigned int stdc_leading_zeros(_Tp __value)
unsigned int stdc_first_trailing_zero(_Tp __value)
bool stdc_has_single_bit(_Tp __value)
unsigned int stdc_first_leading_zero(_Tp __value)
unsigned int stdc_trailing_ones(_Tp __value)
_Tp stdc_bit_floor(_Tp __value)
unsigned int stdc_first_trailing_one(_Tp __value)
_Tp stdc_bit_ceil(_Tp __value)
unsigned int stdc_count_ones(_Tp __value)
unsigned int stdc_trailing_zeros(_Tp __value)
unsigned int stdc_bit_width(_Tp __value)
unsigned int stdc_count_zeros(_Tp __value)
unsigned int stdc_leading_ones(_Tp __value)
unsigned int stdc_first_leading_one(_Tp __value)
GNU extensions for public use.
unsigned int stdc_leading_zeros(_Tp __value)
unsigned int stdc_first_trailing_one_uc(unsigned char __value)
unsigned int stdc_trailing_ones_ul(unsigned long int __value)
unsigned int stdc_leading_zeros_ul(unsigned long int __value)
unsigned int stdc_first_trailing_zero(_Tp __value)
unsigned int stdc_first_trailing_zero_us(unsigned short __value)
unsigned int stdc_trailing_zeros_ui(unsigned int __value)
bool stdc_has_single_bit_us(unsigned short __value)
unsigned int stdc_count_ones_ull(unsigned long long int __value)
unsigned int stdc_first_leading_one_uc(unsigned char __value)
unsigned int stdc_bit_width_us(unsigned short __value)
unsigned int stdc_trailing_ones_ull(unsigned long long int __value)
unsigned int stdc_first_trailing_one_ul(unsigned long int __value)
unsigned int stdc_leading_ones_us(unsigned short __value)
bool stdc_has_single_bit_ul(unsigned long int __value)
bool stdc_has_single_bit(_Tp __value)
unsigned int stdc_leading_zeros_us(unsigned short __value)
unsigned long long int stdc_bit_ceil_ull(unsigned long long int __value)
unsigned int stdc_trailing_zeros_ul(unsigned long int __value)
unsigned int stdc_count_ones_uc(unsigned char __value)
unsigned int stdc_first_leading_zero(_Tp __value)
unsigned int stdc_first_leading_one_ui(unsigned int __value)
unsigned long long int stdc_bit_floor_ull(unsigned long long int __value)
unsigned int stdc_leading_ones_ui(unsigned int __value)
unsigned int stdc_count_zeros_ul(unsigned long int __value)
unsigned int stdc_bit_width_ul(unsigned long int __value)
unsigned int stdc_trailing_ones(_Tp __value)
_Tp stdc_bit_floor(_Tp __value)
unsigned int stdc_trailing_ones_ui(unsigned int __value)
unsigned long int stdc_bit_floor_ul(unsigned long int __value)
unsigned int stdc_first_leading_one_us(unsigned short __value)
unsigned int stdc_bit_ceil_ui(unsigned int __value)
unsigned int stdc_leading_ones_ull(unsigned long long int __value)
unsigned int stdc_first_trailing_zero_ul(unsigned long int __value)
unsigned int stdc_count_zeros_us(unsigned short __value)
unsigned int stdc_first_leading_zero_ul(unsigned long int __value)
unsigned short stdc_bit_ceil_us(unsigned short __value)
unsigned int stdc_first_trailing_one_ui(unsigned int __value)
unsigned int stdc_first_leading_zero_ui(unsigned int __value)
unsigned int stdc_first_trailing_zero_ull(unsigned long long int __value)
unsigned int stdc_trailing_zeros_ull(unsigned long long int __value)
unsigned int stdc_count_zeros_ui(unsigned int __value)
bool stdc_has_single_bit_ull(unsigned long long int __value)
unsigned int stdc_count_zeros_uc(unsigned char __value)
unsigned int stdc_bit_width_uc(unsigned char __value)
unsigned int stdc_leading_zeros_ui(unsigned int __value)
unsigned int stdc_count_zeros_ull(unsigned long long int __value)
unsigned int stdc_bit_width_ui(unsigned int __value)
unsigned int stdc_first_trailing_one(_Tp __value)
_Tp stdc_bit_ceil(_Tp __value)
unsigned int stdc_trailing_zeros_uc(unsigned char __value)
unsigned int stdc_count_ones_us(unsigned short __value)
unsigned int stdc_trailing_zeros_us(unsigned short __value)
unsigned int stdc_first_trailing_one_us(unsigned short __value)
unsigned int stdc_first_trailing_zero_uc(unsigned char __value)
unsigned short stdc_bit_floor_us(unsigned short __value)
unsigned int stdc_first_trailing_zero_ui(unsigned int __value)
unsigned int stdc_count_ones_ul(unsigned long int __value)
unsigned int stdc_leading_zeros_ull(unsigned long long int __value)
unsigned int stdc_count_ones_ui(unsigned int __value)
unsigned int stdc_count_ones(_Tp __value)
unsigned char stdc_bit_floor_uc(unsigned char __value)
unsigned int stdc_trailing_ones_us(unsigned short __value)
unsigned int stdc_leading_ones_ul(unsigned long int __value)
unsigned int stdc_trailing_ones_uc(unsigned char __value)
unsigned int stdc_leading_ones_uc(unsigned char __value)
unsigned int stdc_first_leading_zero_us(unsigned short __value)
unsigned int stdc_trailing_zeros(_Tp __value)
unsigned int stdc_first_leading_zero_uc(unsigned char __value)
unsigned int stdc_leading_zeros_uc(unsigned char __value)
unsigned long int stdc_bit_ceil_ul(unsigned long int __value)
bool stdc_has_single_bit_uc(unsigned char __value)
unsigned int stdc_bit_width(_Tp __value)
unsigned int stdc_count_zeros(_Tp __value)
bool stdc_has_single_bit_ui(unsigned int __value)
unsigned int stdc_leading_ones(_Tp __value)
unsigned int stdc_first_leading_one_ul(unsigned long int __value)
unsigned int stdc_bit_width_ull(unsigned long long int __value)
unsigned int stdc_first_leading_one(_Tp __value)
unsigned int stdc_first_leading_one_ull(unsigned long long int __value)
unsigned int stdc_first_trailing_one_ull(unsigned long long int __value)
unsigned char stdc_bit_ceil_uc(unsigned char __value)
unsigned int stdc_first_leading_zero_ull(unsigned long long int __value)
unsigned int stdc_bit_floor_ui(unsigned int __value)