OpenTTD Source 20260206-master-g4d4e37dbf1
OrderList Struct Reference

Shared order list linking together the linked list of orders and the list of vehicles sharing this order list. More...

#include <order_base.h>

Inheritance diagram for OrderList:

Public Member Functions

 OrderList (OrderListID index)
 Default constructor producing an invalid order list.
 OrderList (OrderListID index, Order &&order, Vehicle *v)
 Create an order list with the order for the given vehicle.
 OrderList (OrderListID index, std::vector< Order > &&orders, Vehicle *v)
 OrderList (OrderListID index, Vehicle *v)
 ~OrderList ()
 Destructor.
void Initialize (Vehicle *v)
 Recomputes everything.
void RecalculateTimetableDuration ()
 Recomputes Timetable duration.
VehicleOrderID GetFirstOrder () const
 Get the first order of the order chain.
std::span< const OrderGetOrders () const
std::span< OrderGetOrders ()
const OrderGetOrderAt (VehicleOrderID index) const
 Get a certain order of the order chain.
OrderGetOrderAt (VehicleOrderID index)
VehicleOrderID GetLastOrder () const
 Get the last order of the order chain.
VehicleOrderID GetNext (VehicleOrderID cur) const
 Get the order after the given one or the first one, if the given one is the last one.
VehicleOrderID GetNumOrders () const
 Get number of orders in the order list.
VehicleOrderID GetNumManualOrders () const
 Get number of manually added orders in the order list.
void GetNextStoppingStation (std::vector< StationID > &next_station, const Vehicle *v, VehicleOrderID first=INVALID_VEH_ORDER_ID, uint hops=0) const
 Recursively determine the next deterministic station to stop at.
VehicleOrderID GetNextDecisionNode (VehicleOrderID next, uint hops) const
 Get the next order which will make the given vehicle stop at a station or refit at a depot or evaluate a non-trivial condition.
void InsertOrderAt (Order &&order, VehicleOrderID index)
 Insert a new order into the order chain.
void DeleteOrderAt (VehicleOrderID index)
 Remove an order from the order list and delete it.
void MoveOrder (VehicleOrderID from, VehicleOrderID to)
 Move an order to another position within the order list.
bool IsShared () const
 Is this a shared order list?
VehicleGetFirstSharedVehicle () const
 Get the first vehicle of this vehicle chain.
uint GetNumVehicles () const
 Return the number of vehicles that share this orders list.
void AddVehicle (Vehicle *v)
 Adds the given vehicle to this shared order list.
void RemoveVehicle (Vehicle *v)
 Removes the vehicle from the shared order list.
bool IsCompleteTimetable () const
 Checks whether all orders of the list have a filled timetable.
TimerGameTick::Ticks GetTimetableTotalDuration () const
 Gets the total duration of the vehicles timetable or Ticks::INVALID_TICKS is the timetable is not complete.
TimerGameTick::Ticks GetTimetableDurationIncomplete () const
 Gets the known duration of the vehicles timetable even if the timetable is not complete.
TimerGameTick::Ticks GetTotalDuration () const
 Gets the known duration of the vehicles orders, timetabled or not.
void UpdateTimetableDuration (TimerGameTick::Ticks delta)
 Must be called if an order's timetable is changed to update internal book keeping.
void UpdateTotalDuration (TimerGameTick::Ticks delta)
 Must be called if an order's timetable is changed to update internal book keeping.
void FreeChain (bool keep_orderlist=false)
 Free a complete order chain.
void DebugCheckSanity () const

Private Attributes

VehicleOrderID num_manual_orders = 0
 NOSAVE: How many manually added orders are there in the list.
uint num_vehicles = 0
 NOSAVE: Number of vehicles that share this order list.
Vehiclefirst_shared = nullptr
 NOSAVE: pointer to the first vehicle in the shared order chain.
std::vector< Orderorders
 Orders of the order list.
uint32_t old_order_index = 0
TimerGameTick::Ticks timetable_duration {}
 NOSAVE: Total timetabled duration of the order list.
TimerGameTick::Ticks total_duration {}
 NOSAVE: Total (timetabled or not) duration of the order list.

Friends

struct ORDLChunkHandler
template<typename T>
class SlOrders
void AfterLoadVehiclesPhase1 (bool part_of_load)
 For instantiating the shared vehicle chain.
SaveLoadTable GetOrderListDescription ()
 Saving and loading of order lists.

Detailed Description

Shared order list linking together the linked list of orders and the list of vehicles sharing this order list.

Definition at line 274 of file order_base.h.

Constructor & Destructor Documentation

◆ OrderList() [1/4]

OrderList::OrderList ( OrderListID index)
inline

Default constructor producing an invalid order list.

