tetl
0.1.0
Embedded Template Library
Loading...
Searching...
No Matches
countl_one.hpp
Go to the documentation of this file.
1
// SPDX-License-Identifier: BSL-1.0
2
// SPDX-FileCopyrightText: Copyright (C) 2019 Tobias Hienzsch
3
4
#
ifndef
TETL_BIT_COUNTL_ONE_HPP
5
#
define
TETL_BIT_COUNTL_ONE_HPP
6
7
#
include
<
etl
/
_concepts
/
builtin_unsigned_integer
.
hpp
>
8
#
include
<
etl
/
_limits
/
numeric_limits
.
hpp
>
9
10
namespace
etl
{
11
12
/// \brief Returns the number of consecutive 1 ("one") bits in the value of x,
13
/// starting from the most significant bit ("left").
14
///
15
/// \details This overload only participates in overload resolution if UInt is an
16
/// unsigned integer type (that is, unsigned char, unsigned short, unsigned int,
17
/// unsigned long, unsigned long long, or an extended unsigned integer type).
18
///
19
/// \returns The number of consecutive 1 bits in the value of x, starting from
20
/// the most significant bit.
21
///
22
/// \ingroup bit
23
template
<
etl
::builtin_unsigned_integer UInt>
24
[[nodiscard]]
constexpr
auto
countl_one
(UInt x)
noexcept
->
int
25
{
26
auto
const
totalBits =
etl
::
numeric_limits
<UInt>::digits;
27
if
(x ==
etl
::
numeric_limits
<UInt>::max()) {
28
return
totalBits;
29
}
30
31
auto
res = 0;
32
while
(x & (UInt(1) << (
static_cast
<UInt>(totalBits) - UInt(1)))) {
33
x =
static_cast
<UInt>(x << UInt(1));
34
++res;
35
}
36
37
return
res;
38
}
39
40
}
// namespace etl
41
42
#
endif
// TETL_BIT_COUNTL_ONE_HPP
etl::countl_one
constexpr auto countl_one(UInt x) noexcept -> int
Returns the number of consecutive 1 ("one") bits in the value of x, starting from the most significan...
Definition
countl_one.hpp:24
etl
Definition
adjacent_find.hpp:9
etl::numeric_limits
Definition
numeric_limits.hpp:18
include
etl
_bit
countl_one.hpp
Generated on Sun Sep 7 2025 19:14:48 for tetl by
1.9.8