Use saveload object filtering for order chunks

This commit is contained in:
Jonathan G Rennison
2020-10-17 11:27:18 +01:00
parent a76e51c3dd
commit 1716083a30

View File

@@ -130,11 +130,14 @@ const SaveLoad *GetOrderDescription()
return _order_desc; return _order_desc;
} }
static std::vector<SaveLoad> _filtered_desc;
static void Save_ORDR() static void Save_ORDR()
{ {
_filtered_desc = SlFilterObject(GetOrderDescription());
for (Order *order : Order::Iterate()) { for (Order *order : Order::Iterate()) {
SlSetArrayIndex(order->index); 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; if (prev != nullptr) prev->next = o;
} }
} else { } else {
_filtered_desc = SlFilterObject(GetOrderDescription());
int index; int index;
while ((index = SlIterateArray()) != -1) { while ((index = SlIterateArray()) != -1) {
Order *order = new (index) Order(); Order *order = new (index) Order();
SlObject(order, GetOrderDescription()); SlObjectLoadFiltered(order, _filtered_desc.data());
} }
} }
} }
@@ -210,22 +214,24 @@ const SaveLoad *GetOrderExtraInfoDescription()
void Save_ORDX() void Save_ORDX()
{ {
_filtered_desc = SlFilterObject(GetOrderExtraInfoDescription());
for (Order *order : Order::Iterate()) { for (Order *order : Order::Iterate()) {
if (order->extra) { if (order->extra) {
SlSetArrayIndex(order->index); SlSetArrayIndex(order->index);
SlObject(order->extra.get(), GetOrderExtraInfoDescription()); SlObjectSaveFiltered(order->extra.get(), _filtered_desc.data());
} }
} }
} }
void Load_ORDX() void Load_ORDX()
{ {
_filtered_desc = SlFilterObject(GetOrderExtraInfoDescription());
int index; int index;
while ((index = SlIterateArray()) != -1) { while ((index = SlIterateArray()) != -1) {
Order *order = Order::GetIfValid(index); Order *order = Order::GetIfValid(index);
assert(order != nullptr); assert(order != nullptr);
order->AllocExtraInfo(); order->AllocExtraInfo();
SlObject(order->extra.get(), GetOrderExtraInfoDescription()); SlObjectLoadFiltered(order->extra.get(), _filtered_desc.data());
} }
} }