Definition at line 293 of file order_base.h.

Referenced by GetOrderListDescription.

◆ OrderList() [2/4]

OrderList::OrderList ( OrderListID index,
Order && order,
Vehicle * v )
inline

Create an order list with the order for the given vehicle.

Parameters
indexindex of the list within the order list pool
orderRvalue reference to the order.
vany vehicle using this orderlist

Definition at line 301 of file order_base.h.

References Initialize().

◆ OrderList() [3/4]

OrderList::OrderList ( OrderListID index,
std::vector< Order > && orders,
Vehicle * v )
inline

Definition at line 307 of file order_base.h.

◆ OrderList() [4/4]

OrderList::OrderList ( OrderListID index,
Vehicle * v )
inline

Definition at line 313 of file order_base.h.

◆ ~OrderList()

OrderList::~OrderList ( )
inline

Destructor.

Invalidates OrderList for re-usage by the pool.

Definition at line 319 of file order_base.h.

Member Function Documentation

◆ AddVehicle()

void OrderList::AddVehicle ( Vehicle * v)
inline

Adds the given vehicle to this shared order list.

Note
This is supposed to be called after the vehicle has been inserted into the shared vehicle chain.
Parameters
vvehicle to add to the list

Definition at line 412 of file order_base.h.

Referenced by Vehicle::AddToShared().

◆ DeleteOrderAt()

void OrderList::DeleteOrderAt ( VehicleOrderID index)

Remove an order from the order list and delete it.

Parameters
indexis the position of the order which is to be deleted.

Definition at line 439 of file order_cmd.cpp.

References num_manual_orders, orders, timetable_duration, and total_duration.

Referenced by DeleteOrder().

◆ FreeChain()

void OrderList::FreeChain ( bool keep_orderlist = false)

Free a complete order chain.

Parameters
keep_orderlistIf this is true only delete the orders, otherwise also delete the OrderList.
Note
do not use on "current_order" vehicle orders!

Definition at line 292 of file order_cmd.cpp.

References InvalidateWindowClassesData(), num_manual_orders, orders, BaseStation::owner, OWNER_NONE, timetable_duration, and WC_STATION_LIST.

Referenced by DeleteVehicleOrders().

◆ GetFirstOrder()

VehicleOrderID OrderList::GetFirstOrder ( ) const
inline

Get the first order of the order chain.

Returns
the first order of the chain.

Definition at line 329 of file order_base.h.

References INVALID_VEH_ORDER_ID.

Referenced by GetNextStoppingStation().

◆ GetFirstSharedVehicle()

Vehicle * OrderList::GetFirstSharedVehicle ( ) const
inline

Get the first vehicle of this vehicle chain.

Returns
the first vehicle of the chain.

Definition at line 398 of file order_base.h.

Referenced by CmdSetTimetableStart().

◆ GetLastOrder()

VehicleOrderID OrderList::GetLastOrder ( ) const
inline

Get the last order of the order chain.

Returns
the last order of the chain.

Definition at line 355 of file order_base.h.

References GetNumOrders(), and INVALID_VEH_ORDER_ID.

◆ GetNext()

VehicleOrderID OrderList::GetNext ( VehicleOrderID cur) const
inline

Get the order after the given one or the first one, if the given one is the last one.

Parameters
curOrder to find the next one for.
Returns
Next order.

Definition at line 363 of file order_base.h.

References GetNumOrders(), and INVALID_VEH_ORDER_ID.

Referenced by CheckAircraftOrderDistance(), DrawOrderString(), TimetableWindow::DrawTimetablePanel(), FillTimetableArrivalDepartureTable(), GetNextDecisionNode(), GetNextStoppingStation(), GetOrderDistance(), and LinkRefresher::PredictNextOrder().

◆ GetNextDecisionNode()

VehicleOrderID OrderList::GetNextDecisionNode ( VehicleOrderID next,
uint hops ) const

Get the next order which will make the given vehicle stop at a station or refit at a depot or evaluate a non-trivial condition.

Parameters
nextThe order to start looking at.
hopsThe number of orders we have already looked at.
Returns
Either of
  • a station order
  • a refitting depot order
  • a non-trivial conditional order
  • INVALID_VEH_ORDER_ID if the vehicle won't stop anymore.

Definition at line 326 of file order_cmd.cpp.

References Order::GetConditionSkipToOrder(), Order::GetConditionVariable(), Order::GetDepotActionType(), GetNext(), GetNextDecisionNode(), GetNumOrders(), Halt, INVALID_VEH_ORDER_ID, Order::IsRefit(), Order::IsType(), orders, BaseBitSet< Timpl, Tvalue_type, Tstorage, Tmask >::Test(), and Unconditionally.

