Saveload: Add object ptr param to table object save/load helpers

This commit is contained in:
Jonathan G Rennison
2024-07-16 21:28:46 +01:00
parent c2e7c67204
commit 3c53e9a920
3 changed files with 15 additions and 19 deletions

View File

@@ -107,11 +107,7 @@ static void Load_CHTS()
UnknownCheatHandler uch{}; UnknownCheatHandler uch{};
SaveLoadTableData slt = SlTableHeader(GetCheatsDesc(false), &uch); SaveLoadTableData slt = SlTableHeader(GetCheatsDesc(false), &uch);
if (SlIterateArray() == -1) return; SlLoadTableObjectChunk(slt, &_cheats);
SlObjectLoadFiltered(&_cheats, slt);
if (SlIterateArray() != -1) {
SlErrorCorruptFmt("Too many CHTS entries");
}
} else { } else {
size_t count = SlGetFieldLength(); size_t count = SlGetFieldLength();
SaveLoadTableData slt = SlTableHeaderOrRiff(GetCheatsDesc(false)); SaveLoadTableData slt = SlTableHeaderOrRiff(GetCheatsDesc(false));

View File

@@ -2483,16 +2483,16 @@ SaveLoadTableData SlPrepareNamedSaveLoadTableForPtrOrNull(const NamedSaveLoadTab
return saveloads; return saveloads;
} }
void SlSaveTableObjectChunk(const SaveLoadTable &slt) void SlSaveTableObjectChunk(const SaveLoadTable &slt, void *object)
{ {
SlSetArrayIndex(0); SlSetArrayIndex(0);
SlObjectSaveFiltered(nullptr, slt); SlObjectSaveFiltered(object, slt);
} }
void SlLoadTableOrRiffFiltered(const SaveLoadTable &slt) void SlLoadTableOrRiffFiltered(const SaveLoadTable &slt, void *object)
{ {
if (SlIsTableChunk() && SlIterateArray() == -1) return; if (SlIsTableChunk() && SlIterateArray() == -1) return;
SlObjectLoadFiltered(nullptr, slt); SlObjectLoadFiltered(object, slt);
if (SlIsTableChunk() && SlIterateArray() != -1) { if (SlIsTableChunk() && SlIterateArray() != -1) {
uint32_t id = _sl.current_chunk_id; uint32_t id = _sl.current_chunk_id;
SlErrorCorruptFmt("Too many %s entries", ChunkIDDumper()(id)); SlErrorCorruptFmt("Too many %s entries", ChunkIDDumper()(id));

View File

@@ -1096,8 +1096,8 @@ void SlSkipTableHeader();
[[nodiscard]] SaveLoadTableData SlTableHeader(const NamedSaveLoadTable &slt, TableHeaderSpecialHandler *special_handler = nullptr); [[nodiscard]] SaveLoadTableData SlTableHeader(const NamedSaveLoadTable &slt, TableHeaderSpecialHandler *special_handler = nullptr);
[[nodiscard]] SaveLoadTableData SlTableHeaderOrRiff(const NamedSaveLoadTable &slt); [[nodiscard]] SaveLoadTableData SlTableHeaderOrRiff(const NamedSaveLoadTable &slt);
[[nodiscard]] SaveLoadTableData SlPrepareNamedSaveLoadTableForPtrOrNull(const NamedSaveLoadTable &slt); [[nodiscard]] SaveLoadTableData SlPrepareNamedSaveLoadTableForPtrOrNull(const NamedSaveLoadTable &slt);
void SlSaveTableObjectChunk(const SaveLoadTable &slt); void SlSaveTableObjectChunk(const SaveLoadTable &slt, void *object = nullptr);
void SlLoadTableOrRiffFiltered(const SaveLoadTable &slt); void SlLoadTableOrRiffFiltered(const SaveLoadTable &slt, void *object = nullptr);
void SlLoadTableWithArrayLengthPrefixesMissing(); void SlLoadTableWithArrayLengthPrefixesMissing();
void SlSetStructListLength(size_t length); void SlSetStructListLength(size_t length);
@@ -1105,24 +1105,24 @@ size_t SlGetStructListLength(size_t limit);
void SlSkipChunkContents(); void SlSkipChunkContents();
inline void SlSaveTableObjectChunk(const NamedSaveLoadTable &slt) inline void SlSaveTableObjectChunk(const NamedSaveLoadTable &slt, void *object = nullptr)
{ {
SlSaveTableObjectChunk(SlTableHeader(slt)); SlSaveTableObjectChunk(SlTableHeader(slt), object);
} }
inline void SlLoadTableObjectChunk(const NamedSaveLoadTable &slt) inline void SlLoadTableObjectChunk(const NamedSaveLoadTable &slt, void *object = nullptr)
{ {
SlLoadTableOrRiffFiltered(SlTableHeader(slt)); SlLoadTableOrRiffFiltered(SlTableHeader(slt), object);
} }
inline void SlLoadTableObjectChunk(const SaveLoadTable &slt) inline void SlLoadTableObjectChunk(const SaveLoadTable &slt, void *object = nullptr)
{ {
SlLoadTableOrRiffFiltered(slt); SlLoadTableOrRiffFiltered(slt, object);
} }
inline void SlLoadTableOrRiffFiltered(const NamedSaveLoadTable &slt) inline void SlLoadTableOrRiffFiltered(const NamedSaveLoadTable &slt, void *object = nullptr)
{ {
SlLoadTableOrRiffFiltered(SlTableHeaderOrRiff(slt)); SlLoadTableOrRiffFiltered(SlTableHeaderOrRiff(slt), object);
} }
[[noreturn]] void CDECL SlErrorFmt(StringID string, const char *msg, ...) WARN_FORMAT(2, 3); [[noreturn]] void CDECL SlErrorFmt(StringID string, const char *msg, ...) WARN_FORMAT(2, 3);