diff options
author | Shauren <shauren.trinity@gmail.com> | 2025-05-22 22:11:31 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2025-05-22 22:11:31 +0200 |
commit | 0174ece816266ae7551f296458da1a8a4d821117 (patch) | |
tree | 1463f8ed8bd02fef2c210f0de5dbc46c81611d5d /src | |
parent | d1f9b238252db47f75dc6e35fdcc7d44d9dca887 (diff) |
Core/PacketIO: Support WorldPackets::String in SizedString/SizedCString writers
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Server/Packets/PacketUtilities.h | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/src/server/game/Server/Packets/PacketUtilities.h b/src/server/game/Server/Packets/PacketUtilities.h index 1cfee3fd074..5431d091345 100644 --- a/src/server/game/Server/Packets/PacketUtilities.h +++ b/src/server/game/Server/Packets/PacketUtilities.h @@ -518,10 +518,32 @@ namespace WorldPackets namespace SizedString { template<uint32 BitCount, typename Container> - inline BitsSizeWriter<BitCount, Container> BitsSize(Container const& value) { return { value }; } + struct SizeWriter + { + Container const& Value; + + friend inline ByteBuffer& operator<<(ByteBuffer& data, SizeWriter const& bits) + { + data.WriteBits(static_cast<uint32>(bits.Value.length()), BitCount); + return data; + } + }; + + template<uint32 BitCount, typename Container> + struct SizeReaderWriter : SizeWriter<BitCount, Container> + { + friend inline ByteBuffer& operator>>(ByteBuffer& data, SizeReaderWriter const& bits) + { + const_cast<Container&>(bits.Value).resize(data.ReadBits(BitCount)); + return data; + } + }; template<uint32 BitCount, typename Container> - inline BitsSizeReaderWriter<BitCount, Container> BitsSize(Container& value) { return { value }; } + inline SizeWriter<BitCount, Container> BitsSize(Container const& value) { return { value }; } + + template<uint32 BitCount, typename Container> + inline SizeReaderWriter<BitCount, Container> BitsSize(Container& value) { return { value }; } template<typename Container> struct DataWriter |