From 1716083a30e03decfd8eb704a815757282a957eb Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Sat, 17 Oct 2020 11:27:18 +0100 Subject: [PATCH] Use saveload object filtering for order chunks --- src/saveload/order_sl.cpp | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/saveload/order_sl.cpp b/src/saveload/order_sl.cpp index 615b04f85d..877ba6ddb4 100644 --- a/src/saveload/order_sl.cpp +++ b/src/saveload/order_sl.cpp @@ -130,11 +130,14 @@ const SaveLoad *GetOrderDescription() return _order_desc; } +static std::vector _filtered_desc; + static void Save_ORDR() { + _filtered_desc = SlFilterObject(GetOrderDescription()); for (Order *order : Order::Iterate()) { SlSetArrayIndex(order->index); - SlObject(order, GetOrderDescription()); + SlObjectSaveFiltered(order, _filtered_desc.data()); } } @@ -186,11 +189,12 @@ static void Load_ORDR() if (prev != nullptr) prev->next = o; } } else { + _filtered_desc = SlFilterObject(GetOrderDescription()); int index; while ((index = SlIterateArray()) != -1) { Order *order = new (index) Order(); - SlObject(order, GetOrderDescription()); + SlObjectLoadFiltered(order, _filtered_desc.data()); } } } @@ -210,22 +214,24 @@ const SaveLoad *GetOrderExtraInfoDescription() void Save_ORDX() { + _filtered_desc = SlFilterObject(GetOrderExtraInfoDescription()); for (Order *order : Order::Iterate()) { if (order->extra) { SlSetArrayIndex(order->index); - SlObject(order->extra.get(), GetOrderExtraInfoDescription()); + SlObjectSaveFiltered(order->extra.get(), _filtered_desc.data()); } } } void Load_ORDX() { + _filtered_desc = SlFilterObject(GetOrderExtraInfoDescription()); int index; while ((index = SlIterateArray()) != -1) { Order *order = Order::GetIfValid(index); assert(order != nullptr); order->AllocExtraInfo(); - SlObject(order->extra.get(), GetOrderExtraInfoDescription()); + SlObjectLoadFiltered(order->extra.get(), _filtered_desc.data()); } }