OpenTTD

- Main Page
- Related Pages
- Modules
- Namespaces
- Data Structures
- Files

- Data Structures
- Class Hierarchy
- Data Fields

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.
| ~OrderList ()
| Destructor.
void | Initialize (Order *chain, Vehicle *v)
| Recomputes everything.
Order * | GetFirstOrder () const
| Get the first order of the order chain.
Order * | GetOrderAt (int index) const
| Get a certain order of the order chain.
Order * | GetLastOrder () const
| Get the last order of the order chain.
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.
VehicleOrderID | GetNumOrders () const
| Get number of orders in the order list.
VehicleOrderID | GetNumManualOrders () const
| Get number of manually added orders in the order list.
StationIDStack | GetNextStoppingStation (const Vehicle *v, const Order *first=NULL, uint hops=0) const
| Recursively determine the next deterministic station to stop at.
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.
void | InsertOrderAt (Order *new_order, int index)
| Insert a new order into the order chain.
void | DeleteOrderAt (int index)
| Remove an order from the order list and delete it.
void | MoveOrder (int from, int to)
| Move an order to another position within the order list.
bool | IsShared () const
| Is this a shared order list?
Vehicle * | GetFirstSharedVehicle () const
| Get the first vehicle of this vehicle chain.
uint | GetNumVehicles () const
| Return the number of vehicles that share this orders list.
bool | IsVehicleInSharedOrdersList (const Vehicle *v) const
| Checks whether a vehicle is part of the shared vehicle chain.
int | GetPositionInSharedOrderList (const Vehicle *v) const
| Gets the position of the given vehicle within the shared order vehicle 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.
Ticks | GetTimetableTotalDuration () const
| Gets the total duration of the vehicles timetable or INVALID_TICKS is the timetable is not complete.
Ticks | GetTimetableDurationIncomplete () const
| Gets the known duration of the vehicles timetable even if the timetable is not complete.
Ticks | GetTotalDuration () const
| Gets the known duration of the vehicles orders, timetabled or not.
void | UpdateTimetableDuration (Ticks delta)
| Must be called if an order's timetable is changed to update internal book keeping.
void | UpdateTotalDuration (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
| Checks for internal consistency of order list.
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.
void * | operator new (size_t size, size_t index)
| Allocates space for new Titem with given index.
void * | operator new (size_t size, void *ptr)
| Allocates space for new Titem at given memory address.
void | operator delete (void *p)
| Marks Titem as free.

## 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.
struct SaveLoad * | GetOrderListDescription ()
| Saving and loading of order lists.

## Additional Inherited Members
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()
static bool | CleaningPool ()
| Returns current state of pool cleaning - yes or no.
static bool | IsValidID (size_t index)
| Tests whether given index can be used to get valid (non-NULL) Titem.
static Titem * | Get (size_t index)
| Returns Titem with given index.
static Titem * | GetIfValid (size_t index)
| Returns Titem with given index.
static size_t | GetPoolSize ()
| Returns first unused index.
static size_t | GetNumItems ()
| Returns number of valid items in the pool.
static void | PostDestructor (size_t index)
| Dummy function called after destructor of each member.
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 252 of file order_base.h.

## Constructor & Destructor Documentation

OrderList::OrderList | ( | VehicleOrderID | num_orders = `INVALID_VEH_ORDER_ID` | ) |
| inline

Default constructor producing an invalid order list.

Definition at line 270 of file order_base.h.

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

References Initialize().

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

Destructor.

Invalidates OrderList for re-usage by the pool.

Definition at line 282 of file order_base.h.

## Member Function Documentation

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().

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

Checks for internal consistency of order list.

Triggers assertion if something is wrong.

Definition at line 605 of file order_cmd.cpp.

References DEBUG, first, first_shared, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_orderlist_pool >::index, Order::next, Vehicle::NextShared(), num_manual_orders, num_orders, num_vehicles, timetable_duration, and total_duration.

Referenced by CheckOrders().

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

References first, GetOrderAt(), Order::GetTimetabledTravel(), Order::GetTimetabledWait(), Order::GetTravelTime(), Order::GetWaitTime(), Order::IsType(), Order::next, num_manual_orders, num_orders, timetable_duration, and total_duration.

Referenced by DeleteOrder().

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

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

Referenced by AfterLoadGame(), and DeleteVehicleOrders().

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 AfterLoadGame(), CheckOrders(), CmdCloneOrder(), DeleteStaleLinks(), FillTimetableArrivalDepartureTable(), GetNext(), GetNextStoppingStation(), GetOrderDistance(), MoveBuoysToWaypoints(), and MoveWaypointsToBaseStations().

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 AfterLoadVehicles(), CmdSetTimetableStart(), DeleteStaleLinks(), MoveBuoysToWaypoints(), and MoveWaypointsToBaseStations().

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(), and num_orders.

Referenced by InsertOrderAt().

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.

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

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
  - NULL if the vehicle won't stop anymore.

Definition at line 369 of file order_cmd.cpp.

References Order::GetConditionSkipToOrder(), Order::GetConditionVariable(), Order::GetDepotActionType(), GetNext(), GetNumOrders(), GetOrderAt(), Order::IsRefit(), Order::IsType(), OCV_UNCONDITIONALLY, and ODATFB_HALT.

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

StationIDStack OrderList::GetNextStoppingStation | ( | const Vehicle * | v,
|  | const Order * | first = `NULL`,
|  | 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 NULL to start at cur_implicit_order_index + 1.
  hops | Number of orders we have already looked at.

Returns
  Next stoppping 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 404 of file order_cmd.cpp.

References BaseConsist::cur_implicit_order_index, first, Order::GetConditionSkipToOrder(), Order::GetDestination(), GetFirstOrder(), GetNext(), GetNextDecisionNode(), GetOrderAt(), Order::GetUnloadType(), SmallStack< Titem, Tindex, Tinvalid, Tgrowth_step, Tmax_size >::IsEmpty(), Order::IsType(), Vehicle::last_station_visited, OUFB_TRANSFER, OUFB_UNLOAD, SmallStack< Titem, Tindex, Tinvalid, Tgrowth_step, Tmax_size >::Pop(), and SmallStack< Titem, Tindex, Tinvalid, Tgrowth_step, Tmax_size >::Push().

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.

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(), GetNextDecisionNode(), and LinkRefresher::PredictNextOrder().

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.

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

References first, and Order::next.

Referenced by DeleteOrderAt(), GetLastOrder(), GetNextDecisionNode(), GetNextStoppingStation(), InsertOrderAt(), MoveOrder(), and LinkRefresher::PredictNextOrder().

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

References Vehicle::PreviousShared().

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.

Referenced by TimetableWindow::DrawWidget().

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(), and UpdateVehicleTimetable().

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.

Referenced by LinkRefresher::RefreshStats().

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

References first, first_shared, Order::next, Vehicle::NextShared(), num_manual_orders, num_orders, num_vehicles, Vehicle::PreviousShared(), timetable_duration, and total_duration.

Referenced by AfterLoadVehicles(), and OrderList().

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

References first, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_orderlist_pool >::Get(), Order::GetDestination(), GetLastOrder(), GetOrderAt(), Order::GetTimetabledTravel(), Order::GetTimetabledWait(), Order::GetTravelTime(), Order::GetWaitTime(), InvalidateWindowClassesData(), Order::IsType(), Order::next, num_manual_orders, num_orders, BaseStation::owner, OWNER_NONE, timetable_duration, total_duration, and WC_STATION_LIST.

Referenced by InsertOrder().

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

References first, and Order::next.

Referenced by CmdSetTimetableStart(), TimetableWindow::DrawWidget(), GetTimetableTotalDuration(), and TimetableWindow::OnClick().

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.

References num_vehicles.

Referenced by CmdCloneOrder(), and CmdSellVehicle().

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

References first_shared, and Vehicle::NextShared().

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

References first, GetOrderAt(), Order::next, and num_orders.

Referenced by CmdMoveOrder().

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

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

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.

References timetable_duration.

Referenced by ChangeTimetable(), and RemoveOrderFromAllVehicles().

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.

References total_duration.

Referenced by ChangeTimetable(), and RemoveOrderFromAllVehicles().

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

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