aboutsummaryrefslogtreecommitdiff
path: root/src/server/shared/Packets/ByteBuffer.h
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2018-10-04 18:50:21 +0200
committerShauren <shauren.trinity@gmail.com>2018-11-05 00:00:34 +0100
commit0a779bd791fb63b2fc1663206279c7eaa9c02c6f (patch)
treecf13cec2eaab909646f278242981dd51349fddfd /src/server/shared/Packets/ByteBuffer.h
parent7512ffb0587eccd8fbb2a2841900d572056dbae3 (diff)
Core/PacketIO: Updated packet structures to 8.0.1
Diffstat (limited to 'src/server/shared/Packets/ByteBuffer.h')
-rw-r--r--src/server/shared/Packets/ByteBuffer.h23
1 files changed, 17 insertions, 6 deletions
diff --git a/src/server/shared/Packets/ByteBuffer.h b/src/server/shared/Packets/ByteBuffer.h
index fdd3667a3a6..c7009028e9c 100644
--- a/src/server/shared/Packets/ByteBuffer.h
+++ b/src/server/shared/Packets/ByteBuffer.h
@@ -123,9 +123,10 @@ class TC_SHARED_API ByteBuffer
_storage.clear();
}
- template <typename T> void append(T value)
+ template <typename T>
+ void append(T value)
{
- static_assert(std::is_fundamental<T>::value, "append(compound)");
+ static_assert(std::is_trivially_copyable<T>::value, "append(T) must be used with trivially copyable types");
EndianConvert(value);
append((uint8 *)&value, sizeof(value));
}
@@ -210,7 +211,7 @@ class TC_SHARED_API ByteBuffer
template <typename T>
void put(std::size_t pos, T value)
{
- static_assert(std::is_fundamental<T>::value, "append(compound)");
+ static_assert(std::is_trivially_copyable<T>::value, "put(size_t, T) must be used with trivially copyable types");
EndianConvert(value);
put(pos, (uint8 *)&value, sizeof(value));
}
@@ -435,7 +436,8 @@ class TC_SHARED_API ByteBuffer
_rpos += skip;
}
- template <typename T> T read()
+ template <typename T>
+ T read()
{
ResetBitPos();
T r = read<T>(_rpos);
@@ -443,7 +445,8 @@ class TC_SHARED_API ByteBuffer
return r;
}
- template <typename T> T read(size_t pos) const
+ template <typename T>
+ T read(size_t pos) const
{
if (pos + sizeof(T) > size())
throw ByteBufferPositionException(pos, sizeof(T), size());
@@ -452,6 +455,13 @@ class TC_SHARED_API ByteBuffer
return val;
}
+ template<class T>
+ void read(T* dest, size_t count)
+ {
+ static_assert(std::is_trivially_copyable<T>::value, "read(T*, size_t) must be used with trivially copyable types");
+ return read(reinterpret_cast<uint8*>(dest), count * sizeof(T));
+ }
+
void read(uint8 *dest, size_t len)
{
if (_rpos + len > size())
@@ -540,7 +550,8 @@ class TC_SHARED_API ByteBuffer
return append((const uint8 *)src, cnt);
}
- template<class T> void append(const T *src, size_t cnt)
+ template<class T>
+ void append(const T *src, size_t cnt)
{
return append((const uint8 *)src, cnt * sizeof(T));
}