1// -*- C++ -*- 2//===----------------------------------------------------------------------===// 3// 4// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 5// See https://llvm.org/LICENSE.txt for license information. 6// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 7// 8//===---------------------------------------------------------------------===// 9 10#ifndef _LIBCPP_BIT 11#define _LIBCPP_BIT 12 13/* 14 bit synopsis 15 16namespace std { 17 // [bit.cast], bit_cast 18 template<class To, class From> 19 constexpr To bit_cast(const From& from) noexcept; // C++20 20 21 // [bit.byteswap], byteswap 22 template<class T> 23 constexpr T byteswap(T value) noexcept; // C++23 24 25 // [bit.pow.two], integral powers of 2 26 template <class T> 27 constexpr bool has_single_bit(T x) noexcept; // C++20 28 template <class T> 29 constexpr T bit_ceil(T x); // C++20 30 template <class T> 31 constexpr T bit_floor(T x) noexcept; // C++20 32 template <class T> 33 constexpr int bit_width(T x) noexcept; // C++20 34 35 // [bit.rotate], rotating 36 template<class T> 37 constexpr T rotl(T x, unsigned int s) noexcept; // C++20 38 template<class T> 39 constexpr T rotr(T x, unsigned int s) noexcept; // C++20 40 41 // [bit.count], counting 42 template<class T> 43 constexpr int countl_zero(T x) noexcept; // C++20 44 template<class T> 45 constexpr int countl_one(T x) noexcept; // C++20 46 template<class T> 47 constexpr int countr_zero(T x) noexcept; // C++20 48 template<class T> 49 constexpr int countr_one(T x) noexcept; // C++20 50 template<class T> 51 constexpr int popcount(T x) noexcept; // C++20 52 53 // [bit.endian], endian 54 enum class endian { 55 little = see below, // C++20 56 big = see below, // C++20 57 native = see below // C++20 58 }; 59 60} // namespace std 61 62*/ 63 64#include <__assert> // all public C++ headers provide the assertion handler 65#include <__bit/bit_cast.h> 66#include <__bit/bit_ceil.h> 67#include <__bit/bit_floor.h> 68#include <__bit/bit_log2.h> 69#include <__bit/bit_width.h> 70#include <__bit/blsr.h> 71#include <__bit/byteswap.h> 72#include <__bit/countl.h> 73#include <__bit/countr.h> 74#include <__bit/endian.h> 75#include <__bit/has_single_bit.h> 76#include <__bit/popcount.h> 77#include <__bit/rotate.h> 78#include <__config> 79#include <version> 80 81#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 82# pragma GCC system_header 83#endif 84 85#if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20 86# include <cstdlib> 87# include <iosfwd> 88# include <limits> 89# include <type_traits> 90#endif 91 92#endif // _LIBCPP_BIT 93