diff options
Diffstat (limited to 'src/server/shared')
| -rw-r--r-- | src/server/shared/DataStores/DB2DatabaseLoader.cpp | 10 | ||||
| -rw-r--r-- | src/server/shared/Packets/ByteBuffer.h | 23 |
2 files changed, 23 insertions, 10 deletions
diff --git a/src/server/shared/DataStores/DB2DatabaseLoader.cpp b/src/server/shared/DataStores/DB2DatabaseLoader.cpp index 3619920c0c0..ec99537c066 100644 --- a/src/server/shared/DataStores/DB2DatabaseLoader.cpp +++ b/src/server/shared/DataStores/DB2DatabaseLoader.cpp @@ -112,7 +112,7 @@ char* DB2DatabaseLoader::Load(uint32& records, char**& indexTable, char*& string for (uint32 x = 0; x < _loadInfo->Meta->FieldCount; ++x) { - for (uint32 z = 0; z < _loadInfo->Meta->ArraySizes[x]; ++z) + for (uint32 z = 0; z < _loadInfo->Meta->Fields[x].ArraySize; ++z) { switch (_loadInfo->TypesString[f]) { @@ -165,7 +165,8 @@ char* DB2DatabaseLoader::Load(uint32& records, char**& indexTable, char*& string break; } default: - ASSERT(false, "Unknown format character '%c' found in %s meta", _loadInfo->TypesString[x], _storageName.c_str()); + ASSERT(false, "Unknown format character '%c' found in %s meta for field %s", + _loadInfo->TypesString[f], _storageName.c_str(), _loadInfo->Fields[f].Name); break; } ++f; @@ -236,7 +237,7 @@ void DB2DatabaseLoader::LoadStrings(uint32 locale, uint32 records, char** indexT for (uint32 x = 0; x < fieldCount; ++x) { - for (uint32 z = 0; z < _loadInfo->Meta->ArraySizes[x]; ++z) + for (uint32 z = 0; z < _loadInfo->Meta->Fields[x].ArraySize; ++z) { switch (_loadInfo->TypesString[fieldIndex]) { @@ -269,7 +270,8 @@ void DB2DatabaseLoader::LoadStrings(uint32 locale, uint32 records, char** indexT offset += sizeof(char*); break; default: - ASSERT(false, "Unknown format character '%c' found in %s meta", _loadInfo->TypesString[x], _storageName.c_str()); + ASSERT(false, "Unknown format character '%c' found in %s meta for field %s", + _loadInfo->TypesString[fieldIndex], _storageName.c_str(), _loadInfo->Fields[fieldIndex].Name); break; } ++fieldIndex; 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)); } |
