diff options
author | Sergeanur <s.anureev@yandex.ua> | 2019-10-08 22:07:11 +0200 |
---|---|---|
committer | Sergeanur <s.anureev@yandex.ua> | 2019-10-08 22:07:11 +0200 |
commit | 101192dd322197d1f9e4aa4e48e38b43e05cd72b (patch) | |
tree | ae00316a66f04bd5459dcd8b7b325fb819c7ba06 /src/core/common.h | |
parent | Full CGameLogic (diff) | |
download | re3-101192dd322197d1f9e4aa4e48e38b43e05cd72b.tar re3-101192dd322197d1f9e4aa4e48e38b43e05cd72b.tar.gz re3-101192dd322197d1f9e4aa4e48e38b43e05cd72b.tar.bz2 re3-101192dd322197d1f9e4aa4e48e38b43e05cd72b.tar.lz re3-101192dd322197d1f9e4aa4e48e38b43e05cd72b.tar.xz re3-101192dd322197d1f9e4aa4e48e38b43e05cd72b.tar.zst re3-101192dd322197d1f9e4aa4e48e38b43e05cd72b.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 |