mirror of
https://github.com/JGRennison/OpenTTD-patches.git
synced 2024-11-09 19:10:38 +00:00
Codechange: use std::popcount instead of hand written loop
This commit is contained in:
parent
ae575a7a5b
commit
1c694e433d
@ -248,20 +248,13 @@ inline T KillFirstBit(T value)
|
||||
* @return the number of bits.
|
||||
*/
|
||||
template <typename T>
|
||||
inline uint CountBits(T value)
|
||||
constexpr uint CountBits(T value)
|
||||
{
|
||||
uint num;
|
||||
|
||||
/* This loop is only called once for every bit set by clearing the lowest
|
||||
* bit in each loop. The number of bits is therefore equal to the number of
|
||||
* times the loop was called. It was found at the following website:
|
||||
* http://graphics.stanford.edu/~seander/bithacks.html */
|
||||
|
||||
for (num = 0; value != 0; num++) {
|
||||
value &= (T)(value - 1);
|
||||
if constexpr (std::is_enum_v<T>) {
|
||||
return std::popcount<std::underlying_type_t<T>>(value);
|
||||
} else {
|
||||
return std::popcount(value);
|
||||
}
|
||||
|
||||
return num;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -126,7 +126,7 @@
|
||||
std::string text = question->GetEncodedText();
|
||||
EnforcePreconditionEncodedText(false, text);
|
||||
uint min_buttons = (type == QT_QUESTION ? 1 : 0);
|
||||
EnforcePrecondition(false, CountBits(buttons) >= min_buttons && CountBits(buttons) <= 3);
|
||||
EnforcePrecondition(false, CountBits<uint64_t>(buttons) >= min_buttons && CountBits<uint64_t>(buttons) <= 3);
|
||||
EnforcePrecondition(false, buttons >= 0 && buttons < (1 << ::GOAL_QUESTION_BUTTON_COUNT));
|
||||
EnforcePrecondition(false, (int)type < ::GQT_END);
|
||||
EnforcePrecondition(false, uniqueid >= 0 && uniqueid <= UINT16_MAX);
|
||||
|
Loading…
Reference in New Issue
Block a user