1e78f53d1SNikolas Klauser// -*- C++ -*- 2e78f53d1SNikolas Klauser//===----------------------------------------------------------------------===// 3e78f53d1SNikolas Klauser// 4e78f53d1SNikolas Klauser// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 5e78f53d1SNikolas Klauser// See https://llvm.org/LICENSE.txt for license information. 6e78f53d1SNikolas Klauser// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 7e78f53d1SNikolas Klauser// 8e78f53d1SNikolas Klauser//===---------------------------------------------------------------------===// 9e78f53d1SNikolas Klauser 10*ce777190SNikolas Klauser#ifndef _LIBCPP___CXX03_BIT 11*ce777190SNikolas Klauser#define _LIBCPP___CXX03_BIT 12e78f53d1SNikolas Klauser 13e78f53d1SNikolas Klauser/* 14e78f53d1SNikolas Klauser bit synopsis 15e78f53d1SNikolas Klauser 16e78f53d1SNikolas Klausernamespace std { 17e78f53d1SNikolas Klauser // [bit.cast], bit_cast 18e78f53d1SNikolas Klauser template<class To, class From> 19e78f53d1SNikolas Klauser constexpr To bit_cast(const From& from) noexcept; // C++20 20e78f53d1SNikolas Klauser 21e78f53d1SNikolas Klauser // [bit.byteswap], byteswap 22e78f53d1SNikolas Klauser template<class T> 23e78f53d1SNikolas Klauser constexpr T byteswap(T value) noexcept; // C++23 24e78f53d1SNikolas Klauser 25e78f53d1SNikolas Klauser // [bit.pow.two], integral powers of 2 26e78f53d1SNikolas Klauser template <class T> 27e78f53d1SNikolas Klauser constexpr bool has_single_bit(T x) noexcept; // C++20 28e78f53d1SNikolas Klauser template <class T> 29e78f53d1SNikolas Klauser constexpr T bit_ceil(T x); // C++20 30e78f53d1SNikolas Klauser template <class T> 31e78f53d1SNikolas Klauser constexpr T bit_floor(T x) noexcept; // C++20 32e78f53d1SNikolas Klauser template <class T> 33e78f53d1SNikolas Klauser constexpr int bit_width(T x) noexcept; // C++20 34e78f53d1SNikolas Klauser 35e78f53d1SNikolas Klauser // [bit.rotate], rotating 36e78f53d1SNikolas Klauser template<class T> 37e78f53d1SNikolas Klauser constexpr T rotl(T x, int s) noexcept; // C++20 38e78f53d1SNikolas Klauser template<class T> 39e78f53d1SNikolas Klauser constexpr T rotr(T x, int s) noexcept; // C++20 40e78f53d1SNikolas Klauser 41e78f53d1SNikolas Klauser // [bit.count], counting 42e78f53d1SNikolas Klauser template<class T> 43e78f53d1SNikolas Klauser constexpr int countl_zero(T x) noexcept; // C++20 44e78f53d1SNikolas Klauser template<class T> 45e78f53d1SNikolas Klauser constexpr int countl_one(T x) noexcept; // C++20 46e78f53d1SNikolas Klauser template<class T> 47e78f53d1SNikolas Klauser constexpr int countr_zero(T x) noexcept; // C++20 48e78f53d1SNikolas Klauser template<class T> 49e78f53d1SNikolas Klauser constexpr int countr_one(T x) noexcept; // C++20 50e78f53d1SNikolas Klauser template<class T> 51e78f53d1SNikolas Klauser constexpr int popcount(T x) noexcept; // C++20 52e78f53d1SNikolas Klauser 53e78f53d1SNikolas Klauser // [bit.endian], endian 54e78f53d1SNikolas Klauser enum class endian { 55e78f53d1SNikolas Klauser little = see below, // C++20 56e78f53d1SNikolas Klauser big = see below, // C++20 57e78f53d1SNikolas Klauser native = see below // C++20 58e78f53d1SNikolas Klauser }; 59e78f53d1SNikolas Klauser 60e78f53d1SNikolas Klauser} // namespace std 61e78f53d1SNikolas Klauser 62e78f53d1SNikolas Klauser*/ 63e78f53d1SNikolas Klauser 6473fbae83SNikolas Klauser#include <__cxx03/__config> 65e78f53d1SNikolas Klauser 66e78f53d1SNikolas Klauser#if _LIBCPP_STD_VER >= 20 6773fbae83SNikolas Klauser# include <__cxx03/__bit/bit_cast.h> 6873fbae83SNikolas Klauser# include <__cxx03/__bit/bit_ceil.h> 6973fbae83SNikolas Klauser# include <__cxx03/__bit/bit_floor.h> 7073fbae83SNikolas Klauser# include <__cxx03/__bit/bit_log2.h> 7173fbae83SNikolas Klauser# include <__cxx03/__bit/bit_width.h> 7273fbae83SNikolas Klauser# include <__cxx03/__bit/countl.h> 7373fbae83SNikolas Klauser# include <__cxx03/__bit/countr.h> 7473fbae83SNikolas Klauser# include <__cxx03/__bit/endian.h> 7573fbae83SNikolas Klauser# include <__cxx03/__bit/has_single_bit.h> 7673fbae83SNikolas Klauser# include <__cxx03/__bit/popcount.h> 7773fbae83SNikolas Klauser# include <__cxx03/__bit/rotate.h> 78e78f53d1SNikolas Klauser#endif 79e78f53d1SNikolas Klauser 80e78f53d1SNikolas Klauser#if _LIBCPP_STD_VER >= 23 8173fbae83SNikolas Klauser# include <__cxx03/__bit/byteswap.h> 82e78f53d1SNikolas Klauser#endif 83e78f53d1SNikolas Klauser 8473fbae83SNikolas Klauser#include <__cxx03/version> 85e78f53d1SNikolas Klauser 86e78f53d1SNikolas Klauser#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 87e78f53d1SNikolas Klauser# pragma GCC system_header 88e78f53d1SNikolas Klauser#endif 89e78f53d1SNikolas Klauser 90e78f53d1SNikolas Klauser#if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 17 9173fbae83SNikolas Klauser# include <__cxx03/cstdint> 92e78f53d1SNikolas Klauser#endif 93e78f53d1SNikolas Klauser 94e78f53d1SNikolas Klauser#if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20 9573fbae83SNikolas Klauser# include <__cxx03/cstdlib> 9673fbae83SNikolas Klauser# include <__cxx03/iosfwd> 9773fbae83SNikolas Klauser# include <__cxx03/limits> 9873fbae83SNikolas Klauser# include <__cxx03/type_traits> 99e78f53d1SNikolas Klauser#endif 100e78f53d1SNikolas Klauser 101*ce777190SNikolas Klauser#endif // _LIBCPP___CXX03_BIT 102