Added read/write template functions for save data, small Load/Save arguments unification

This commit is contained in:
Sergeanur
2019-10-08 23:07:11 +03:00
parent 69963cea68
commit 101192dd32
12 changed files with 197 additions and 191 deletions

View File

@ -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

View File

@ -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);

View File

@ -126,6 +126,7 @@ enum Config {
// only in master builds
#else
// not in master builds
#define VALIDATE_SAVE_SIZE
#endif
#ifdef FINAL