From a8254aa292ac3169c84efcd5d0d7b5a5e2067910 Mon Sep 17 00:00:00 2001 From: Matt Date: Wed, 2 Jan 2019 05:18:36 +0100 Subject: [PATCH] Add 64 bit serialisation support. --- src/openrct2/core/DataSerialiserTraits.h | 10 +++++++++- src/openrct2/core/Endianness.h | 11 +++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/openrct2/core/DataSerialiserTraits.h b/src/openrct2/core/DataSerialiserTraits.h index 15812fd088..c4a5c8b3f1 100644 --- a/src/openrct2/core/DataSerialiserTraits.h +++ b/src/openrct2/core/DataSerialiserTraits.h @@ -51,7 +51,7 @@ template struct DataSerializerTraitsIntegral else if constexpr (sizeof(T) == 4) snprintf(temp, sizeof(temp), "%08X", val); else if constexpr (sizeof(T) == 8) - snprintf(temp, sizeof(temp), "%16X", val); + snprintf(temp, sizeof(temp), "%016llX", val); else static_assert("Invalid size"); @@ -102,6 +102,14 @@ template<> struct DataSerializerTraits : public DataSerializerTraitsInt { }; +template<> struct DataSerializerTraits : public DataSerializerTraitsIntegral +{ +}; + +template<> struct DataSerializerTraits : public DataSerializerTraitsIntegral +{ +}; + template<> struct DataSerializerTraits { static void encode(IStream* stream, const std::string& str) diff --git a/src/openrct2/core/Endianness.h b/src/openrct2/core/Endianness.h index f0e642dfac..b992e8752f 100644 --- a/src/openrct2/core/Endianness.h +++ b/src/openrct2/core/Endianness.h @@ -39,6 +39,17 @@ template<> struct ByteSwapT<4> } }; +template<> struct ByteSwapT<8> +{ + static uint64_t SwapBE(uint64_t value) + { + value = (value & 0x00000000FFFFFFFF) << 32 | (value & 0xFFFFFFFF00000000) >> 32; + value = (value & 0x0000FFFF0000FFFF) << 16 | (value & 0xFFFF0000FFFF0000) >> 16; + value = (value & 0x00FF00FF00FF00FF) << 8 | (value & 0xFF00FF00FF00FF00) >> 8; + return value; + } +}; + template static T ByteSwapBE(const T& value) { return ByteSwapT::SwapBE(value);