summaryrefslogtreecommitdiff
path: root/src/saveload/cargomonitor_sl.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/saveload/cargomonitor_sl.cpp')
-rw-r--r--src/saveload/cargomonitor_sl.cpp125
1 files changed, 65 insertions, 60 deletions
diff --git a/src/saveload/cargomonitor_sl.cpp b/src/saveload/cargomonitor_sl.cpp
index b660609b5..80b32f16b 100644
--- a/src/saveload/cargomonitor_sl.cpp
+++ b/src/saveload/cargomonitor_sl.cpp
@@ -43,92 +43,97 @@ static CargoMonitorID FixupCargoMonitor(CargoMonitorID number)
return number;
}
-/** Save the #_cargo_deliveries monitoring map. */
-static void SaveDelivery()
-{
- SlTableHeader(_cargomonitor_pair_desc);
+/** #_cargo_deliveries monitoring map. */
+struct CMDLChunkHandler : ChunkHandler {
+ CMDLChunkHandler() : ChunkHandler('CMDL', CH_TABLE) {}
+
+ void Save() const override
+ {
+ SlTableHeader(_cargomonitor_pair_desc);
- TempStorage storage;
+ TempStorage storage;
- int i = 0;
- CargoMonitorMap::const_iterator iter = _cargo_deliveries.begin();
- while (iter != _cargo_deliveries.end()) {
- storage.number = iter->first;
- storage.amount = iter->second;
+ int i = 0;
+ CargoMonitorMap::const_iterator iter = _cargo_deliveries.begin();
+ while (iter != _cargo_deliveries.end()) {
+ storage.number = iter->first;
+ storage.amount = iter->second;
- SlSetArrayIndex(i);
- SlObject(&storage, _cargomonitor_pair_desc);
+ SlSetArrayIndex(i);
+ SlObject(&storage, _cargomonitor_pair_desc);
- i++;
- iter++;
+ i++;
+ iter++;
+ }
}
-}
-/** Load the #_cargo_deliveries monitoring map. */
-static void LoadDelivery()
-{
- const std::vector<SaveLoad> slt = SlCompatTableHeader(_cargomonitor_pair_desc, _cargomonitor_pair_sl_compat);
+ void Load() const override
+ {
+ const std::vector<SaveLoad> slt = SlCompatTableHeader(_cargomonitor_pair_desc, _cargomonitor_pair_sl_compat);
- TempStorage storage;
- bool fix = IsSavegameVersionBefore(SLV_FIX_CARGO_MONITOR);
+ TempStorage storage;
+ bool fix = IsSavegameVersionBefore(SLV_FIX_CARGO_MONITOR);
- ClearCargoDeliveryMonitoring();
- for (;;) {
- if (SlIterateArray() < 0) break;
- SlObject(&storage, slt);
+ ClearCargoDeliveryMonitoring();
+ for (;;) {
+ if (SlIterateArray() < 0) break;
+ SlObject(&storage, slt);
- if (fix) storage.number = FixupCargoMonitor(storage.number);
+ if (fix) storage.number = FixupCargoMonitor(storage.number);
- std::pair<CargoMonitorID, uint32> p(storage.number, storage.amount);
- _cargo_deliveries.insert(p);
+ std::pair<CargoMonitorID, uint32> p(storage.number, storage.amount);
+ _cargo_deliveries.insert(p);
+ }
}
-}
+};
+/** #_cargo_pickups monitoring map. */
+struct CMPUChunkHandler : ChunkHandler {
+ CMPUChunkHandler() : ChunkHandler('CMPU', CH_TABLE) {}
-/** Save the #_cargo_pickups monitoring map. */
-static void SavePickup()
-{
- SlTableHeader(_cargomonitor_pair_desc);
+ void Save() const override
+ {
+ SlTableHeader(_cargomonitor_pair_desc);
- TempStorage storage;
+ TempStorage storage;
- int i = 0;
- CargoMonitorMap::const_iterator iter = _cargo_pickups.begin();
- while (iter != _cargo_pickups.end()) {
- storage.number = iter->first;
- storage.amount = iter->second;
+ int i = 0;
+ CargoMonitorMap::const_iterator iter = _cargo_pickups.begin();
+ while (iter != _cargo_pickups.end()) {
+ storage.number = iter->first;
+ storage.amount = iter->second;
- SlSetArrayIndex(i);
- SlObject(&storage, _cargomonitor_pair_desc);
+ SlSetArrayIndex(i);
+ SlObject(&storage, _cargomonitor_pair_desc);
- i++;
- iter++;
+ i++;
+ iter++;
+ }
}
-}
-/** Load the #_cargo_pickups monitoring map. */
-static void LoadPickup()
-{
- const std::vector<SaveLoad> slt = SlCompatTableHeader(_cargomonitor_pair_desc, _cargomonitor_pair_sl_compat);
+ void Load() const override
+ {
+ const std::vector<SaveLoad> slt = SlCompatTableHeader(_cargomonitor_pair_desc, _cargomonitor_pair_sl_compat);
- TempStorage storage;
- bool fix = IsSavegameVersionBefore(SLV_FIX_CARGO_MONITOR);
+ TempStorage storage;
+ bool fix = IsSavegameVersionBefore(SLV_FIX_CARGO_MONITOR);
- ClearCargoPickupMonitoring();
- for (;;) {
- if (SlIterateArray() < 0) break;
- SlObject(&storage, slt);
+ ClearCargoPickupMonitoring();
+ for (;;) {
+ if (SlIterateArray() < 0) break;
+ SlObject(&storage, slt);
- if (fix) storage.number = FixupCargoMonitor(storage.number);
+ if (fix) storage.number = FixupCargoMonitor(storage.number);
- std::pair<CargoMonitorID, uint32> p(storage.number, storage.amount);
- _cargo_pickups.insert(p);
+ std::pair<CargoMonitorID, uint32> p(storage.number, storage.amount);
+ _cargo_pickups.insert(p);
+ }
}
-}
+};
/** Chunk definition of the cargomonitoring maps. */
-static const ChunkHandler CMDL{ 'CMDL', SaveDelivery, LoadDelivery, nullptr, nullptr, CH_TABLE };
-static const ChunkHandler CMPU{ 'CMPU', SavePickup, LoadPickup, nullptr, nullptr, CH_TABLE };
+static const CMDLChunkHandler CMDL;
+static const CMPUChunkHandler CMPU;
static const ChunkHandlerRef cargomonitor_chunk_handlers[] = {
CMDL,
CMPU,