Core/Algorithm: Improve SafeCast to handle references
This commit is contained in:
parent
55784a7dfc
commit
aac6e38da2
|
|
@ -36,7 +36,7 @@ namespace Nz
|
|||
template<typename T> void HashCombine(std::size_t& seed, const T& v);
|
||||
template<typename T> bool IsPowerOfTwo(T value);
|
||||
template<typename T> T ReverseBits(T integer);
|
||||
template<typename To, typename From> To SafeCast(From value);
|
||||
template<typename To, typename From> To SafeCast(From&& value);
|
||||
template<typename T> constexpr auto UnderlyingCast(T value) -> std::underlying_type_t<T>;
|
||||
|
||||
template<typename T>
|
||||
|
|
|
|||
|
|
@ -50,9 +50,9 @@ namespace Nz
|
|||
decltype(auto) AccessByOffset(void* basePtr, std::size_t offset)
|
||||
{
|
||||
if constexpr (std::is_lvalue_reference_v<T>)
|
||||
return *reinterpret_cast<std::remove_reference_t<T>*>(static_cast<Nz::UInt8*>(basePtr) + offset);
|
||||
return *reinterpret_cast<std::remove_reference_t<T>*>(static_cast<UInt8*>(basePtr) + offset);
|
||||
else if constexpr (std::is_pointer_v<T>)
|
||||
return reinterpret_cast<T>(static_cast<Nz::UInt8*>(basePtr) + offset);
|
||||
return reinterpret_cast<T>(static_cast<UInt8*>(basePtr) + offset);
|
||||
else
|
||||
static_assert(AlwaysFalse<T>(), "AccessByOffset requires a reference or pointer type");
|
||||
}
|
||||
|
|
@ -71,9 +71,9 @@ namespace Nz
|
|||
static_assert(std::is_lvalue_reference_v<T> || std::is_pointer_v<T>);
|
||||
|
||||
if constexpr (std::is_lvalue_reference_v<T>)
|
||||
return *reinterpret_cast<std::remove_reference_t<T>*>(static_cast<const Nz::UInt8*>(basePtr) + offset);
|
||||
return *reinterpret_cast<std::remove_reference_t<T>*>(static_cast<const UInt8*>(basePtr) + offset);
|
||||
else if constexpr (std::is_pointer_v<T>)
|
||||
return reinterpret_cast<T>(static_cast<const Nz::UInt8*>(basePtr) + offset);
|
||||
return reinterpret_cast<T>(static_cast<const UInt8*>(basePtr) + offset);
|
||||
else
|
||||
static_assert(AlwaysFalse<T>(), "AccessByOffset requires a reference or pointer type");
|
||||
}
|
||||
|
|
@ -296,7 +296,7 @@ namespace Nz
|
|||
}
|
||||
|
||||
template<typename To, typename From>
|
||||
To SafeCast(From value)
|
||||
To SafeCast(From&& value)
|
||||
{
|
||||
#ifdef NAZARA_COMPILER_MSVC
|
||||
// Disable unreachable code warnings
|
||||
|
|
|
|||
Loading…
Reference in New Issue