Check order indexing and consistency in cache check
This commit is contained in:
@@ -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());
|
||||
}
|
||||
|
||||
/**
|
||||
|
Reference in New Issue
Block a user