xref: /llvm-project/libcxx/include/__cxx03/bit (revision ce7771902dc50d900de639d499a60486b83f70e0)
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