bitset<N>::count()
|
_NODISCARD size_t count() const noexcept { // count number of set bits
|
|
const char* const _Bitsperbyte = "\0\1\1\2\1\2\2\3\1\2\2\3\2\3\3\4"
|
|
"\1\2\2\3\2\3\3\4\2\3\3\4\3\4\4\5"
|
|
"\1\2\2\3\2\3\3\4\2\3\3\4\3\4\4\5"
|
|
"\2\3\3\4\3\4\4\5\3\4\4\5\4\5\5\6"
|
|
"\1\2\2\3\2\3\3\4\2\3\3\4\3\4\4\5"
|
|
"\2\3\3\4\3\4\4\5\3\4\4\5\4\5\5\6"
|
|
"\2\3\3\4\3\4\4\5\3\4\4\5\4\5\5\6"
|
|
"\3\4\4\5\4\5\5\6\4\5\5\6\5\6\6\7"
|
|
"\1\2\2\3\2\3\3\4\2\3\3\4\3\4\4\5"
|
|
"\2\3\3\4\3\4\4\5\3\4\4\5\4\5\5\6"
|
|
"\2\3\3\4\3\4\4\5\3\4\4\5\4\5\5\6"
|
|
"\3\4\4\5\4\5\5\6\4\5\5\6\5\6\6\7"
|
|
"\2\3\3\4\3\4\4\5\3\4\4\5\4\5\5\6"
|
|
"\3\4\4\5\4\5\5\6\4\5\5\6\5\6\6\7"
|
|
"\3\4\4\5\4\5\5\6\4\5\5\6\5\6\6\7"
|
|
"\4\5\5\6\5\6\6\7\5\6\6\7\6\7\7\x8";
|
|
const unsigned char* _Ptr = &reinterpret_cast<const unsigned char&>(_Array);
|
|
const unsigned char* const _End = _Ptr + sizeof(_Array);
|
|
size_t _Val = 0;
|
|
for (; _Ptr != _End; ++_Ptr) {
|
|
_Val += _Bitsperbyte[*_Ptr];
|
|
}
|
|
|
|
return _Val;
|
|
}
|
should use the same compiler magic: as <bit> popcount(x) when it is available:
|
template <class _Ty, enable_if_t<_Is_standard_unsigned_integer<_Ty>, int> _Enabled = 0>
|
|
_NODISCARD constexpr int popcount(const _Ty _Val) noexcept {
|
|
if constexpr (sizeof(_Ty) <= sizeof(unsigned int)) {
|
|
return __builtin_popcount(_Val);
|
|
} else {
|
|
return __builtin_popcountll(_Val);
|
|
}
|
|
}
|
Blocked by the same as #313 .
Disabled here:
|
#if defined(__clang__) || defined(__EDG__) |
|
#define __cpp_lib_bitops 201907L |
|
#else // ^^^ Clang and EDG / MSVC vvv |
|
// a future MSVC update will embed CPU feature detection into <bit> intrinsics |
|
// TRANSITION, VSO-1020212 |
|
#endif // defined(__clang__) || defined(__EDG__) |
Also tracked by DevCom-967643 and Microsoft-internal VSO-1090007 / AB#1090007.
bitset<N>::count()STL/stl/inc/bitset
Lines 341 to 366 in 8e8453c
should use the same compiler magic: as
<bit>popcount(x)when it is available:STL/stl/inc/bit
Lines 143 to 150 in 8e8453c
Blocked by the same as #313 .
Disabled here:
STL/stl/inc/yvals_core.h
Lines 1091 to 1096 in 8e8453c
Also tracked by DevCom-967643 and Microsoft-internal VSO-1090007 / AB#1090007.