From d5eda98e49cc81dbbd35e469bcda7504d29d9ddb Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Tue, 22 Jan 2019 22:00:52 +0300 Subject: [PATCH] Fix le_t<> compilation error Use memcpy for copying --- Utilities/BEType.h | 49 ++++++++++++++-------------------------------- 1 file changed, 15 insertions(+), 34 deletions(-) diff --git a/Utilities/BEType.h b/Utilities/BEType.h index 5fa1f94611..e9e73a4ee5 100644 --- a/Utilities/BEType.h +++ b/Utilities/BEType.h @@ -1,6 +1,7 @@ #pragma once #include "types.h" +#include // 128-bit vector type and also se_storage<> storage type union alignas(16) v128 @@ -361,16 +362,6 @@ struct se_storage reverse(reinterpret_cast(&result), reinterpret_cast(&src)); return result; } - - static type copy(const type& src) - { - type result; - for (std::size_t i = 0; i < Size; i++) - { - reinterpret_cast(&result)[i] = reinterpret_cast(&src)[i]; - } - return result; - } }; template @@ -397,11 +388,6 @@ struct se_storage const u16 result = swap(src); return reinterpret_cast(result); } - - static inline T copy(const T& src) - { - return src; - } }; template @@ -428,11 +414,6 @@ struct se_storage const u32 result = swap(src); return reinterpret_cast(result); } - - static inline T copy(const T& src) - { - return src; - } }; template @@ -459,11 +440,6 @@ struct se_storage const u64 result = swap(src); return reinterpret_cast(result); } - - static inline T copy(const T& src) - { - return src; - } }; template @@ -486,11 +462,6 @@ struct se_storage const v128 result = swap(src); return reinterpret_cast(result); } - - static inline T copy(const T& src) - { - return src; - } }; // Switched endianness @@ -553,31 +524,41 @@ class se_t stype m_data; + static stype init(type value) + { + stype result; + std::memcpy(&result, &value, sizeof(result)); + return result; + } + public: se_t() = default; se_t(type value) - : m_data(reinterpret_cast(value)) + : m_data(init(value)) { } type value() const { - return storage::copy(reinterpret_cast(m_data)); + type result; + std::memcpy(&result, &m_data, sizeof(result)); + return result; } se_t& operator=(const se_t& value) = default; se_t& operator=(type value) { - return m_data = reinterpret_cast(value), *this; + std::memcpy(&m_data, &value, sizeof(m_data)); + return *this; } using simple_type = simple_t; operator type() const { - return storage::copy(reinterpret_cast(m_data)); + return value(); } };