From d30504ceb403c050369dfff03ebc46ff765089b7 Mon Sep 17 00:00:00 2001 From: "Stephen F. Booth" Date: Mon, 9 Dec 2024 11:55:21 -0600 Subject: [PATCH] Attempted fixes for gcc --- taglib/toolkit/tbytevector.cpp | 48 ++++++++++++++++++++++++++++------ 1 file changed, 40 insertions(+), 8 deletions(-) diff --git a/taglib/toolkit/tbytevector.cpp b/taglib/toolkit/tbytevector.cpp index 7a9c6746..3338f61e 100644 --- a/taglib/toolkit/tbytevector.cpp +++ b/taglib/toolkit/tbytevector.cpp @@ -139,8 +139,16 @@ T toNumber(const ByteVector &v, size_t offset, bool mostSignificantByteFirst) T tmp; ::memcpy(&tmp, v.data() + offset, sizeof(T)); - if(swap) - return Utils::byteSwap(tmp); + if(swap) { + if constexpr (sizeof(T) == 2) + return Utils::byteSwap(static_cast(tmp)); + else if constexpr (sizeof(T) == 4) + return Utils::byteSwap(static_cast(tmp)); + else if constexpr (sizeof(T) == 8) + return Utils::byteSwap(static_cast(tmp)); + else + static_assert(false, "Byte swap requested for type with invalid size"); + } return tmp; } @@ -149,8 +157,16 @@ ByteVector fromNumber(T value, bool mostSignificantByteFirst) { const bool isBigEndian = Utils::systemByteOrder() == Utils::BigEndian; - if(mostSignificantByteFirst != isBigEndian) - value = Utils::byteSwap(value); + if(mostSignificantByteFirst != isBigEndian) { + if constexpr (sizeof(T) == 2) + value = Utils::byteSwap(static_cast(value)); + else if constexpr (sizeof(T) == 4) + value = Utils::byteSwap(static_cast(value)); + else if constexpr (sizeof(T) == 8) + value = Utils::byteSwap(static_cast(value)); + else + static_assert(false, "Byte swap requested for type with invalid size"); + } return ByteVector(reinterpret_cast(&value), sizeof(T)); } @@ -169,8 +185,16 @@ TFloat toFloat(const ByteVector &v, size_t offset) } tmp; ::memcpy(&tmp, v.data() + offset, sizeof(TInt)); - if(ENDIAN != Utils::systemByteOrder()) - tmp.i = Utils::byteSwap(tmp.i); + if(ENDIAN != Utils::systemByteOrder()) { + if constexpr (sizeof(T) == 2) + tmp.i = Utils::byteSwap(static_cast(tmp.i)); + else if constexpr (sizeof(T) == 4) + tmp.i = Utils::byteSwap(static_cast(tmp.i)); + else if constexpr (sizeof(T) == 8) + tmp.i = Utils::byteSwap(static_cast(tmp.i)); + else + static_assert(false, "Byte swap requested for type with invalid size"); + } return tmp.f; } @@ -184,8 +208,16 @@ ByteVector fromFloat(TFloat value) } tmp; tmp.f = value; - if(ENDIAN != Utils::systemByteOrder()) - tmp.i = Utils::byteSwap(tmp.i); + if(ENDIAN != Utils::systemByteOrder()) { + if constexpr (sizeof(T) == 2) + tmp.i = Utils::byteSwap(static_cast(tmp.i)); + else if constexpr (sizeof(T) == 4) + tmp.i = Utils::byteSwap(static_cast(tmp.i)); + else if constexpr (sizeof(T) == 8) + tmp.i = Utils::byteSwap(static_cast(tmp.i)); + else + static_assert(false, "Byte swap requested for type with invalid size"); + } return ByteVector(reinterpret_cast(&tmp), sizeof(TInt)); }