1
0
mirror of https://github.com/doitsujin/dxvk.git synced 2025-01-18 20:52:10 +01:00

[util] Implement bit cast.

This commit is contained in:
Joshua Ashton 2019-02-15 12:32:02 +00:00 committed by Philip Rebohle
parent fc91fe1d34
commit a3f74b5eda

View File

@ -15,8 +15,21 @@
#include "util_likely.h"
#include <cstring>
#include <type_traits>
namespace dxvk::bit {
template<typename T, typename J>
T cast(const J& src) {
static_assert(sizeof(T) == sizeof(J));
static_assert(std::is_trivially_copyable<J>::value && std::is_trivial<T>::value);
T dst;
std::memcpy(&dst, &src, sizeof(T));
return dst;
}
template<typename T>
T extract(T value, uint32_t fst, uint32_t lst) {
return (value >> fst) & ~(~T(0) << (lst - fst + 1));