Referenced by GetNextDecisionNode(), GetNextStoppingStation(), LinkRefresher::PredictNextOrder(), and LinkRefresher::Run().

◆ GetNextStoppingStation()

void OrderList::GetNextStoppingStation ( std::vector< StationID > & next_station,
const Vehicle * v,
VehicleOrderID first = INVALID_VEH_ORDER_ID,
uint hops = 0 ) const

Recursively determine the next deterministic station to stop at.

Parameters
next_stationThe next stations that we have already seen, and might be adding to.
vThe vehicle we're looking at.
firstOrder to start searching at or INVALID_VEH_ORDER_ID to start at cur_implicit_order_index + 1.
hopsNumber of orders we have already looked at.
Returns
Next stopping station or StationID::Invalid().
Precondition
The vehicle is currently loading and v->last_station_visited is meaningful.
Note
This function may draw a random number. Don't use it from the GUI.

Definition at line 363 of file order_cmd.cpp.

References BaseConsist::cur_implicit_order_index, GetFirstOrder(), GetNext(), GetNextDecisionNode(), GetNextStoppingStation(), GetNumOrders(), INVALID_VEH_ORDER_ID, Vehicle::last_station_visited, orders, Transfer, and Unload.

Referenced by GetNextStoppingStation().

◆ GetNumManualOrders()

VehicleOrderID OrderList::GetNumManualOrders ( ) const
inline

Get number of manually added orders in the order list.

Returns
number of manual orders in the chain.

Definition at line 379 of file order_base.h.

◆ GetNumOrders()

VehicleOrderID OrderList::GetNumOrders ( ) const
inline

◆ GetNumVehicles()

uint OrderList::GetNumVehicles ( ) const
inline

Return the number of vehicles that share this orders list.

Returns
the count of vehicles that use this shared orders list

Definition at line 404 of file order_base.h.

◆ GetOrderAt() [1/2]

Order * OrderList::GetOrderAt ( VehicleOrderID index)
inline

Definition at line 345 of file order_base.h.

◆ GetOrderAt() [2/2]

const Order * OrderList::GetOrderAt ( VehicleOrderID index) const
inline

Get a certain order of the order chain.

Parameters
indexzero-based index of the order within the chain.
Returns
the order at position index.

Definition at line 339 of file order_base.h.

References GetNumOrders().

Referenced by GetIncompatibleRefitOrderIdForAutoreplace(), and LinkRefresher::RefreshLinks().

◆ GetOrders() [1/2]

std::span< Order > OrderList::GetOrders ( )
inline

Definition at line 332 of file order_base.h.

◆ GetOrders() [2/2]

std::span< const Order > OrderList::GetOrders ( ) const
inline

Definition at line 331 of file order_base.h.

◆ GetTimetableDurationIncomplete()

TimerGameTick::Ticks OrderList::GetTimetableDurationIncomplete ( ) const
inline

Gets the known duration of the vehicles timetable even if the timetable is not complete.

Returns
known timetable duration

Definition at line 428 of file order_base.h.

Referenced by TimetableWindow::DrawArrivalDeparturePanel(), and TimetableWindow::DrawSummaryPanel().

◆ GetTimetableTotalDuration()

TimerGameTick::Ticks OrderList::GetTimetableTotalDuration ( ) const
inline

Gets the total duration of the vehicles timetable or Ticks::INVALID_TICKS is the timetable is not complete.

Returns
total timetable duration or Ticks::INVALID_TICKS for incomplete timetables

Definition at line 422 of file order_base.h.

References Ticks::INVALID_TICKS, and IsCompleteTimetable().

Referenced by CmdSetTimetableStart(), and UpdateVehicleTimetable().

◆ GetTotalDuration()

TimerGameTick::Ticks OrderList::GetTotalDuration ( ) const
inline

Gets the known duration of the vehicles orders, timetabled or not.

Returns
known order duration.

Definition at line 434 of file order_base.h.

◆ Initialize()

void OrderList::Initialize ( Vehicle * v)

Recomputes everything.

Parameters
vone of vehicle that is using this orderlist

Definition at line 252 of file order_cmd.cpp.

References first_shared, Vehicle::NextShared(), num_manual_orders, num_vehicles, orders, RecalculateTimetableDuration(), timetable_duration, and total_duration.

Referenced by OrderList().

◆ InsertOrderAt()

void OrderList::InsertOrderAt ( Order && order,
VehicleOrderID index )

Insert a new order into the order chain.

Parameters
orderRvalue reference of the order to insert into the chain.
indexis the position where the order is supposed to be inserted.

Definition at line 417 of file order_cmd.cpp.

References InvalidateWindowClassesData(), num_manual_orders, orders, BaseStation::owner, OWNER_NONE, timetable_duration, total_duration, and WC_STATION_LIST.

