__ __ __ __ _____ _ _ _____ _ _ _ | \/ | \ \ / / | __ \ (_) | | / ____| | | | | | \ / |_ __\ V / | |__) | __ ___ ____ _| |_ ___ | (___ | |__ ___| | | | |\/| | '__|> < | ___/ '__| \ \ / / _` | __/ _ \ \___ \| '_ \ / _ \ | | | | | | |_ / . \ | | | | | |\ V / (_| | || __/ ____) | | | | __/ | | |_| |_|_(_)_/ \_\ |_| |_| |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1 if you need WebShell for Seo everyday contact me on Telegram Telegram Address : @jackleetFor_More_Tools:
// <bit> -*- C++ -*-
// Copyright (C) 2018-2024 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
// terms of the GNU General Public License as published by the
// Free Software Foundation; either version 3, or (at your option)
// any later version.
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// Under Section 7 of GPL version 3, you are granted additional
// permissions described in the GCC Runtime Library Exception, version
// 3.1, as published by the Free Software Foundation.
// You should have received a copy of the GNU General Public License and
// a copy of the GCC Runtime Library Exception along with this program;
// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
// <http://www.gnu.org/licenses/>.
/** @file include/bit
* This is a Standard C++ Library header.
*/
#ifndef _GLIBCXX_BIT
#define _GLIBCXX_BIT 1
#pragma GCC system_header
#if __cplusplus >= 201402L
#include <concepts> // for std::integral
#include <type_traits>
#if _GLIBCXX_HOSTED || __has_include(<ext/numeric_traits.h>)
# include <ext/numeric_traits.h>
#else
# include <limits>
/// @cond undocumented
namespace __gnu_cxx
{
template<typename _Tp>
struct __int_traits
{
static constexpr int __digits = std::numeric_limits<_Tp>::digits;
static constexpr _Tp __max = std::numeric_limits<_Tp>::max();
};
}
/// @endcond
#endif
#define __glibcxx_want_bit_cast
#define __glibcxx_want_byteswap
#define __glibcxx_want_bitops
#define __glibcxx_want_int_pow2
#define __glibcxx_want_endian
#include <bits/version.h>
namespace std _GLIBCXX_VISIBILITY(default)
{
_GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @defgroup bit_manip Bit manipulation
* @ingroup numerics
*
* Utilities for examining and manipulating individual bits.
*
* @{
*/
#ifdef __cpp_lib_bit_cast // C++ >= 20
/// Create a value of type `To` from the bits of `from`.
/**
* @tparam _To A trivially-copyable type.
* @param __from A trivially-copyable object of the same size as `_To`.
* @return An object of type `_To`.
* @since C++20
*/
template<typename _To, typename _From>
[[nodiscard]]
constexpr _To
bit_cast(const _From& __from) noexcept
#ifdef __cpp_concepts
requires (sizeof(_To) == sizeof(_From))
&& is_trivially_copyable_v<_To> && is_trivially_copyable_v<_From>
#endif
{
return __builtin_bit_cast(_To, __from);
}
#endif // __cpp_lib_bit_cast
#ifdef __cpp_lib_byteswap // C++ >= 23
/// Reverse order of bytes in the object representation of `value`.
/**
* @tparam _Tp An integral type.
* @param __value An object of integer type.
* @return An object of the same type, with the bytes reversed.
* @since C++23
*/
template<integral _Tp>
[[nodiscard]]
constexpr _Tp
byteswap(_Tp __value) noexcept
{
if constexpr (sizeof(_Tp) == 1)
return __value;
#if __cpp_if_consteval >= 202106L && __CHAR_BIT__ == 8
if !consteval
{
if constexpr (sizeof(_Tp) == 2)
return __builtin_bswap16(__value);
if constexpr (sizeof(_Tp) == 4)
return __builtin_bswap32(__value);
if constexpr (sizeof(_Tp) == 8)
return __builtin_bswap64(__value);
if constexpr (sizeof(_Tp) == 16)
#if __has_builtin(__builtin_bswap128)
return __builtin_bswap128(__value);
#else
return (__builtin_bswap64(__value >> 64)
| (static_cast<_Tp>(__builtin_bswap64(__value)) << 64));
#endif
}
#endif
// Fallback implementation that handles even __int24 etc.
using _Up = typename __make_unsigned<__remove_cv_t<_Tp>>::__type;
size_t __diff = __CHAR_BIT__ * (sizeof(_Tp) - 1);
_Up __mask1 = static_cast<unsigned char>(~0);
_Up __mask2 = __mask1 << __diff;
_Up __val = __value;
for (size_t __i = 0; __i < sizeof(_Tp) / 2; ++__i)
{
_Up __byte1 = __val & __mask1;
_Up __byte2 = __val & __mask2;
__val = (__val ^ __byte1 ^ __byte2
^ (__byte1 << __diff) ^ (__byte2 >> __diff));
__mask1 <<= __CHAR_BIT__;
__mask2 >>= __CHAR_BIT__;
__diff -= 2 * __CHAR_BIT__;
}
return __val;
}
#endif // __cpp_lib_byteswap
/// @cond undocumented
template<typename _Tp>
constexpr _Tp
__rotl(_Tp __x, int __s) noexcept
{
constexpr auto _Nd = __gnu_cxx::__int_traits<_Tp>::__digits;
if _GLIBCXX17_CONSTEXPR ((_Nd & (_Nd - 1)) == 0)
{
// Variant for power of two _Nd which the compiler can
// easily pattern match.
constexpr unsigned __uNd = _Nd;
const unsigned __r = __s;
return (__x << (__r % __uNd)) | (__x >> ((-__r) % __uNd));
}
const int __r = __s % _Nd;
if (__r == 0)
return __x;
else if (__r > 0)
return (__x << __r) | (__x >> ((_Nd - __r) % _Nd));
else
return (__x >> -__r) | (__x << ((_Nd + __r) % _Nd)); // rotr(x, -r)
}
template<typename _Tp>
constexpr _Tp
__rotr(_Tp __x, int __s) noexcept
{
constexpr auto _Nd = __gnu_cxx::__int_traits<_Tp>::__digits;
if _GLIBCXX17_CONSTEXPR ((_Nd & (_Nd - 1)) == 0)
{
// Variant for power of two _Nd which the compiler can
// easily pattern match.
constexpr unsigned __uNd = _Nd;
const unsigned __r = __s;
return (__x >> (__r % __uNd)) | (__x << ((-__r) % __uNd));
}
const int __r = __s % _Nd;
if (__r == 0)
return __x;
else if (__r > 0)
return (__x >> __r) | (__x << ((_Nd - __r) % _Nd));
else
return (__x << -__r) | (__x >> ((_Nd + __r) % _Nd)); // rotl(x, -r)
}
template<typename _Tp>
constexpr int
__countl_zero(_Tp __x) noexcept
{
using __gnu_cxx::__int_traits;
constexpr auto _Nd = __int_traits<_Tp>::__digits;
if (__x == 0)
return _Nd;
constexpr auto _Nd_ull = __int_traits<unsigned long long>::__digits;
constexpr auto _Nd_ul = __int_traits<unsigned long>::__digits;
constexpr auto _Nd_u = __int_traits<unsigned>::__digits;
if _GLIBCXX17_CONSTEXPR (_Nd <= _Nd_u)
{
constexpr int __diff = _Nd_u - _Nd;
return __builtin_clz(__x) - __diff;
}
else if _GLIBCXX17_CONSTEXPR (_Nd <= _Nd_ul)
{
constexpr int __diff = _Nd_ul - _Nd;
return __builtin_clzl(__x) - __diff;
}
else if _GLIBCXX17_CONSTEXPR (_Nd <= _Nd_ull)
{
constexpr int __diff = _Nd_ull - _Nd;
return __builtin_clzll(__x) - __diff;
}
else // (_Nd > _Nd_ull)
{
static_assert(_Nd <= (2 * _Nd_ull),
"Maximum supported integer size is 128-bit");
unsigned long long __high = __x >> _Nd_ull;
if (__high != 0)
{
constexpr int __diff = (2 * _Nd_ull) - _Nd;
return __builtin_clzll(__high) - __diff;
}
constexpr auto __max_ull = __int_traits<unsigned long long>::__max;
unsigned long long __low = __x & __max_ull;
return (_Nd - _Nd_ull) + __builtin_clzll(__low);
}
}
template<typename _Tp>
constexpr int
__countl_one(_Tp __x) noexcept
{
return std::__countl_zero<_Tp>((_Tp)~__x);
}
template<typename _Tp>
constexpr int
__countr_zero(_Tp __x) noexcept
{
using __gnu_cxx::__int_traits;
constexpr auto _Nd = __int_traits<_Tp>::__digits;
if (__x == 0)
return _Nd;
constexpr auto _Nd_ull = __int_traits<unsigned long long>::__digits;
constexpr auto _Nd_ul = __int_traits<unsigned long>::__digits;
constexpr auto _Nd_u = __int_traits<unsigned>::__digits;
if _GLIBCXX17_CONSTEXPR (_Nd <= _Nd_u)
return __builtin_ctz(__x);
else if _GLIBCXX17_CONSTEXPR (_Nd <= _Nd_ul)
return __builtin_ctzl(__x);
else if _GLIBCXX17_CONSTEXPR (_Nd <= _Nd_ull)
return __builtin_ctzll(__x);
else // (_Nd > _Nd_ull)
{
static_assert(_Nd <= (2 * _Nd_ull),
"Maximum supported integer size is 128-bit");
constexpr auto __max_ull = __int_traits<unsigned long long>::__max;
unsigned long long __low = __x & __max_ull;
if (__low != 0)
return __builtin_ctzll(__low);
unsigned long long __high = __x >> _Nd_ull;
return __builtin_ctzll(__high) + _Nd_ull;
}
}
template<typename _Tp>
constexpr int
__countr_one(_Tp __x) noexcept
{
return std::__countr_zero((_Tp)~__x);
}
template<typename _Tp>
constexpr int
__popcount(_Tp __x) noexcept
{
using __gnu_cxx::__int_traits;
constexpr auto _Nd = __int_traits<_Tp>::__digits;
constexpr auto _Nd_ull = __int_traits<unsigned long long>::__digits;
constexpr auto _Nd_ul = __int_traits<unsigned long>::__digits;
constexpr auto _Nd_u = __int_traits<unsigned>::__digits;
if _GLIBCXX17_CONSTEXPR (_Nd <= _Nd_u)
return __builtin_popcount(__x);
else if _GLIBCXX17_CONSTEXPR (_Nd <= _Nd_ul)
return __builtin_popcountl(__x);
else if _GLIBCXX17_CONSTEXPR (_Nd <= _Nd_ull)
return __builtin_popcountll(__x);
else // (_Nd > _Nd_ull)
{
static_assert(_Nd <= (2 * _Nd_ull),
"Maximum supported integer size is 128-bit");
constexpr auto __max_ull = __int_traits<unsigned long long>::__max;
unsigned long long __low = __x & __max_ull;
unsigned long long __high = __x >> _Nd_ull;
return __builtin_popcountll(__low) + __builtin_popcountll(__high);
}
}
template<typename _Tp>
constexpr bool
__has_single_bit(_Tp __x) noexcept
{ return std::__popcount(__x) == 1; }
template<typename _Tp>
constexpr _Tp
__bit_ceil(_Tp __x) noexcept
{
using __gnu_cxx::__int_traits;
constexpr auto _Nd = __int_traits<_Tp>::__digits;
if (__x == 0 || __x == 1)
return 1;
auto __shift_exponent = _Nd - std::__countl_zero((_Tp)(__x - 1u));
// If the shift exponent equals _Nd then the correct result is not
// representable as a value of _Tp, and so the result is undefined.
// Want that undefined behaviour to be detected in constant expressions,
// by UBSan, and by debug assertions.
if (!std::__is_constant_evaluated())
{
__glibcxx_assert( __shift_exponent != __int_traits<_Tp>::__digits );
}
using __promoted_type = decltype(__x << 1);
if _GLIBCXX17_CONSTEXPR (!is_same<__promoted_type, _Tp>::value)
{
// If __x undergoes integral promotion then shifting by _Nd is
// not undefined. In order to make the shift undefined, so that
// it is diagnosed in constant expressions and by UBsan, we also
// need to "promote" the shift exponent to be too large for the
// promoted type.
const int __extra_exp = sizeof(__promoted_type) / sizeof(_Tp) / 2;
__shift_exponent |= (__shift_exponent & _Nd) << __extra_exp;
}
return (_Tp)1u << __shift_exponent;
}
template<typename _Tp>
constexpr _Tp
__bit_floor(_Tp __x) noexcept
{
constexpr auto _Nd = __gnu_cxx::__int_traits<_Tp>::__digits;
if (__x == 0)
return 0;
return (_Tp)1u << (_Nd - std::__countl_zero((_Tp)(__x >> 1)));
}
template<typename _Tp>
constexpr int
__bit_width(_Tp __x) noexcept
{
constexpr auto _Nd = __gnu_cxx::__int_traits<_Tp>::__digits;
return _Nd - std::__countl_zero(__x);
}
/// @endcond
#ifdef __cpp_lib_bitops // C++ >= 20
/// @cond undocumented
template<typename _Tp>
concept __unsigned_integer = __is_unsigned_integer<_Tp>::value;
/// @endcond
// [bit.rot], rotating
/// Rotate `x` to the left by `s` bits.
template<__unsigned_integer _Tp>
[[nodiscard]] constexpr _Tp
rotl(_Tp __x, int __s) noexcept
{ return std::__rotl(__x, __s); }
/// Rotate `x` to the right by `s` bits.
template<__unsigned_integer _Tp>
[[nodiscard]] constexpr _Tp
rotr(_Tp __x, int __s) noexcept
{ return std::__rotr(__x, __s); }
// [bit.count], counting
/// The number of contiguous zero bits, starting from the highest bit.
template<__unsigned_integer _Tp>
constexpr int
countl_zero(_Tp __x) noexcept
{ return std::__countl_zero(__x); }
/// The number of contiguous one bits, starting from the highest bit.
template<__unsigned_integer _Tp>
constexpr int
countl_one(_Tp __x) noexcept
{ return std::__countl_one(__x); }
/// The number of contiguous zero bits, starting from the lowest bit.
template<__unsigned_integer _Tp>
constexpr int
countr_zero(_Tp __x) noexcept
{ return std::__countr_zero(__x); }
/// The number of contiguous one bits, starting from the lowest bit.
template<__unsigned_integer _Tp>
constexpr int
countr_one(_Tp __x) noexcept
{ return std::__countr_one(__x); }
/// The number of bits set in `x`.
template<__unsigned_integer _Tp>
constexpr int
popcount(_Tp __x) noexcept
{ return std::__popcount(__x); }
#endif // __cpp_lib_bitops
#ifdef __cpp_lib_int_pow2 // C++ >= 20
// [bit.pow.two], integral powers of 2
/// True if `x` is a power of two, false otherwise.
template<__unsigned_integer _Tp>
constexpr bool
has_single_bit(_Tp __x) noexcept
{ return std::__has_single_bit(__x); }
/// The smallest power-of-two not less than `x`.
template<__unsigned_integer _Tp>
constexpr _Tp
bit_ceil(_Tp __x) noexcept
{ return std::__bit_ceil(__x); }
/// The largest power-of-two not greater than `x`.
template<__unsigned_integer _Tp>
constexpr _Tp
bit_floor(_Tp __x) noexcept
{ return std::__bit_floor(__x); }
// _GLIBCXX_RESOLVE_LIB_DEFECTS
// 3656. Inconsistent bit operations returning a count
/// The smallest integer greater than the base-2 logarithm of `x`.
template<__unsigned_integer _Tp>
constexpr int
bit_width(_Tp __x) noexcept
{ return std::__bit_width(__x); }
#endif // defined (__cpp_lib_int_pow2)
#ifdef __cpp_lib_endian // C++ >= 20
/// Byte order constants
/**
* The platform endianness can be checked by comparing `std::endian::native`
* to one of `std::endian::big` or `std::endian::little`.
*
* @since C++20
*/
enum class endian
{
little = __ORDER_LITTLE_ENDIAN__,
big = __ORDER_BIG_ENDIAN__,
native = __BYTE_ORDER__
};
#endif // __cpp_lib_endian
/// @}
_GLIBCXX_END_NAMESPACE_VERSION
} // namespace std
#endif // C++14
#endif // _GLIBCXX_BIT
| Name | Type | Size | Permission | Actions |
|---|---|---|---|---|
| backward | Folder | 0755 |
|
|
| bits | Folder | 0755 |
|
|
| debug | Folder | 0755 |
|
|
| decimal | Folder | 0755 |
|
|
| experimental | Folder | 0755 |
|
|
| ext | Folder | 0755 |
|
|
| parallel | Folder | 0755 |
|
|
| pstl | Folder | 0755 |
|
|
| tr1 | Folder | 0755 |
|
|
| tr2 | Folder | 0755 |
|
|
| algorithm | File | 3.31 KB | 0644 |
|
| any | File | 18.71 KB | 0644 |
|
| array | File | 15.4 KB | 0644 |
|
| atomic | File | 51.16 KB | 0644 |
|
| barrier | File | 7.87 KB | 0644 |
|
| bit | File | 14 KB | 0644 |
|
| bitset | File | 49.19 KB | 0644 |
|
| cassert | File | 1.61 KB | 0644 |
|
| ccomplex | File | 1.3 KB | 0644 |
|
| cctype | File | 2.34 KB | 0644 |
|
| cerrno | File | 1.73 KB | 0644 |
|
| cfenv | File | 2 KB | 0644 |
|
| cfloat | File | 1.84 KB | 0644 |
|
| charconv | File | 29.13 KB | 0644 |
|
| chrono | File | 94.45 KB | 0644 |
|
| cinttypes | File | 2.09 KB | 0644 |
|
| ciso646 | File | 1.43 KB | 0644 |
|
| climits | File | 1.87 KB | 0644 |
|
| clocale | File | 1.86 KB | 0644 |
|
| cmath | File | 94.84 KB | 0644 |
|
| codecvt | File | 5.15 KB | 0644 |
|
| compare | File | 37.25 KB | 0644 |
|
| complex | File | 74.84 KB | 0644 |
|
| complex.h | File | 1.56 KB | 0644 |
|
| concepts | File | 12.72 KB | 0644 |
|
| condition_variable | File | 12.59 KB | 0644 |
|
| coroutine | File | 9.39 KB | 0644 |
|
| csetjmp | File | 1.9 KB | 0644 |
|
| csignal | File | 1.81 KB | 0644 |
|
| cstdalign | File | 1.37 KB | 0644 |
|
| cstdarg | File | 1.82 KB | 0644 |
|
| cstdbool | File | 1.37 KB | 0644 |
|
| cstddef | File | 6.54 KB | 0644 |
|
| cstdint | File | 3.75 KB | 0644 |
|
| cstdio | File | 4.33 KB | 0644 |
|
| cstdlib | File | 6.76 KB | 0644 |
|
| cstring | File | 3.17 KB | 0644 |
|
| ctgmath | File | 1.33 KB | 0644 |
|
| ctime | File | 2.24 KB | 0644 |
|
| cuchar | File | 2.84 KB | 0644 |
|
| cwchar | File | 6.39 KB | 0644 |
|
| cwctype | File | 2.73 KB | 0644 |
|
| cxxabi.h | File | 21.77 KB | 0644 |
|
| deque | File | 4.56 KB | 0644 |
|
| exception | File | 5.31 KB | 0644 |
|
| execution | File | 1.87 KB | 0644 |
|
| expected | File | 49.81 KB | 0644 |
|
| fenv.h | File | 1.96 KB | 0644 |
|
| filesystem | File | 1.72 KB | 0644 |
|
| format | File | 128.31 KB | 0644 |
|
| forward_list | File | 2.91 KB | 0644 |
|
| fstream | File | 41.58 KB | 0644 |
|
| functional | File | 47.31 KB | 0644 |
|
| future | File | 52.04 KB | 0644 |
|
| generator | File | 22.16 KB | 0644 |
|
| initializer_list | File | 2.93 KB | 0644 |
|
| iomanip | File | 16.4 KB | 0644 |
|
| ios | File | 1.67 KB | 0644 |
|
| iosfwd | File | 8.21 KB | 0644 |
|
| iostream | File | 3.02 KB | 0644 |
|
| istream | File | 35.62 KB | 0644 |
|
| iterator | File | 3.02 KB | 0644 |
|
| latch | File | 2.7 KB | 0644 |
|
| limits | File | 82.01 KB | 0644 |
|
| list | File | 3.86 KB | 0644 |
|
| locale | File | 1.5 KB | 0644 |
|
| map | File | 4.37 KB | 0644 |
|
| math.h | File | 4.47 KB | 0644 |
|
| memory | File | 5.26 KB | 0644 |
|
| memory_resource | File | 14.15 KB | 0644 |
|
| mutex | File | 26.99 KB | 0644 |
|
| new | File | 8.48 KB | 0644 |
|
| numbers | File | 6.93 KB | 0644 |
|
| numeric | File | 25.5 KB | 0644 |
|
| optional | File | 44.03 KB | 0644 |
|
| ostream | File | 30.54 KB | 0644 |
|
| File | 4.73 KB | 0644 |
|
|
| queue | File | 2.54 KB | 0644 |
|
| random | File | 1.63 KB | 0644 |
|
| ranges | File | 271.85 KB | 0644 |
|
| ratio | File | 22.26 KB | 0644 |
|
| regex | File | 3.16 KB | 0644 |
|
| scoped_allocator | File | 17.41 KB | 0644 |
|
| semaphore | File | 3.04 KB | 0644 |
|
| set | File | 4.16 KB | 0644 |
|
| shared_mutex | File | 24.6 KB | 0644 |
|
| source_location | File | 2.7 KB | 0644 |
|
| span | File | 14.12 KB | 0644 |
|
| spanstream | File | 12.2 KB | 0644 |
|
| sstream | File | 38.83 KB | 0644 |
|
| stack | File | 2.46 KB | 0644 |
|
| stacktrace | File | 21.21 KB | 0644 |
|
| stdatomic.h | File | 4.02 KB | 0644 |
|
| stdexcept | File | 9.65 KB | 0644 |
|
| stdfloat | File | 1.72 KB | 0644 |
|
| stdlib.h | File | 2.25 KB | 0644 |
|
| stop_token | File | 15.72 KB | 0644 |
|
| streambuf | File | 29.24 KB | 0644 |
|
| string | File | 4.23 KB | 0644 |
|
| string_view | File | 27.52 KB | 0644 |
|
| syncstream | File | 8.18 KB | 0644 |
|
| system_error | File | 17.96 KB | 0644 |
|
| text_encoding | File | 16.26 KB | 0644 |
|
| tgmath.h | File | 1.33 KB | 0644 |
|
| thread | File | 9.77 KB | 0644 |
|
| tuple | File | 99.71 KB | 0644 |
|
| type_traits | File | 118.17 KB | 0644 |
|
| typeindex | File | 3.43 KB | 0644 |
|
| typeinfo | File | 8.1 KB | 0644 |
|
| unordered_map | File | 3.69 KB | 0644 |
|
| unordered_set | File | 3.48 KB | 0644 |
|
| utility | File | 7.38 KB | 0644 |
|
| valarray | File | 40.2 KB | 0644 |
|
| variant | File | 64.81 KB | 0644 |
|
| vector | File | 4.98 KB | 0644 |
|
| version | File | 1.42 KB | 0644 |
|