base: Use if constexpr to simplify the reverseBits function.
Handle the sizeof(T) == 1 special case within the function using if constexpr, instead of having two functions. Change-Id: Idce63e18c77d2f7cc59d86c19f42d57ccdbefe5c Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/48504 Reviewed-by: Daniel Carvalho <odanrc@yahoo.com.br> Maintainer: Daniel Carvalho <odanrc@yahoo.com.br> Tested-by: kokoro <noreply+kokoro@google.com>
This commit is contained in:
@@ -232,26 +232,23 @@ replaceBits(T& val, unsigned bit, B bit_val)
|
||||
* @ingroup api_bitfield
|
||||
*/
|
||||
template <class T>
|
||||
std::enable_if_t<std::is_integral<T>::value && sizeof(T) != 1, T>
|
||||
std::enable_if_t<std::is_integral_v<T>, T>
|
||||
reverseBits(T val, size_t size=sizeof(T))
|
||||
{
|
||||
assert(size <= sizeof(T));
|
||||
|
||||
T output = {};
|
||||
for (size_t byte = 0; byte < size; byte++) {
|
||||
output = (output << 8) | reverseBitsLookUpTable[val & mask(8)];
|
||||
val >>= 8;
|
||||
if constexpr (sizeof(T) == 1) {
|
||||
return reverseBitsLookUpTable[val];
|
||||
} else {
|
||||
T output = {};
|
||||
|
||||
for (size_t byte = 0; byte < size; byte++) {
|
||||
output = (output << 8) | reverseBitsLookUpTable[val & mask(8)];
|
||||
val >>= 8;
|
||||
}
|
||||
|
||||
return output;
|
||||
}
|
||||
|
||||
return output;
|
||||
}
|
||||
|
||||
template <class T>
|
||||
std::enable_if_t<std::is_integral<T>::value && sizeof(T) == 1, T>
|
||||
reverseBits(T val, size_t size=sizeof(T))
|
||||
{
|
||||
assert(size == 1);
|
||||
return reverseBitsLookUpTable[val];
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user