29#ifndef _GLIBCXX_STDBIT_H
30#define _GLIBCXX_STDBIT_H
32#define __glibcxx_want_stdbit_h
35#ifdef __cpp_lib_stdbit_h
39#define __STDC_VERSION_STDBIT_H__ 202311L
41#define __STDC_ENDIAN_BIG__ __ORDER_BIG_ENDIAN__
42#define __STDC_ENDIAN_LITTLE__ __ORDER_LITTLE_ENDIAN__
43#define __STDC_ENDIAN_NATIVE__ __BYTE_ORDER__
45#ifndef _GLIBCXX_DOXYGEN
47namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
59stdc_leading_zeros(_Tp __value)
61 static_assert(std::__unsigned_integer<_Tp>);
62 return std::countl_zero(__value);
66stdc_leading_zeros_uc(
unsigned char __value)
67{
return stdc_leading_zeros(__value); }
70stdc_leading_zeros_us(
unsigned short __value)
71{
return stdc_leading_zeros(__value); }
74stdc_leading_zeros_ui(
unsigned int __value)
75{
return stdc_leading_zeros(__value); }
78stdc_leading_zeros_ul(
unsigned long int __value)
79{
return stdc_leading_zeros(__value); }
82stdc_leading_zeros_ull(
unsigned long long int __value)
83{
return stdc_leading_zeros(__value); }
94stdc_leading_ones(_Tp __value)
96 static_assert(std::__unsigned_integer<_Tp>);
97 return std::countl_one(__value);
101stdc_leading_ones_uc(
unsigned char __value)
102{
return stdc_leading_ones(__value); }
105stdc_leading_ones_us(
unsigned short __value)
106{
return stdc_leading_ones(__value); }
109stdc_leading_ones_ui(
unsigned int __value)
110{
return stdc_leading_ones(__value); }
113stdc_leading_ones_ul(
unsigned long int __value)
114{
return stdc_leading_ones(__value); }
117stdc_leading_ones_ull(
unsigned long long int __value)
118{
return stdc_leading_ones(__value); }
127template<
typename _Tp>
129stdc_trailing_zeros(_Tp __value)
131 static_assert(std::__unsigned_integer<_Tp>);
132 return std::countr_zero(__value);
136stdc_trailing_zeros_uc(
unsigned char __value)
137{
return stdc_trailing_zeros(__value); }
140stdc_trailing_zeros_us(
unsigned short __value)
141{
return stdc_trailing_zeros(__value); }
144stdc_trailing_zeros_ui(
unsigned int __value)
145{
return stdc_trailing_zeros(__value); }
148stdc_trailing_zeros_ul(
unsigned long int __value)
149{
return stdc_trailing_zeros(__value); }
152stdc_trailing_zeros_ull(
unsigned long long int __value)
153{
return stdc_trailing_zeros(__value); }
162template<
typename _Tp>
164stdc_trailing_ones(_Tp __value)
166 static_assert(std::__unsigned_integer<_Tp>);
167 return std::countr_one(__value);
171stdc_trailing_ones_uc(
unsigned char __value)
172{
return stdc_trailing_ones(__value); }
175stdc_trailing_ones_us(
unsigned short __value)
176{
return stdc_trailing_ones(__value); }
179stdc_trailing_ones_ui(
unsigned int __value)
180{
return stdc_trailing_ones(__value); }
183stdc_trailing_ones_ul(
unsigned long int __value)
184{
return stdc_trailing_ones(__value); }
187stdc_trailing_ones_ull(
unsigned long long int __value)
188{
return stdc_trailing_ones(__value); }
199template<
typename _Tp>
201stdc_first_leading_zero(_Tp __value)
203 static_assert(std::__unsigned_integer<_Tp>);
204 return __value == _Tp(-1) ? 0 : 1 + std::countl_one(__value);
208stdc_first_leading_zero_uc(
unsigned char __value)
209{
return stdc_first_leading_zero(__value); }
212stdc_first_leading_zero_us(
unsigned short __value)
213{
return stdc_first_leading_zero(__value); }
216stdc_first_leading_zero_ui(
unsigned int __value)
217{
return stdc_first_leading_zero(__value); }
220stdc_first_leading_zero_ul(
unsigned long int __value)
221{
return stdc_first_leading_zero(__value); }
224stdc_first_leading_zero_ull(
unsigned long long int __value)
225{
return stdc_first_leading_zero(__value); }
236template<
typename _Tp>
238stdc_first_leading_one(_Tp __value)
240 static_assert(std::__unsigned_integer<_Tp>);
241 return __value == 0 ? 0 : 1 + std::countl_zero(__value);
245stdc_first_leading_one_uc(
unsigned char __value)
246{
return stdc_first_leading_one(__value); }
249stdc_first_leading_one_us(
unsigned short __value)
250{
return stdc_first_leading_one(__value); }
253stdc_first_leading_one_ui(
unsigned int __value)
254{
return stdc_first_leading_one(__value); }
257stdc_first_leading_one_ul(
unsigned long int __value)
258{
return stdc_first_leading_one(__value); }
261stdc_first_leading_one_ull(
unsigned long long int __value)
262{
return stdc_first_leading_one(__value); }
273template<
typename _Tp>
275stdc_first_trailing_zero(_Tp __value)
277 static_assert(std::__unsigned_integer<_Tp>);
278 return __value == _Tp(-1) ? 0 : 1 + std::countr_one(__value);
282stdc_first_trailing_zero_uc(
unsigned char __value)
283{
return stdc_first_trailing_zero(__value); }
286stdc_first_trailing_zero_us(
unsigned short __value)
287{
return stdc_first_trailing_zero(__value); }
290stdc_first_trailing_zero_ui(
unsigned int __value)
291{
return stdc_first_trailing_zero(__value); }
294stdc_first_trailing_zero_ul(
unsigned long int __value)
295{
return stdc_first_trailing_zero(__value); }
298stdc_first_trailing_zero_ull(
unsigned long long int __value)
299{
return stdc_first_trailing_zero(__value); }
310template<
typename _Tp>
312stdc_first_trailing_one(_Tp __value)
314 static_assert(std::__unsigned_integer<_Tp>);
315 return __value == 0 ? 0 : 1 + std::countr_zero(__value);
319stdc_first_trailing_one_uc(
unsigned char __value)
320{
return stdc_first_trailing_one(__value); }
323stdc_first_trailing_one_us(
unsigned short __value)
324{
return stdc_first_trailing_one(__value); }
327stdc_first_trailing_one_ui(
unsigned int __value)
328{
return stdc_first_trailing_one(__value); }
331stdc_first_trailing_one_ul(
unsigned long int __value)
332{
return stdc_first_trailing_one(__value); }
335stdc_first_trailing_one_ull(
unsigned long long int __value)
336{
return stdc_first_trailing_one(__value); }
346template<
typename _Tp>
348stdc_count_zeros(_Tp __value)
350 static_assert(std::__unsigned_integer<_Tp>);
351 return std::popcount(_Tp(~__value));
355stdc_count_zeros_uc(
unsigned char __value)
356{
return stdc_count_zeros(__value); }
359stdc_count_zeros_us(
unsigned short __value)
360{
return stdc_count_zeros(__value); }
363stdc_count_zeros_ui(
unsigned int __value)
364{
return stdc_count_zeros(__value); }
367stdc_count_zeros_ul(
unsigned long int __value)
368{
return stdc_count_zeros(__value); }
371stdc_count_zeros_ull(
unsigned long long int __value)
372{
return stdc_count_zeros(__value); }
382template<
typename _Tp>
384stdc_count_ones(_Tp __value)
386 static_assert(std::__unsigned_integer<_Tp>);
387 return std::popcount(__value);
391stdc_count_ones_uc(
unsigned char __value)
392{
return stdc_count_ones(__value); }
395stdc_count_ones_us(
unsigned short __value)
396{
return stdc_count_ones(__value); }
399stdc_count_ones_ui(
unsigned int __value)
400{
return stdc_count_ones(__value); }
403stdc_count_ones_ul(
unsigned long int __value)
404{
return stdc_count_ones(__value); }
407stdc_count_ones_ull(
unsigned long long int __value)
408{
return stdc_count_ones(__value); }
418template<
typename _Tp>
420stdc_has_single_bit(_Tp __value)
422 static_assert(std::__unsigned_integer<_Tp>);
423 return std::has_single_bit(__value);
427stdc_has_single_bit_uc(
unsigned char __value)
428{
return stdc_has_single_bit(__value); }
431stdc_has_single_bit_us(
unsigned short __value)
432{
return stdc_has_single_bit(__value); }
435stdc_has_single_bit_ui(
unsigned int __value)
436{
return stdc_has_single_bit(__value); }
439stdc_has_single_bit_ul(
unsigned long int __value)
440{
return stdc_has_single_bit(__value); }
443stdc_has_single_bit_ull(
unsigned long long int __value)
444{
return stdc_has_single_bit(__value); }
454template<
typename _Tp>
456stdc_bit_width(_Tp __value)
458 static_assert(std::__unsigned_integer<_Tp>);
459 return std::bit_width(__value);
463stdc_bit_width_uc(
unsigned char __value)
464{
return stdc_bit_width(__value); }
467stdc_bit_width_us(
unsigned short __value)
468{
return stdc_bit_width(__value); }
471stdc_bit_width_ui(
unsigned int __value)
472{
return stdc_bit_width(__value); }
475stdc_bit_width_ul(
unsigned long int __value)
476{
return stdc_bit_width(__value); }
479stdc_bit_width_ull(
unsigned long long int __value)
480{
return stdc_bit_width(__value); }
490template<
typename _Tp>
492stdc_bit_floor(_Tp __value)
494 static_assert(std::__unsigned_integer<_Tp>);
495 return std::bit_floor(__value);
499stdc_bit_floor_uc(
unsigned char __value)
500{
return stdc_bit_floor(__value); }
503stdc_bit_floor_us(
unsigned short __value)
504{
return stdc_bit_floor(__value); }
507stdc_bit_floor_ui(
unsigned int __value)
508{
return stdc_bit_floor(__value); }
510inline unsigned long int
511stdc_bit_floor_ul(
unsigned long int __value)
512{
return stdc_bit_floor(__value); }
514inline unsigned long long int
515stdc_bit_floor_ull(
unsigned long long int __value)
516{
return stdc_bit_floor(__value); }
529template<
typename _Tp>
531stdc_bit_ceil(_Tp __value)
533 static_assert(std::__unsigned_integer<_Tp>);
534 constexpr _Tp __msb = _Tp(1) << (__gnu_cxx::__int_traits<_Tp>::__digits - 1);
535 return (__value & __msb) ? 0 : std::bit_ceil(__value);
539stdc_bit_ceil_uc(
unsigned char __value)
540{
return stdc_bit_ceil(__value); }
543stdc_bit_ceil_us(
unsigned short __value)
544{
return stdc_bit_ceil(__value); }
547stdc_bit_ceil_ui(
unsigned int __value)
548{
return stdc_bit_ceil(__value); }
550inline unsigned long int
551stdc_bit_ceil_ul(
unsigned long int __value)
552{
return stdc_bit_ceil(__value); }
554inline unsigned long long int
555stdc_bit_ceil_ull(
unsigned long long int __value)
556{
return stdc_bit_ceil(__value); }
559#ifndef _GLIBCXX_DOXYGEN
561#define _GLIBCXX_STDBIT_FUNC(F) \
562 using __gnu_cxx::F ## _uc; \
563 using __gnu_cxx::F ## _us; \
564 using __gnu_cxx::F ## _ui; \
565 using __gnu_cxx::F ## _ul; \
566 using __gnu_cxx::F ## _ull; \
568_GLIBCXX_STDBIT_FUNC(stdc_leading_zeros);
569_GLIBCXX_STDBIT_FUNC(stdc_leading_ones);
570_GLIBCXX_STDBIT_FUNC(stdc_trailing_zeros);
571_GLIBCXX_STDBIT_FUNC(stdc_trailing_ones);
572_GLIBCXX_STDBIT_FUNC(stdc_first_leading_zero);
573_GLIBCXX_STDBIT_FUNC(stdc_first_leading_one);
574_GLIBCXX_STDBIT_FUNC(stdc_first_trailing_zero);
575_GLIBCXX_STDBIT_FUNC(stdc_first_trailing_one);
576_GLIBCXX_STDBIT_FUNC(stdc_count_zeros);
577_GLIBCXX_STDBIT_FUNC(stdc_count_ones);
578_GLIBCXX_STDBIT_FUNC(stdc_has_single_bit);
579_GLIBCXX_STDBIT_FUNC(stdc_bit_width);
580_GLIBCXX_STDBIT_FUNC(stdc_bit_floor);
581_GLIBCXX_STDBIT_FUNC(stdc_bit_ceil);
582#undef _GLIBCXX_STDBIT_FUNC
GNU extensions for public use.