From 101192dd322197d1f9e4aa4e48e38b43e05cd72b Mon Sep 17 00:00:00 2001 From: Sergeanur Date: Tue, 8 Oct 2019 23:07:11 +0300 Subject: Added read/write template functions for save data, small Load/Save arguments unification --- src/core/Streaming.cpp | 18 +++++++++--------- src/core/common.h | 51 ++++++++++++++++++++++++++++++++++++++++++++++++++ src/core/config.h | 1 + 3 files changed, 61 insertions(+), 9 deletions(-) (limited to 'src/core') diff --git a/src/core/Streaming.cpp b/src/core/Streaming.cpp index e59b2b39..d9dc8628 100644 --- a/src/core/Streaming.cpp +++ b/src/core/Streaming.cpp @@ -2401,28 +2401,28 @@ CStreaming::LoadScene(const CVector &pos) } void -CStreaming::MemoryCardSave(uint8 *buffer, uint32 *length) +CStreaming::MemoryCardSave(uint8 *buf, uint32 *size) { int i; - *length = NUM_DEFAULT_MODELS; + *size = NUM_DEFAULT_MODELS; for(i = 0; i < NUM_DEFAULT_MODELS; i++) if(ms_aInfoForModel[i].m_loadState == STREAMSTATE_LOADED) - buffer[i] = ms_aInfoForModel[i].m_flags; + buf[i] = ms_aInfoForModel[i].m_flags; else - buffer[i] = 0xFF; + buf[i] = 0xFF; } void -CStreaming::MemoryCardLoad(uint8 *buffer, uint32 length) +CStreaming::MemoryCardLoad(uint8 *buf, uint32 size) { uint32 i; - assert(length == NUM_DEFAULT_MODELS); - for(i = 0; i < length; i++) + assert(size == NUM_DEFAULT_MODELS); + for(i = 0; i < size; i++) if(ms_aInfoForModel[i].m_loadState == STREAMSTATE_LOADED) - if(buffer[i] != 0xFF) - ms_aInfoForModel[i].m_flags = buffer[i]; + if(buf[i] != 0xFF) + ms_aInfoForModel[i].m_flags = buf[i]; } void 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 +inline const T ReadSaveBuf(uint8 *&buf) +{ + T &value = *(T*)buf; + SkipSaveBuf(buf, sizeof(T)); + return value; +} + +template +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(buf) == a);\ + assert(ReadSaveBuf(buf) == b);\ + assert(ReadSaveBuf(buf) == c);\ + assert(ReadSaveBuf(buf) == d);\ + assert(ReadSaveBuf(buf) == size); \ No newline at end of file diff --git a/src/core/config.h b/src/core/config.h index a3fbac1b..08ddd007 100644 --- a/src/core/config.h +++ b/src/core/config.h @@ -126,6 +126,7 @@ enum Config { // only in master builds #else // not in master builds + #define VALIDATE_SAVE_SIZE #endif #ifdef FINAL -- cgit v1.2.3