|  | // -*- C++ -*- | 
|  | //===----------------------------------------------------------------------===// | 
|  | // | 
|  | // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | 
|  | // See https://llvm.org/LICENSE.txt for license information. | 
|  | // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | 
|  | // | 
|  | //===---------------------------------------------------------------------===// | 
|  |  | 
|  | #ifndef _LIBCPP_BIT | 
|  | #define _LIBCPP_BIT | 
|  |  | 
|  | /* | 
|  | bit synopsis | 
|  |  | 
|  | namespace std { | 
|  | // [bit.cast], bit_cast | 
|  | template<class To, class From> | 
|  | constexpr To bit_cast(const From& from) noexcept; // C++20 | 
|  |  | 
|  | // [bit.byteswap], byteswap | 
|  | template<class T> | 
|  | constexpr T byteswap(T value) noexcept;      // C++23 | 
|  |  | 
|  | // [bit.pow.two], integral powers of 2 | 
|  | template <class T> | 
|  | constexpr bool has_single_bit(T x) noexcept; // C++20 | 
|  | template <class T> | 
|  | constexpr T bit_ceil(T x);                   // C++20 | 
|  | template <class T> | 
|  | constexpr T bit_floor(T x) noexcept;         // C++20 | 
|  | template <class T> | 
|  | constexpr int bit_width(T x) noexcept;       // C++20 | 
|  |  | 
|  | // [bit.rotate], rotating | 
|  | template<class T> | 
|  | constexpr T rotl(T x, unsigned int s) noexcept; // C++20 | 
|  | template<class T> | 
|  | constexpr T rotr(T x, unsigned int s) noexcept; // C++20 | 
|  |  | 
|  | // [bit.count], counting | 
|  | template<class T> | 
|  | constexpr int countl_zero(T x) noexcept;  // C++20 | 
|  | template<class T> | 
|  | constexpr int countl_one(T x) noexcept;   // C++20 | 
|  | template<class T> | 
|  | constexpr int countr_zero(T x) noexcept;  // C++20 | 
|  | template<class T> | 
|  | constexpr int countr_one(T x) noexcept;   // C++20 | 
|  | template<class T> | 
|  | constexpr int popcount(T x) noexcept;     // C++20 | 
|  |  | 
|  | // [bit.endian], endian | 
|  | enum class endian { | 
|  | little = see below,        // C++20 | 
|  | big = see below,           // C++20 | 
|  | native = see below         // C++20 | 
|  | }; | 
|  |  | 
|  | } // namespace std | 
|  |  | 
|  | */ | 
|  |  | 
|  | #include <__assert> // all public C++ headers provide the assertion handler | 
|  | #include <__bit/bit_cast.h> | 
|  | #include <__bit/bit_ceil.h> | 
|  | #include <__bit/bit_floor.h> | 
|  | #include <__bit/bit_log2.h> | 
|  | #include <__bit/bit_width.h> | 
|  | #include <__bit/blsr.h> | 
|  | #include <__bit/byteswap.h> | 
|  | #include <__bit/countl.h> | 
|  | #include <__bit/countr.h> | 
|  | #include <__bit/endian.h> | 
|  | #include <__bit/has_single_bit.h> | 
|  | #include <__bit/popcount.h> | 
|  | #include <__bit/rotate.h> | 
|  | #include <__config> | 
|  | #include <version> | 
|  |  | 
|  | #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) | 
|  | #  pragma GCC system_header | 
|  | #endif | 
|  |  | 
|  | #if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20 | 
|  | #  include <cstdlib> | 
|  | #  include <iosfwd> | 
|  | #  include <limits> | 
|  | #  include <type_traits> | 
|  | #endif | 
|  |  | 
|  | #endif // _LIBCPP_BIT |