diff --git a/src/sl/bridge_signal_sl.cpp b/src/sl/bridge_signal_sl.cpp index 7ae34e8095..0a06688fb7 100644 --- a/src/sl/bridge_signal_sl.cpp +++ b/src/sl/bridge_signal_sl.cpp @@ -12,41 +12,29 @@ #include "saveload.h" #include -/** stub save header struct */ -struct LongBridgeSignalStorageStub { - uint32_t length; -}; - -static const SaveLoad _long_bridge_signal_storage_stub_desc[] = { - SLE_VAR(LongBridgeSignalStorageStub, length, SLE_UINT32), +static const NamedSaveLoad _long_bridge_signal_storage_desc[] = { + NSL("signal_red_bits", SLE_VARVEC(LongBridgeSignalStorage, signal_red_bits, SLE_UINT64)), }; static void Load_XBSS() { + std::vector slt = SlTableHeaderOrRiff(_long_bridge_signal_storage_desc); + int index; - LongBridgeSignalStorageStub stub; while ((index = SlIterateArray()) != -1) { LongBridgeSignalStorage &lbss = _long_bridge_signal_sim_map[index]; - SlObject(&stub, _long_bridge_signal_storage_stub_desc); - lbss.signal_red_bits.resize(stub.length); - SlArray(lbss.signal_red_bits.data(), stub.length, SLE_UINT64); + SlObjectLoadFiltered(&lbss, slt); } } -static void RealSave_XBSS(const LongBridgeSignalStorage *lbss) -{ - LongBridgeSignalStorageStub stub; - stub.length = (uint32_t)lbss->signal_red_bits.size(); - SlObject(&stub, _long_bridge_signal_storage_stub_desc); - SlArray(const_cast(lbss->signal_red_bits.data()), stub.length, SLE_UINT64); -} - static void Save_XBSS() { - for (const auto &it : _long_bridge_signal_sim_map) { - const LongBridgeSignalStorage &lbss = it.second; + std::vector slt = SlTableHeader(_long_bridge_signal_storage_desc); + + for (auto &it : _long_bridge_signal_sim_map) { + LongBridgeSignalStorage &lbss = it.second; SlSetArrayIndex(it.first); - SlAutolength((AutolengthProc*) RealSave_XBSS, const_cast(&lbss)); + SlObjectSaveFiltered(&lbss, slt); } } @@ -67,7 +55,7 @@ static void Save_XBST() } extern const ChunkHandler bridge_signal_chunk_handlers[] = { - { 'XBSS', Save_XBSS, Load_XBSS, nullptr, nullptr, CH_SPARSE_ARRAY }, + { 'XBSS', Save_XBSS, Load_XBSS, nullptr, nullptr, CH_SPARSE_TABLE }, { 'XBST', Save_XBST, Load_XBST, nullptr, nullptr, CH_RIFF }, }; diff --git a/src/sl/extended_ver_sl.cpp b/src/sl/extended_ver_sl.cpp index c7ba34afca..6ea0e0c52e 100644 --- a/src/sl/extended_ver_sl.cpp +++ b/src/sl/extended_ver_sl.cpp @@ -95,7 +95,7 @@ const SlxiSubChunkInfo _sl_xv_sub_chunk_infos[] = { { XSLFI_DEPARTURE_BOARDS, XSCF_IGNORABLE_UNKNOWN, 1, 1, "departure_boards", nullptr, nullptr, nullptr }, { XSLFI_TIMETABLES_START_TICKS, XSCF_NULL, 3, 3, "timetable_start_ticks", nullptr, nullptr, nullptr }, { XSLFI_TOWN_CARGO_ADJ, XSCF_IGNORABLE_UNKNOWN, 3, 3, "town_cargo_adj", nullptr, nullptr, nullptr }, - { XSLFI_SIG_TUNNEL_BRIDGE, XSCF_NULL, 10, 10, "signal_tunnel_bridge", nullptr, nullptr, "XBSS" }, + { XSLFI_SIG_TUNNEL_BRIDGE, XSCF_NULL, 11, 11, "signal_tunnel_bridge", nullptr, nullptr, "XBSS" }, { XSLFI_IMPROVED_BREAKDOWNS, XSCF_NULL, 8, 8, "improved_breakdowns", nullptr, nullptr, nullptr }, { XSLFI_CONSIST_BREAKDOWN_FLAG, XSCF_NULL, 1, 1, "consist_breakdown_flag", nullptr, nullptr, nullptr }, { XSLFI_TT_WAIT_IN_DEPOT, XSCF_NULL, 2, 2, "tt_wait_in_depot", nullptr, nullptr, nullptr },