Referenced by InsertOrder().

◆ IsCompleteTimetable()

bool OrderList::IsCompleteTimetable ( ) const

Checks whether all orders of the list have a filled timetable.

Returns
whether all orders have a filled timetable.

Definition at line 486 of file order_cmd.cpp.

References orders.

Referenced by CmdSetTimetableStart(), and GetTimetableTotalDuration().

◆ IsShared()

bool OrderList::IsShared ( ) const
inline

Is this a shared order list?

Returns
whether this order list is shared among multiple vehicles

Definition at line 392 of file order_base.h.

Referenced by CmdCloneOrder().

◆ MoveOrder()

void OrderList::MoveOrder ( VehicleOrderID from,
VehicleOrderID to )

Move an order to another position within the order list.

Parameters
fromis the zero-based position of the order to move.
tois the zero-based position where the order is moved to.

Definition at line 457 of file order_cmd.cpp.

References GetNumOrders(), and orders.

Referenced by CmdMoveOrder().

◆ RecalculateTimetableDuration()

void OrderList::RecalculateTimetableDuration ( )

Recomputes Timetable duration.

Split out into a separate function so it can be used by afterload.

Definition at line 279 of file order_cmd.cpp.

References orders, and timetable_duration.

Referenced by Initialize().

◆ RemoveVehicle()

void OrderList::RemoveVehicle ( Vehicle * v)

Removes the vehicle from the shared order list.

Note
This is supposed to be called when the vehicle is still in the chain
Parameters
vvehicle to remove from the list

Definition at line 476 of file order_cmd.cpp.

References first_shared, Vehicle::NextShared(), and num_vehicles.

◆ UpdateTimetableDuration()

void OrderList::UpdateTimetableDuration ( TimerGameTick::Ticks delta)
inline

Must be called if an order's timetable is changed to update internal book keeping.

Parameters
deltaBy how many ticks has the timetable duration changed

Definition at line 440 of file order_base.h.

Referenced by ChangeTimetable().

◆ UpdateTotalDuration()

void OrderList::UpdateTotalDuration ( TimerGameTick::Ticks delta)
inline

Must be called if an order's timetable is changed to update internal book keeping.

Parameters
deltaBy how many ticks has the total duration changed

Definition at line 446 of file order_base.h.

Referenced by ChangeTimetable().

◆ AfterLoadVehiclesPhase1

◆ GetOrderListDescription

SaveLoadTable GetOrderListDescription ( )
friend

Saving and loading of order lists.

Definition at line 240 of file order_sl.cpp.

References GetOrderListDescription, OrderList(), SL_MAX_VERSION, SL_MIN_VERSION, SLE_CONDVARNAME, SLEG_CONDSTRUCTLIST, SLV_69, and SLV_ORDERS_OWNED_BY_ORDERLIST.

Referenced by GetOrderListDescription.

◆ ORDLChunkHandler

friend struct ORDLChunkHandler
friend

Definition at line 278 of file order_base.h.

◆ SlOrders

template<typename T>
friend class SlOrders
friend

Definition at line 280 of file order_base.h.

Field Documentation

◆ first_shared

Vehicle* OrderList::first_shared = nullptr
private

NOSAVE: pointer to the first vehicle in the shared order chain.

Definition at line 284 of file order_base.h.

Referenced by Initialize(), and RemoveVehicle().

◆ num_manual_orders

VehicleOrderID OrderList::num_manual_orders = 0
private

NOSAVE: How many manually added orders are there in the list.

Definition at line 282 of file order_base.h.

Referenced by DeleteOrderAt(), FreeChain(), Initialize(), and InsertOrderAt().

◆ num_vehicles

uint OrderList::num_vehicles = 0
private

NOSAVE: Number of vehicles that share this order list.

Definition at line 283 of file order_base.h.

Referenced by Initialize(), and RemoveVehicle().

◆ old_order_index

uint32_t OrderList::old_order_index = 0
private

Definition at line 286 of file order_base.h.

◆ orders

◆ timetable_duration

TimerGameTick::Ticks OrderList::timetable_duration {}
private

NOSAVE: Total timetabled duration of the order list.

Definition at line 288 of file order_base.h.

Referenced by DeleteOrderAt(), FreeChain(), Initialize(), InsertOrderAt(), and RecalculateTimetableDuration().

◆ total_duration

TimerGameTick::Ticks OrderList::total_duration {}
private

NOSAVE: Total (timetabled or not) duration of the order list.

Definition at line 289 of file order_base.h.

Referenced by DeleteOrderAt(), Initialize(), and InsertOrderAt().


The documentation for this struct was generated from the following files: