Skip to content

Instantly share code, notes, and snippets.

@DDuarte
Created February 13, 2015 00:10
Show Gist options
  • Save DDuarte/4f063dfbddb79f6b911a to your computer and use it in GitHub Desktop.
Save DDuarte/4f063dfbddb79f6b911a to your computer and use it in GitHub Desktop.
diff --git a/src/server/game/Server/Packets/PacketUtilities.h b/src/server/game/Server/Packets/PacketUtilities.h
index 25e6f27..518a57b 100644
--- a/src/server/game/Server/Packets/PacketUtilities.h
+++ b/src/server/game/Server/Packets/PacketUtilities.h
@@ -36,6 +36,7 @@ namespace WorldPackets
{
public:
uint32 GetMask() const { return _mask; }
+ void SetMask(uint32 mask) { _mask = mask; }
T const& operator[](size_t index) const { return _contents.at(index); }
size_t GetSize() const { return _contents.size(); }
@@ -49,6 +50,12 @@ namespace WorldPackets
_contents[index] = value;
}
+ void Insert(T const& value)
+ {
+ ASSERT(_mask != 0);
+ _contents.push_back(value);
+ }
+
void Clear()
{
_mask = 0;
@@ -73,4 +80,25 @@ namespace WorldPackets
return data;
}
+
+ template <typename T>
+ ByteBuffer& operator>>(ByteBuffer& data, CompactArray<T>& v)
+ {
+ uint32 mask;
+ data << uint32(mask);
+
+ v.SetMask(mask);
+
+ for (size_t i = 0; i < 8; ++i)
+ {
+ if ((mask & (1u << (i - 1))) != 0)
+ {
+ T value;
+ data >> value;
+ v.Insert(value);
+ }
+ }
+
+ return data;
+ }
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment