diff options
author | Sergeanur <s.anureev@yandex.ua> | 2019-10-11 00:51:25 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-10-11 00:51:25 +0200 |
commit | 0408b30a9ffba583f0437c294a98a2cecef74e1d (patch) | |
tree | 5fc346badb4cac417ea73b457831c3de89bc450f /src/core/common.h | |
parent | Single-wagon train fix (diff) | |
parent | Fix CCarGenerator Load/Save (diff) | |
download | re3-0408b30a9ffba583f0437c294a98a2cecef74e1d.tar re3-0408b30a9ffba583f0437c294a98a2cecef74e1d.tar.gz re3-0408b30a9ffba583f0437c294a98a2cecef74e1d.tar.bz2 re3-0408b30a9ffba583f0437c294a98a2cecef74e1d.tar.lz re3-0408b30a9ffba583f0437c294a98a2cecef74e1d.tar.xz re3-0408b30a9ffba583f0437c294a98a2cecef74e1d.tar.zst re3-0408b30a9ffba583f0437c294a98a2cecef74e1d.zip |
Diffstat (limited to 'src/core/common.h')
-rw-r--r-- | src/core/common.h | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/src/core/common.h b/src/core/common.h index caa305d6..3ea37071 100644 --- a/src/core/common.h +++ b/src/core/common.h @@ -317,3 +317,54 @@ _TWEEKCLASS(CTweakUInt32, uint32); _TWEEKCLASS(CTweakFloat, float); #undef _TWEEKCLASS + +#ifdef VALIDATE_SAVE_SIZE +static int32 _bufBytesRead; +#define INITSAVEBUF _bufBytesRead = 0; +#define VALIDATESAVEBUF(b) assert(_bufBytesRead == b); +#else +#define INITSAVEBUF +#define VALIDATESAVEBUF(b) +#endif + +inline void SkipSaveBuf(uint8 *&buf, int32 skip) +{ + buf += skip; +#ifdef VALIDATE_SAVE_SIZE + _bufBytesRead += skip; +#endif +} + +template<typename T> +inline const T ReadSaveBuf(uint8 *&buf) +{
+ T &value = *(T*)buf; + SkipSaveBuf(buf, sizeof(T)); + return value; +} + +template<typename T> +inline T *WriteSaveBuf(uint8 *&buf, const T &value) +{
+ T *p = (T*)buf;
+ *p = value; + SkipSaveBuf(buf, sizeof(T)); + return p; +} + + +#define SAVE_HEADER_SIZE (4*sizeof(char)+sizeof(uint32)) + +#define WriteSaveHeader(buf,a,b,c,d,size) \
+ WriteSaveBuf(buf, a);\
+ WriteSaveBuf(buf, b);\
+ WriteSaveBuf(buf, c);\
+ WriteSaveBuf(buf, d);\
+ WriteSaveBuf(buf, size); + +#define CheckSaveHeader(buf,a,b,c,d,size)\ + assert(ReadSaveBuf<char>(buf) == a);\ + assert(ReadSaveBuf<char>(buf) == b);\ + assert(ReadSaveBuf<char>(buf) == c);\ + assert(ReadSaveBuf<char>(buf) == d);\ + assert(ReadSaveBuf<uint32>(buf) == size);
\ No newline at end of file |