Check order indexing and consistency in cache check

pull/88/head
Jonathan G Rennison 5 years ago
parent 51579be197
commit 0e5dfa42c3

@ -1489,6 +1489,11 @@ void CheckCaches(bool force_check)
assert(memcmp(&st->goods[c].cargo, buff, sizeof(StationCargoList)) == 0);
}
}
OrderList *order_list;
FOR_ALL_ORDER_LISTS(order_list) {
order_list->DebugCheckSanity();
}
}
/**

@ -701,6 +701,7 @@ public:
void FreeChain(bool keep_orderlist = false);
void DebugCheckSanity() const;
bool CheckOrderListIndexing() const;
/**
* Get the vector of all scheduled dispatch slot

@ -371,6 +371,16 @@ void OrderList::ReindexOrderList()
}
}
bool OrderList::CheckOrderListIndexing() const
{
uint idx = 0;
for (Order *o = this->first; o != nullptr; o = o->next, idx++) {
if (idx >= this->order_index.size()) return false;
if (this->order_index[idx] != o) return false;
}
return idx == this->order_index.size();
}
/**
* Recomputes everything.
* @param chain first order in the chain
@ -778,6 +788,7 @@ void OrderList::DebugCheckSanity() const
DEBUG(misc, 6, "... detected %u orders (%u manual), %u vehicles, %i timetabled, %i total",
(uint)this->GetNumOrders(), (uint)this->num_manual_orders,
this->num_vehicles, this->timetable_duration, this->total_duration);
assert(this->CheckOrderListIndexing());
}
/**

Loading…
Cancel
Save