aboutsummaryrefslogtreecommitdiff
path: root/src/server/shared/Packets/ByteBuffer.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/shared/Packets/ByteBuffer.h')
-rw-r--r--src/server/shared/Packets/ByteBuffer.h17
1 files changed, 9 insertions, 8 deletions
diff --git a/src/server/shared/Packets/ByteBuffer.h b/src/server/shared/Packets/ByteBuffer.h
index ee4e263b58f..abd00078911 100644
--- a/src/server/shared/Packets/ByteBuffer.h
+++ b/src/server/shared/Packets/ByteBuffer.h
@@ -427,23 +427,24 @@ class TC_SHARED_API ByteBuffer
_rpos += skip;
}
- template <typename T>
+ template <typename T, typename Underlying = T>
T read()
{
ResetBitPos();
- T r = read<T>(_rpos);
- _rpos += sizeof(T);
+ T r = read<T, Underlying>(_rpos);
+ _rpos += sizeof(Underlying);
return r;
}
- template <typename T>
+ template <typename T, typename Underlying = T>
T read(size_t pos) const
{
- if (pos + sizeof(T) > size())
- throw ByteBufferPositionException(pos, sizeof(T), size());
- T val = *((T const*)&_storage[pos]);
+ if (pos + sizeof(Underlying) > size())
+ throw ByteBufferPositionException(pos, sizeof(Underlying), size());
+ Underlying val;
+ std::memcpy(&val, &_storage[pos], sizeof(Underlying));
EndianConvert(val);
- return val;
+ return static_cast<T>(val);
}
template<class T>