From 1fb355520e5c701150a8a6233f5a2a1382e7b006 Mon Sep 17 00:00:00 2001 From: Jamie Reece Wilson Date: Fri, 19 Jul 2024 08:24:51 +0100 Subject: [PATCH] [*] Made AuMemoryViewRead/Writes to bytebuffer less ambiguous --- Include/Aurora/Memory/ByteBuffer.hpp | 27 ++++++++++--------- .../Memory/ByteBuffer_TypedReadWrite.inl | 26 +++++++++++++----- 2 files changed, 33 insertions(+), 20 deletions(-) diff --git a/Include/Aurora/Memory/ByteBuffer.hpp b/Include/Aurora/Memory/ByteBuffer.hpp index bf061604..3d0b534a 100644 --- a/Include/Aurora/Memory/ByteBuffer.hpp +++ b/Include/Aurora/Memory/ByteBuffer.hpp @@ -375,16 +375,6 @@ namespace Aurora::Memory inline auline AuUInt Write(const void *buffer, AuUInt requestLength); inline auline AuUInt Read(void *out, AuUInt requestedLength, bool peek = false); - inline auline AuUInt Write(const MemoryViewRead &read) - { - return Write(read.ptr, read.length); - } - - inline auline AuUInt Read(const MemoryViewWrite &write) - { - return Read(write.ptr, write.length); - } - // String API inline bool WriteString(AuROString string, EStringType type = EStringType::eStringDword, Locale::ECodePage codepage = Locale::ECodePage::eUTF8); @@ -411,13 +401,24 @@ namespace Aurora::Memory T ReadChecked(); template - bool Write(const T &in); + using ReadHack_t = AuConditional_t, AuUInt, bool>; template - bool Write(T &in); + using WriteHack_t = AuConditional_t, AuUInt, bool>; template - bool Read(T &out); + WriteHack_t Write(const T &in); + + template + WriteHack_t Write(T &in); + + template + ReadHack_t Read(T &out); + + inline auline AuUInt Read(const MemoryViewWrite &write) + { + return Read(write.ptr, write.length); + } template bool WriteTagged(const T &in); diff --git a/Include/Aurora/Memory/ByteBuffer_TypedReadWrite.inl b/Include/Aurora/Memory/ByteBuffer_TypedReadWrite.inl index 7c4122d8..accb9fa4 100644 --- a/Include/Aurora/Memory/ByteBuffer_TypedReadWrite.inl +++ b/Include/Aurora/Memory/ByteBuffer_TypedReadWrite.inl @@ -150,11 +150,15 @@ namespace Aurora::Memory } template - bool ByteBuffer::Read(T &out) + ByteBuffer::ReadHack_t ByteBuffer::Read(T &out) { if constexpr (AuIsClass_v) { - if constexpr (__detail::AuHasDeserializeBool>::type::value) + if constexpr (AuIsSame_v) + { + return Read(out.ptr, out.length); + } + else if constexpr (__detail::AuHasDeserializeBool>::type::value) { if (!out.Deserialize(*this)) { @@ -331,12 +335,16 @@ namespace Aurora::Memory } template - bool ByteBuffer::Write(T &in) + ByteBuffer::WriteHack_t ByteBuffer::Write(T &in) { if constexpr (AuIsClass_v) { - if constexpr (__detail::AuHasSerializeBool>::type::value || - __detail::AuHasSerializeBool2>::type::value) + if constexpr (AuIsSame_v) + { + return Write(in.ptr, in.length); + } + else if constexpr (__detail::AuHasSerializeBool>::type::value || + __detail::AuHasSerializeBool2>::type::value) { if (!in.Serialize(*this)) { @@ -366,11 +374,15 @@ namespace Aurora::Memory } template - bool ByteBuffer::Write(const T &in) + ByteBuffer::WriteHack_t ByteBuffer::Write(const T &in) { if constexpr (AuIsClass_v) { - if constexpr (__detail::AuHasSerializeBool2>::type::value) + if constexpr (AuIsSame_v) + { + return Write(in.ptr, in.length); + } + else if constexpr (__detail::AuHasSerializeBool2>::type::value) { if (!in.Serialize(*this)) {