Check order indexing and consistency in cache check

This commit is contained in:
Jonathan G Rennison
2019-05-02 03:05:07 +01:00
parent 51579be197
commit 0e5dfa42c3
3 changed files with 17 additions and 0 deletions

View File

@@ -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();
}
}
/**

View File

@@ -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

View File

@@ -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());
}
/**