diff options
| author | Shauren <shauren.trinity@gmail.com> | 2020-09-04 13:38:24 +0200 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2020-09-04 13:38:24 +0200 |
| commit | b23190393248455f04d3a06def030a1ec7efad1e (patch) | |
| tree | 1ce3772314492dcdb985641269a3114813d4b4dc /src/server/shared/Packets | |
| parent | b20acfe701e6f5f995f2776f076d3c494c02e1aa (diff) | |
Core/Misc: Port all the refactors sneaked in master to 3.3.5 include cleanup port
Diffstat (limited to 'src/server/shared/Packets')
| -rw-r--r-- | src/server/shared/Packets/ByteBuffer.cpp | 23 | ||||
| -rw-r--r-- | src/server/shared/Packets/ByteBuffer.h | 6 |
2 files changed, 22 insertions, 7 deletions
diff --git a/src/server/shared/Packets/ByteBuffer.cpp b/src/server/shared/Packets/ByteBuffer.cpp index 1c838248eca..997d1488c64 100644 --- a/src/server/shared/Packets/ByteBuffer.cpp +++ b/src/server/shared/Packets/ByteBuffer.cpp @@ -69,15 +69,30 @@ uint32 ByteBuffer::ReadPackedTime() return uint32(mktime(<)); } -void ByteBuffer::append(const uint8 *src, size_t cnt) +void ByteBuffer::append(uint8 const* src, size_t cnt) { ASSERT(src, "Attempted to put a NULL-pointer in ByteBuffer (pos: " SZFMTD " size: " SZFMTD ")", _wpos, size()); ASSERT(cnt, "Attempted to put a zero-sized value in ByteBuffer (pos: " SZFMTD " size: " SZFMTD ")", _wpos, size()); ASSERT(size() < 10000000); + size_t const newSize = _wpos + cnt; + if (_storage.capacity() < newSize) // custom memory allocation rules + { + if (newSize < 100) + _storage.reserve(300); + else if (newSize < 750) + _storage.reserve(2500); + else if (newSize < 6000) + _storage.reserve(10000); + else + _storage.reserve(400000); + } + FlushBits(); - _storage.insert(_storage.begin() + _wpos, src, src + cnt); - _wpos += cnt; + if (_storage.size() < newSize) + _storage.resize(newSize); + std::memcpy(&_storage[_wpos], src, cnt); + _wpos = newSize; } void ByteBuffer::AppendPackedTime(time_t time) @@ -87,7 +102,7 @@ void ByteBuffer::AppendPackedTime(time_t time) append<uint32>((lt.tm_year - 100) << 24 | lt.tm_mon << 20 | (lt.tm_mday - 1) << 14 | lt.tm_wday << 11 | lt.tm_hour << 6 | lt.tm_min); } -void ByteBuffer::put(size_t pos, const uint8 *src, size_t cnt) +void ByteBuffer::put(size_t pos, uint8 const* src, size_t cnt) { ASSERT(pos + cnt <= size(), "Attempted to put value with size: " SZFMTD " in ByteBuffer (pos: " SZFMTD " size: " SZFMTD ")", cnt, pos, size()); ASSERT(src, "Attempted to put a NULL-pointer in ByteBuffer (pos: " SZFMTD " size: " SZFMTD ")", pos, size()); diff --git a/src/server/shared/Packets/ByteBuffer.h b/src/server/shared/Packets/ByteBuffer.h index 13d77b41c14..36cb0f5f970 100644 --- a/src/server/shared/Packets/ByteBuffer.h +++ b/src/server/shared/Packets/ByteBuffer.h @@ -563,9 +563,9 @@ class TC_SHARED_API ByteBuffer return append((const uint8 *)src, cnt * sizeof(T)); } - void append(const uint8 *src, size_t cnt); + void append(uint8 const* src, size_t cnt); - void append(const ByteBuffer& buffer) + void append(ByteBuffer const& buffer) { if (!buffer.empty()) append(buffer.contents(), buffer.size()); @@ -622,7 +622,7 @@ class TC_SHARED_API ByteBuffer void AppendPackedTime(time_t time); - void put(size_t pos, const uint8 *src, size_t cnt); + void put(size_t pos, uint8 const* src, size_t cnt); void print_storage() const; |
