summaryrefslogtreecommitdiff
path: root/src/saveload/storage_sl.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/saveload/storage_sl.cpp')
-rw-r--r--src/saveload/storage_sl.cpp49
1 files changed, 26 insertions, 23 deletions
diff --git a/src/saveload/storage_sl.cpp b/src/saveload/storage_sl.cpp
index 4a360d58d..4db185e9a 100644
--- a/src/saveload/storage_sl.cpp
+++ b/src/saveload/storage_sl.cpp
@@ -23,34 +23,37 @@ static const SaveLoad _storage_desc[] = {
SLE_CONDARR(PersistentStorage, storage, SLE_UINT32, 256, SLV_EXTEND_PERSISTENT_STORAGE, SL_MAX_VERSION),
};
-/** Load persistent storage data. */
-static void Load_PSAC()
-{
- const std::vector<SaveLoad> slt = SlCompatTableHeader(_storage_desc, _storage_sl_compat);
+/** Persistent storage data. */
+struct PSACChunkHandler : ChunkHandler {
+ PSACChunkHandler() : ChunkHandler('PSAC', CH_TABLE) {}
- int index;
+ void Load() const override
+ {
+ const std::vector<SaveLoad> slt = SlCompatTableHeader(_storage_desc, _storage_sl_compat);
- while ((index = SlIterateArray()) != -1) {
- assert(PersistentStorage::CanAllocateItem());
- PersistentStorage *ps = new (index) PersistentStorage(0, 0, 0);
- SlObject(ps, slt);
+ int index;
+
+ while ((index = SlIterateArray()) != -1) {
+ assert(PersistentStorage::CanAllocateItem());
+ PersistentStorage *ps = new (index) PersistentStorage(0, 0, 0);
+ SlObject(ps, slt);
+ }
}
-}
-
-/** Save persistent storage data. */
-static void Save_PSAC()
-{
- SlTableHeader(_storage_desc);
-
- /* Write the industries */
- for (PersistentStorage *ps : PersistentStorage::Iterate()) {
- ps->ClearChanges();
- SlSetArrayIndex(ps->index);
- SlObject(ps, _storage_desc);
+
+ void Save() const override
+ {
+ SlTableHeader(_storage_desc);
+
+ /* Write the industries */
+ for (PersistentStorage *ps : PersistentStorage::Iterate()) {
+ ps->ClearChanges();
+ SlSetArrayIndex(ps->index);
+ SlObject(ps, _storage_desc);
+ }
}
-}
+};
-static const ChunkHandler PSAC{ 'PSAC', Save_PSAC, Load_PSAC, nullptr, nullptr, CH_TABLE };
+static const PSACChunkHandler PSAC;
static const ChunkHandlerRef persistent_storage_chunk_handlers[] = {
PSAC,
};