mirror of
https://github.com/vcmi/vcmi.git
synced 2025-04-23 12:08:45 +02:00
BinaryDeserializer: replace length check macro with inline function
This commit is contained in:
parent
fc3b8b2c87
commit
ff2d01a03d
@ -13,6 +13,7 @@
|
|||||||
|
|
||||||
#include "CTypeList.h"
|
#include "CTypeList.h"
|
||||||
#include "../mapObjects/CGHeroInstance.h"
|
#include "../mapObjects/CGHeroInstance.h"
|
||||||
|
#include "../../Global.h"
|
||||||
|
|
||||||
class CStackInstance;
|
class CStackInstance;
|
||||||
class FileStream;
|
class FileStream;
|
||||||
@ -111,14 +112,17 @@ class DLL_LINKAGE BinaryDeserializer : public CLoaderBase
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
#define READ_CHECK_U32(x) \
|
STRONG_INLINE ui32 readAndCheckLength()
|
||||||
ui32 length; \
|
{
|
||||||
load(length); \
|
ui32 length;
|
||||||
if(length > 500000) \
|
load(length);
|
||||||
{ \
|
if(length > 500000)
|
||||||
logGlobal->warn("Warning: very big length: %d", length);\
|
{
|
||||||
reader->reportState(logGlobal); \
|
logGlobal->warn("Warning: very big length: %d", length);
|
||||||
|
reader->reportState(logGlobal);
|
||||||
};
|
};
|
||||||
|
return length;
|
||||||
|
}
|
||||||
|
|
||||||
template <typename T> class CPointerLoader;
|
template <typename T> class CPointerLoader;
|
||||||
|
|
||||||
@ -237,7 +241,7 @@ public:
|
|||||||
template <typename T, typename std::enable_if < !std::is_same<T, bool >::value, int >::type = 0>
|
template <typename T, typename std::enable_if < !std::is_same<T, bool >::value, int >::type = 0>
|
||||||
void load(std::vector<T> &data)
|
void load(std::vector<T> &data)
|
||||||
{
|
{
|
||||||
READ_CHECK_U32(length);
|
ui32 length = readAndCheckLength();
|
||||||
data.resize(length);
|
data.resize(length);
|
||||||
for(ui32 i=0;i<length;i++)
|
for(ui32 i=0;i<length;i++)
|
||||||
load( data[i]);
|
load( data[i]);
|
||||||
@ -401,7 +405,7 @@ public:
|
|||||||
template <typename T>
|
template <typename T>
|
||||||
void load(std::set<T> &data)
|
void load(std::set<T> &data)
|
||||||
{
|
{
|
||||||
READ_CHECK_U32(length);
|
ui32 length = readAndCheckLength();
|
||||||
data.clear();
|
data.clear();
|
||||||
T ins;
|
T ins;
|
||||||
for(ui32 i=0;i<length;i++)
|
for(ui32 i=0;i<length;i++)
|
||||||
@ -413,7 +417,7 @@ public:
|
|||||||
template <typename T, typename U>
|
template <typename T, typename U>
|
||||||
void load(std::unordered_set<T, U> &data)
|
void load(std::unordered_set<T, U> &data)
|
||||||
{
|
{
|
||||||
READ_CHECK_U32(length);
|
ui32 length = readAndCheckLength();
|
||||||
data.clear();
|
data.clear();
|
||||||
T ins;
|
T ins;
|
||||||
for(ui32 i=0;i<length;i++)
|
for(ui32 i=0;i<length;i++)
|
||||||
@ -425,7 +429,7 @@ public:
|
|||||||
template <typename T>
|
template <typename T>
|
||||||
void load(std::list<T> &data)
|
void load(std::list<T> &data)
|
||||||
{
|
{
|
||||||
READ_CHECK_U32(length);
|
ui32 length = readAndCheckLength();
|
||||||
data.clear();
|
data.clear();
|
||||||
T ins;
|
T ins;
|
||||||
for(ui32 i=0;i<length;i++)
|
for(ui32 i=0;i<length;i++)
|
||||||
@ -444,7 +448,7 @@ public:
|
|||||||
template <typename T1, typename T2>
|
template <typename T1, typename T2>
|
||||||
void load(std::map<T1,T2> &data)
|
void load(std::map<T1,T2> &data)
|
||||||
{
|
{
|
||||||
READ_CHECK_U32(length);
|
ui32 length = readAndCheckLength();
|
||||||
data.clear();
|
data.clear();
|
||||||
T1 key;
|
T1 key;
|
||||||
T2 value;
|
T2 value;
|
||||||
@ -458,7 +462,7 @@ public:
|
|||||||
template <typename T1, typename T2>
|
template <typename T1, typename T2>
|
||||||
void load(std::multimap<T1, T2> &data)
|
void load(std::multimap<T1, T2> &data)
|
||||||
{
|
{
|
||||||
READ_CHECK_U32(length);
|
ui32 length = readAndCheckLength();
|
||||||
data.clear();
|
data.clear();
|
||||||
T1 key;
|
T1 key;
|
||||||
T2 value;
|
T2 value;
|
||||||
@ -471,7 +475,7 @@ public:
|
|||||||
}
|
}
|
||||||
void load(std::string &data)
|
void load(std::string &data)
|
||||||
{
|
{
|
||||||
READ_CHECK_U32(length);
|
ui32 length = readAndCheckLength();
|
||||||
data.resize(length);
|
data.resize(length);
|
||||||
this->read((void*)data.c_str(),length);
|
this->read((void*)data.c_str(),length);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user