186aac87fSNikolas Klauser //===----------------------------------------------------------------------===// 286aac87fSNikolas Klauser // 386aac87fSNikolas Klauser // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 486aac87fSNikolas Klauser // See https://llvm.org/LICENSE.txt for license information. 586aac87fSNikolas Klauser // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 686aac87fSNikolas Klauser // 786aac87fSNikolas Klauser //===----------------------------------------------------------------------===// 886aac87fSNikolas Klauser 986aac87fSNikolas Klauser #ifndef _LIBCPP___BIT_BIT_WIDTH_H 1086aac87fSNikolas Klauser #define _LIBCPP___BIT_BIT_WIDTH_H 1186aac87fSNikolas Klauser 1286aac87fSNikolas Klauser #include <__bit/bit_log2.h> 1386aac87fSNikolas Klauser #include <__concepts/arithmetic.h> 1486aac87fSNikolas Klauser #include <__config> 1586aac87fSNikolas Klauser 1686aac87fSNikolas Klauser #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 1786aac87fSNikolas Klauser # pragma GCC system_header 1886aac87fSNikolas Klauser #endif 1986aac87fSNikolas Klauser 2086aac87fSNikolas Klauser #if _LIBCPP_STD_VER >= 20 2186aac87fSNikolas Klauser 2286aac87fSNikolas Klauser _LIBCPP_BEGIN_NAMESPACE_STD 2386aac87fSNikolas Klauser 2486aac87fSNikolas Klauser template <__libcpp_unsigned_integer _Tp> bit_width(_Tp __t)25*83bc7b57SNikolas Klauser[[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr int bit_width(_Tp __t) noexcept { 2686aac87fSNikolas Klauser return __t == 0 ? 0 : std::__bit_log2(__t) + 1; 2786aac87fSNikolas Klauser } 2886aac87fSNikolas Klauser 2986aac87fSNikolas Klauser _LIBCPP_END_NAMESPACE_STD 3086aac87fSNikolas Klauser 3186aac87fSNikolas Klauser #endif // _LIBCPP_STD_VER >= 20 3286aac87fSNikolas Klauser 3386aac87fSNikolas Klauser #endif // _LIBCPP___BIT_BIT_WIDTH_H 34