OpenTTD Source: OrderList Struct Reference

OpenTTD Source 1.11.0-RC1

Public Member Functions | Private Member Functions | Private Attributes | Friends
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 (VehicleOrderID num_orders=INVALID_VEH_ORDER_ID)
| Default constructor producing an invalid order list.
| OrderList (Order *chain, Vehicle *v)
| Create an order list with the given order chain for the given vehicle. More...
| ~OrderList ()
| Destructor. More...
void | Initialize (Order *chain, Vehicle *v)
| Recomputes everything. More...
void | RecalculateTimetableDuration ()
| Recomputes Timetable duration. More...
Order * | GetFirstOrder () const
| Get the first order of the order chain. More...
Order * | GetOrderAt (int index) const
| Get a certain order of the order chain. More...
Order * | GetLastOrder () const
| Get the last order of the order chain. More...
const Order * | GetNext (const Order *curr) const
| Get the order after the given one or the first one, if the given one is the last one. More...
VehicleOrderID | GetNumOrders () const
| Get number of orders in the order list. More...
VehicleOrderID | GetNumManualOrders () const
| Get number of manually added orders in the order list. More...
StationIDStack | GetNextStoppingStation (const Vehicle *v, const Order *first=nullptr, uint hops=0) const
| Recursively determine the next deterministic station to stop at. More...
const Order * | GetNextDecisionNode (const Order *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. More...
void | InsertOrderAt (Order *new_order, int index)
| Insert a new order into the order chain. More...
void | DeleteOrderAt (int index)
| Remove an order from the order list and delete it. More...
void | MoveOrder (int from, int to)
| Move an order to another position within the order list. More...
bool | IsShared () const
| Is this a shared order list? More...
Vehicle * | GetFirstSharedVehicle () const
| Get the first vehicle of this vehicle chain. More...
uint | GetNumVehicles () const
| Return the number of vehicles that share this orders list. More...
bool | IsVehicleInSharedOrdersList (const Vehicle *v) const
| Checks whether a vehicle is part of the shared vehicle chain. More...
int | GetPositionInSharedOrderList (const Vehicle *v) const
| Gets the position of the given vehicle within the shared order vehicle list. More...
void | AddVehicle (Vehicle *v)
| Adds the given vehicle to this shared order list. More...
void | RemoveVehicle (Vehicle *v)
| Removes the vehicle from the shared order list. More...
bool | IsCompleteTimetable () const
| Checks whether all orders of the list have a filled timetable. More...
Ticks | GetTimetableTotalDuration () const
| Gets the total duration of the vehicles timetable or INVALID_TICKS is the timetable is not complete. More...
Ticks | GetTimetableDurationIncomplete () const
| Gets the known duration of the vehicles timetable even if the timetable is not complete. More...
Ticks | GetTotalDuration () const
| Gets the known duration of the vehicles orders, timetabled or not. More...
void | UpdateTimetableDuration (Ticks delta)
| Must be called if an order's timetable is changed to update internal book keeping. More...
void | UpdateTotalDuration (Ticks delta)
| Must be called if an order's timetable is changed to update internal book keeping. More...
void | FreeChain (bool keep_orderlist=false)
| Free a complete order chain. More...
void | DebugCheckSanity () const
| Checks for internal consistency of order list. More...
Public Member Functions inherited from Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_orderlist_pool >
void * | operator new (size_t size)
| Allocates space for new Titem. More...
void * | operator new (size_t size, size_t index)
| Allocates space for new Titem with given index. More...
void * | operator new (size_t size, void *ptr)
| Allocates space for new Titem at given memory address. More...
void | operator delete (void *p)
| Marks Titem as free. More...

## Private Member Functions
StationID | GetBestLoadableNext (const Vehicle *v, const Order *o1, const Order *o2) const

## Private Attributes
Order * | first
| First order of the order list.
VehicleOrderID | num_orders
| NOSAVE: How many orders there are in the list.
VehicleOrderID | num_manual_orders
| NOSAVE: How many manually added orders are there in the list.
uint | num_vehicles
| NOSAVE: Number of vehicles that share this order list.
Vehicle * | first_shared
| NOSAVE: pointer to the first vehicle in the shared order chain.
Ticks | timetable_duration
| NOSAVE: Total timetabled duration of the order list.
Ticks | total_duration
| NOSAVE: Total (timetabled or not) duration of the order list.

## Friends
void | AfterLoadVehicles (bool part_of_load)
| For instantiating the shared vehicle chain.
const struct SaveLoad * | GetOrderListDescription ()
| Saving and loading of order lists.

## Additional Inherited Members
Public Types inherited from Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_orderlist_pool >
typedef struct Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero > | Pool
| Type of the pool this item is going to be part of.
Static Public Member Functions inherited from Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_orderlist_pool >
static bool | CanAllocateItem (size_t n=1)
| Helper functions so we can use PoolItem::Function() instead of _poolitem_pool.Function() More...
static bool | CleaningPool ()
| Returns current state of pool cleaning - yes or no. More...
static bool | IsValidID (size_t index)
| Tests whether given index can be used to get valid (non-nullptr) Titem. More...
static Titem * | Get (size_t index)
| Returns Titem with given index. More...
static Titem * | GetIfValid (size_t index)
| Returns Titem with given index. More...
static size_t | GetPoolSize ()
| Returns first unused index. More...
static size_t | GetNumItems ()
| Returns number of valid items in the pool. More...
static void | PostDestructor (size_t index)
| Dummy function called after destructor of each member. More...
static Pool::IterateWrapper< Titem > | Iterate (size_t from=0)
| Returns an iterable ensemble of all valid Titem. More...
Data Fields inherited from Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_orderlist_pool >
Tindex | index
| Index of this pool item.

## Detailed Description

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

Definition at line 250 of file order_base.h.

## Constructor & Destructor Documentation

## ◆ OrderList()

OrderList::OrderList | ( | Order * | chain,
|  | Vehicle * | v
| ) |  |
| inline

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

Parameters

  chain | pointer to the first order of the order chain
  v | any vehicle using this orderlist

Definition at line 277 of file order_base.h.

References Initialize().

## ◆ ~OrderList()

OrderList::~OrderList | ( |  | ) |
| inline

Destructor.

Invalidates OrderList for re-usage by the pool.

Definition at line 280 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

  v | vehicle to add to the list

Definition at line 354 of file order_base.h.

References num_vehicles.

Referenced by Vehicle::AddToShared().

## ◆ DebugCheckSanity()

void OrderList::DebugCheckSanity | ( |  | ) | const

Checks for internal consistency of order list.

Triggers assertion if something is wrong.

Definition at line 615 of file order_cmd.cpp.

References DEBUG, first, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_orderlist_pool >::index, and Order::next.

## ◆ DeleteOrderAt()

void OrderList::DeleteOrderAt | ( | int | index | ) |

Remove an order from the order list and delete it.

Parameters

  index | is the position of the order which is to be deleted.

Definition at line 509 of file order_cmd.cpp.

References first, GetOrderAt(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_orderlist_pool >::index, Order::IsType(), Order::next, and num_orders.

Referenced by DeleteOrder().

## ◆ FreeChain()

void OrderList::FreeChain | ( | bool | keep_orderlist = `false` | ) |

Free a complete order chain.

Parameters

  keep_orderlist | If this is true only delete the orders, otherwise also delete the OrderList.

Note
  do not use on "current_order" vehicle orders!

Definition at line 333 of file order_cmd.cpp.

References first, Order::next, num_manual_orders, num_orders, and timetable_duration.

Referenced by DeleteVehicleOrders().

## ◆ GetFirstOrder()

Order* OrderList::GetFirstOrder | ( |  | ) | const
| inline

Get the first order of the order chain.

Returns
  the first order of the chain.

Definition at line 290 of file order_base.h.

References first.

Referenced by GetNext(), and 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 337 of file order_base.h.

References first_shared.

Referenced by CmdSetTimetableStart().

## ◆ GetLastOrder()

Order* OrderList::GetLastOrder | ( |  | ) | const
| inline

Get the last order of the order chain.

Returns
  the last order of the chain.

Definition at line 298 of file order_base.h.

References GetOrderAt().

Referenced by InsertOrderAt().

## ◆ GetNext()

const Order* OrderList::GetNext | ( | const Order * | curr | ) | const
| inline

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

Parameters

  curr | Order to find the next one for.

Returns
  Next order.

Definition at line 306 of file order_base.h.

References GetFirstOrder(), and Order::next.

## ◆ GetNextDecisionNode()

const Order * OrderList::GetNextDecisionNode | ( | const Order * | 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

  next | The order to start looking at.
  hops | The number of orders we have already looked at.

Returns
  Either of
  - a station order
  - a refitting depot order
  - a non-trivial conditional order
  - nullptr if the vehicle won't stop anymore.

Definition at line 379 of file order_cmd.cpp.

References GetNumOrders(), and Order::IsType().

Referenced by LinkRefresher::Run().

## ◆ GetNextStoppingStation()

StationIDStack OrderList::GetNextStoppingStation | ( | const Vehicle * | v,
|  | const Order * | first = `nullptr`,
|  | uint | hops = `0`
| ) |  | const

Recursively determine the next deterministic station to stop at.

Parameters

  v | The vehicle we're looking at.
  first | Order to start searching at or nullptr to start at cur_implicit_order_index + 1.
  hops | Number of orders we have already looked at.

Returns
  Next stopping station or INVALID_STATION.

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 414 of file order_cmd.cpp.

References BaseConsist::cur_implicit_order_index, first, GetFirstOrder(), and GetOrderAt().

## ◆ 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 318 of file order_base.h.

References num_manual_orders.

## ◆ GetNumOrders()

VehicleOrderID OrderList::GetNumOrders | ( |  | ) | const
| inline

Get number of orders in the order list.

Returns
  number of orders in the chain.

Definition at line 312 of file order_base.h.

References num_orders.

Referenced by CmdSellVehicle(), GetIncompatibleRefitOrderIdForAutoreplace(), and GetNextDecisionNode().

## ◆ 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 343 of file order_base.h.

References num_vehicles.

## ◆ GetOrderAt()

Order * OrderList::GetOrderAt | ( | int | index | ) | const

Get a certain order of the order chain.

Parameters

  index | zero-based index of the order within the chain.

Returns
  the order at position index.

Definition at line 356 of file order_cmd.cpp.

References first, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_orderlist_pool >::index, and Order::next.

Referenced by DeleteOrderAt(), GetIncompatibleRefitOrderIdForAutoreplace(), GetLastOrder(), GetNextStoppingStation(), InsertOrderAt(), and MoveOrder().

## ◆ GetPositionInSharedOrderList()

int OrderList::GetPositionInSharedOrderList | ( | const Vehicle * | v | ) | const

Gets the position of the given vehicle within the shared order vehicle list.

Parameters

  v | is the vehicle of which to get the position

Returns
  position of v within the shared vehicle chain.

Definition at line 591 of file order_cmd.cpp.

References Vehicle::PreviousShared().

## ◆ GetTimetableDurationIncomplete()

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 370 of file order_base.h.

References timetable_duration.

## ◆ GetTimetableTotalDuration()

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

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

Returns
  total timetable duration or INVALID_TICKS for incomplete timetables

Definition at line 364 of file order_base.h.

References INVALID_TICKS, IsCompleteTimetable(), and timetable_duration.

Referenced by CmdSetTimetableStart().

## ◆ GetTotalDuration()

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

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

Returns
  known order duration.

Definition at line 376 of file order_base.h.

References total_duration.

## ◆ Initialize()

void OrderList::Initialize | ( | Order * | chain,
|  | Vehicle * | v
| ) |  |

Recomputes everything.

Parameters

  chain | first order in the chain
  v | one of vehicle that is using this orderlist

Definition at line 290 of file order_cmd.cpp.

References first, first_shared, Order::next, num_manual_orders, num_orders, num_vehicles, and timetable_duration.

Referenced by OrderList().

## ◆ InsertOrderAt()

void OrderList::InsertOrderAt | ( | Order * | new_order,
|  | int | index
| ) |  |

Insert a new order into the order chain.

Parameters

  new_order | is the order to insert into the chain.
  index | is the position where the order is supposed to be inserted.

Definition at line 471 of file order_cmd.cpp.

References first, GetLastOrder(), GetOrderAt(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_orderlist_pool >::index, Order::IsType(), Order::next, and num_orders.

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 602 of file order_cmd.cpp.

References first, and Order::next.

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 331 of file order_base.h.

Referenced by CmdSellVehicle().

## ◆ IsVehicleInSharedOrdersList()

bool OrderList::IsVehicleInSharedOrdersList | ( | const Vehicle * | v | ) | const

Checks whether a vehicle is part of the shared vehicle chain.

Parameters

  v | is the vehicle to search in the shared vehicle chain.

Definition at line 577 of file order_cmd.cpp.

References first_shared, and Vehicle::NextShared().

## ◆ MoveOrder()

void OrderList::MoveOrder | ( | int | from,
|  | int | to
| ) |  |

Move an order to another position within the order list.

Parameters

  from | is the zero-based position of the order to move.
  to | is the zero-based position where the order is moved to.

Definition at line 535 of file order_cmd.cpp.

References first, GetOrderAt(), Order::next, and num_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 320 of file order_cmd.cpp.

References first, Order::next, and timetable_duration.

## ◆ 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

  v | vehicle to remove from the list

Definition at line 567 of file order_cmd.cpp.

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

## ◆ UpdateTimetableDuration()

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

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

Parameters

  delta | By how many ticks has the timetable duration changed

Definition at line 382 of file order_base.h.

## ◆ UpdateTotalDuration()

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

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

Parameters

  delta | By how many ticks has the total duration changed

Definition at line 388 of file order_base.h.

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

- src/order_base.h
- src/order_cmd.cpp