aboutsummaryrefslogtreecommitdiff
path: root/src/server/shared
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/shared')
-rw-r--r--src/server/shared/DataStores/DB2DatabaseLoader.cpp10
-rw-r--r--src/server/shared/Packets/ByteBuffer.h23
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));
}