diff options
| author | Shauren <shauren.trinity@gmail.com> | 2016-03-26 17:15:20 +0100 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2016-04-09 12:31:04 +0200 |
| commit | b841546574893ed5eb7e999c1cc43924fe827e5b (patch) | |
| tree | f7964b2e7f8629300a3c6f7d65c5f7ea7f0aab93 /src/server/shared/Networking | |
| parent | 778f1725f8b085161d28a48806b1d2ec56a53e6b (diff) | |
Core/Common: Moved MessageBuffer to common
(cherry picked from commit a81a204678f4cbd8b8a53333600f50f0b494706a)
Diffstat (limited to 'src/server/shared/Networking')
| -rw-r--r-- | src/server/shared/Networking/MessageBuffer.h | 138 |
1 files changed, 0 insertions, 138 deletions
diff --git a/src/server/shared/Networking/MessageBuffer.h b/src/server/shared/Networking/MessageBuffer.h deleted file mode 100644 index d68bee181b1..00000000000 --- a/src/server/shared/Networking/MessageBuffer.h +++ /dev/null @@ -1,138 +0,0 @@ -/* -* Copyright (C) 2008-2016 TrinityCore <http://www.trinitycore.org/> -* -* This program is free software; you can redistribute it and/or modify it -* under the terms of the GNU General Public License as published by the -* Free Software Foundation; either version 2 of the License, or (at your -* option) any later version. -* -* This program is distributed in the hope that it will be useful, but WITHOUT -* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -* more details. -* -* You should have received a copy of the GNU General Public License along -* with this program. If not, see <http://www.gnu.org/licenses/>. -*/ - -#ifndef __MESSAGEBUFFER_H_ -#define __MESSAGEBUFFER_H_ - -#include "Define.h" -#include <vector> - -class MessageBuffer -{ - typedef std::vector<uint8>::size_type size_type; - -public: - MessageBuffer() : _wpos(0), _rpos(0), _storage() - { - _storage.resize(4096); - } - - explicit MessageBuffer(std::size_t initialSize) : _wpos(0), _rpos(0), _storage() - { - _storage.resize(initialSize); - } - - MessageBuffer(MessageBuffer const& right) : _wpos(right._wpos), _rpos(right._rpos), _storage(right._storage) - { - } - - MessageBuffer(MessageBuffer&& right) : _wpos(right._wpos), _rpos(right._rpos), _storage(right.Move()) { } - - void Reset() - { - _wpos = 0; - _rpos = 0; - } - - void Resize(size_type bytes) - { - _storage.resize(bytes); - } - - uint8* GetBasePointer() { return _storage.data(); } - - uint8* GetReadPointer() { return GetBasePointer() + _rpos; } - - uint8* GetWritePointer() { return GetBasePointer() + _wpos; } - - void ReadCompleted(size_type bytes) { _rpos += bytes; } - - void WriteCompleted(size_type bytes) { _wpos += bytes; } - - size_type GetActiveSize() const { return _wpos - _rpos; } - - size_type GetRemainingSpace() const { return _storage.size() - _wpos; } - - size_type GetBufferSize() const { return _storage.size(); } - - // Discards inactive data - void Normalize() - { - if (_rpos) - { - if (_rpos != _wpos) - memmove(GetBasePointer(), GetReadPointer(), GetActiveSize()); - _wpos -= _rpos; - _rpos = 0; - } - } - - // Ensures there's "some" free space, make sure to call Normalize() before this - void EnsureFreeSpace() - { - // resize buffer if it's already full - if (GetRemainingSpace() == 0) - _storage.resize(_storage.size() * 3 / 2); - } - - void Write(void const* data, std::size_t size) - { - if (size) - { - memcpy(GetWritePointer(), data, size); - WriteCompleted(size); - } - } - - std::vector<uint8>&& Move() - { - _wpos = 0; - _rpos = 0; - return std::move(_storage); - } - - MessageBuffer& operator=(MessageBuffer const& right) - { - if (this != &right) - { - _wpos = right._wpos; - _rpos = right._rpos; - _storage = right._storage; - } - - return *this; - } - - MessageBuffer& operator=(MessageBuffer&& right) - { - if (this != &right) - { - _wpos = right._wpos; - _rpos = right._rpos; - _storage = right.Move(); - } - - return *this; - } - -private: - size_type _wpos; - size_type _rpos; - std::vector<uint8> _storage; -}; - -#endif /* __MESSAGEBUFFER_H_ */ |
