From 284b4e16bacad6d84bb7f91ab9971b886093cfad Mon Sep 17 00:00:00 2001 From: Shauren Date: Sun, 23 Oct 2016 18:05:53 +0200 Subject: Core/PacketIO: Use boost::static_vector for arrays in client packets, removed setting the limit during runtime and removed default value --- src/server/game/Server/Packets/PacketUtilities.h | 31 +++++++++--------------- 1 file changed, 12 insertions(+), 19 deletions(-) (limited to 'src') diff --git a/src/server/game/Server/Packets/PacketUtilities.h b/src/server/game/Server/Packets/PacketUtilities.h index 60c8994afc5..487c01dbf6d 100644 --- a/src/server/game/Server/Packets/PacketUtilities.h +++ b/src/server/game/Server/Packets/PacketUtilities.h @@ -21,6 +21,7 @@ #include "ByteBuffer.h" #include #include +#include #include #include @@ -64,10 +65,12 @@ namespace WorldPackets /** * Utility class for automated prevention of loop counter spoofing in client packets */ - template + template class Array { - typedef std::vector storage_type; + typedef boost::container::static_vector storage_type; + + typedef std::integral_constant max_capacity; typedef typename storage_type::value_type value_type; typedef typename storage_type::size_type size_type; @@ -77,8 +80,7 @@ namespace WorldPackets typedef typename storage_type::const_iterator const_iterator; public: - Array() : _limit(N) { } - Array(size_type limit) : _limit(limit) { } + Array() { } iterator begin() { return _storage.begin(); } const_iterator begin() const { return _storage.begin(); } @@ -94,39 +96,30 @@ namespace WorldPackets void resize(size_type newSize) { - if (newSize > _limit) - throw PacketArrayMaxCapacityException(newSize, _limit); + if (newSize > max_capacity::value) + throw PacketArrayMaxCapacityException(newSize, max_capacity::value); _storage.resize(newSize); } - void reserve(size_type newSize) - { - if (newSize > _limit) - throw PacketArrayMaxCapacityException(newSize, _limit); - - _storage.reserve(newSize); - } - void push_back(value_type const& value) { - if (_storage.size() >= _limit) - throw PacketArrayMaxCapacityException(_storage.size() + 1, _limit); + if (_storage.size() >= max_capacity::value) + throw PacketArrayMaxCapacityException(_storage.size() + 1, max_capacity::value); _storage.push_back(value); } void push_back(value_type&& value) { - if (_storage.size() >= _limit) - throw PacketArrayMaxCapacityException(_storage.size() + 1, _limit); + if (_storage.size() >= max_capacity::value) + throw PacketArrayMaxCapacityException(_storage.size() + 1, max_capacity::value); _storage.push_back(std::forward(value)); } private: storage_type _storage; - size_type _limit; }; template -- cgit v1.2.3