Avoid duplicating an inline template function
This commit is contained in:
+4
-21
@@ -465,11 +465,9 @@ void MirrorLeftHrirs(const al::span<const HrtfStore::Elevation> elevs, HrirArray
|
|||||||
|
|
||||||
|
|
||||||
template<typename T, size_t num_bits=sizeof(T)*8>
|
template<typename T, size_t num_bits=sizeof(T)*8>
|
||||||
inline std::enable_if_t<std::is_signed<T>::value,T>
|
inline T readle(std::istream &data)
|
||||||
readle(std::istream &data)
|
|
||||||
{
|
{
|
||||||
static_assert((num_bits&7) == 0, "num_bits must be a multiple of 8");
|
static_assert((num_bits&7) == 0, "num_bits must be a multiple of 8");
|
||||||
constexpr auto signbit = static_cast<T>(1 << (num_bits-1));
|
|
||||||
|
|
||||||
al::byte b[num_bits/8];
|
al::byte b[num_bits/8];
|
||||||
if(!data.read(reinterpret_cast<char*>(b), sizeof(b)))
|
if(!data.read(reinterpret_cast<char*>(b), sizeof(b)))
|
||||||
@@ -482,25 +480,10 @@ readle(std::istream &data)
|
|||||||
for(size_t i{0};i < sizeof(b);++i)
|
for(size_t i{0};i < sizeof(b);++i)
|
||||||
ret |= al::to_integer<T>(b[i]) << (i*8);
|
ret |= al::to_integer<T>(b[i]) << (i*8);
|
||||||
}
|
}
|
||||||
return (ret^signbit) - signbit;
|
if /*constexpr*/(std::is_signed<T>::value)
|
||||||
}
|
|
||||||
|
|
||||||
template<typename T, size_t num_bits=sizeof(T)*8>
|
|
||||||
inline std::enable_if_t<!std::is_signed<T>::value,T>
|
|
||||||
readle(std::istream &data)
|
|
||||||
{
|
|
||||||
static_assert((num_bits&7) == 0, "num_bits must be a multiple of 8");
|
|
||||||
|
|
||||||
al::byte b[num_bits/8];
|
|
||||||
if(!data.read(reinterpret_cast<char*>(b), sizeof(b)))
|
|
||||||
return static_cast<T>(EOF);
|
|
||||||
T ret{};
|
|
||||||
if(IS_LITTLE_ENDIAN)
|
|
||||||
std::memcpy(&ret, b, sizeof(b));
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
for(size_t i{0};i < sizeof(b);++i)
|
constexpr auto signbit = static_cast<T>(1u << (num_bits-1));
|
||||||
ret |= al::to_integer<T>(b[i]) << (i*8);
|
return (ret^signbit) - signbit;
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user