From d24de1f719ef133b2b93178cb971d913ffac973b Mon Sep 17 00:00:00 2001 From: Lynix Date: Wed, 24 Feb 2016 14:17:47 +0100 Subject: [PATCH] Network/NetPacket: Add move constructor/operator Former-commit-id: 56cb793ab75e5bcd97b89c5be3592922c23a7a4d --- include/Nazara/Network/NetPacket.hpp | 4 ++-- include/Nazara/Network/NetPacket.inl | 28 ++++++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/include/Nazara/Network/NetPacket.hpp b/include/Nazara/Network/NetPacket.hpp index bbd5a750b..272808a33 100644 --- a/include/Nazara/Network/NetPacket.hpp +++ b/include/Nazara/Network/NetPacket.hpp @@ -25,7 +25,7 @@ namespace Nz inline NetPacket(UInt16 netCode, std::size_t minCapacity = 0); inline NetPacket(UInt16 netCode, const void* ptr, std::size_t size); NetPacket(const NetPacket&) = delete; - NetPacket(NetPacket&&) = default; + NetPacket(NetPacket&& packet); inline ~NetPacket(); inline const UInt8* GetConstData() const; @@ -45,7 +45,7 @@ namespace Nz inline void SetNetCode(UInt16 netCode); NetPacket& operator=(const NetPacket&) = delete; - NetPacket& operator=(NetPacket&&) = default; + NetPacket& operator=(NetPacket&& packet); static bool DecodeHeader(const void* data, UInt16* packetSize, UInt16* netCode); static bool EncodeHeader(void* data, UInt16 packetSize, UInt16 netCode); diff --git a/include/Nazara/Network/NetPacket.inl b/include/Nazara/Network/NetPacket.inl index d21f9a3db..c9bbed681 100644 --- a/include/Nazara/Network/NetPacket.inl +++ b/include/Nazara/Network/NetPacket.inl @@ -24,6 +24,17 @@ namespace Nz Reset(netCode, ptr, size); } + inline NetPacket::NetPacket(NetPacket&& packet) : + ByteStream(std::move(packet)), + m_buffer(std::move(packet.m_buffer)), + m_memoryStream(std::move(packet.m_memoryStream)), + m_netCode(packet.m_netCode) + { + ///< Redirect memory stream to the moved buffer + m_memoryStream.SetBuffer(m_buffer.get(), m_memoryStream.GetOpenMode()); + SetStream(&m_memoryStream); + } + inline NetPacket::~NetPacket() { FlushBits(); //< Needs to be done here as the stream will be freed before ByteStream calls it @@ -88,6 +99,23 @@ namespace Nz { m_netCode = netCode; } + + inline NetPacket& Nz::NetPacket::operator=(NetPacket&& packet) + { + FreeStream(); + + ByteStream::operator=(std::move(packet)); + + m_buffer = std::move(packet.m_buffer); + m_memoryStream = std::move(packet.m_memoryStream); + m_netCode = packet.m_netCode; + + ///< Redirect memory stream to the moved buffer + m_memoryStream.SetBuffer(m_buffer.get(), m_memoryStream.GetOpenMode()); + SetStream(&m_memoryStream); + + return *this; + } } #include