OpenTTD Source: LinkGraph Class Reference

OpenTTD Source 13.2.1

Data Structures | Public Types | Public Member Functions | Static Public Member Functions | Static Public Attributes | Protected Attributes | Friends
LinkGraph Class Reference

A connected component of a link graph. More...

`#include <linkgraph.h>`

Inheritance diagram for LinkGraph:

## Data Structures
struct | BaseEdge
| An edge in the link graph. More...
class | BaseEdgeIterator
| Base class for iterating across outgoing edges of a node. More...
struct | BaseNode
| Node of the link graph. More...
class | ConstEdgeIterator
| An iterator for const edges. More...
class | ConstNode
| Constant node class. More...
class | Edge
| An updatable edge class. More...
class | EdgeIterator
| An iterator for non-const edges. More...
class | EdgeWrapper
| Wrapper for an edge (const or not) allowing retrieval, but no modification. More...
class | Node
| Updatable node class. More...
class | NodeWrapper
| Wrapper for a node (const or not) allowing retrieval, but no modification. More...

## Public Types
typedef EdgeWrapper< const BaseEdge > | ConstEdge
| A constant edge class.
typedef std::vector< BaseNode > | NodeVector
typedef SmallMatrix< BaseEdge > | EdgeMatrix
Public Types inherited from Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_link_graph_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.

## Public Member Functions
| LinkGraph ()
| Bare constructor, only for save/load.
| LinkGraph (CargoID cargo)
| Real constructor. More...
void | Init (uint size)
| Resize the component and fill it with empty nodes and edges. More...
void | ShiftDates (int interval)
| Shift all dates by given interval. More...
void | Compress ()
void | Merge (LinkGraph *other)
| Merge a link graph with another one. More...
Node | operator[] (NodeID num)
| Get a node with the specified id. More...
ConstNode | operator[] (NodeID num) const
| Get a const reference to a node with the specified id. More...
NodeID | Size () const
| Get the current size of the component. More...
Date | LastCompression () const
| Get date of last compression. More...
CargoID | Cargo () const
| Get the cargo ID this component's link graph refers to. More...
uint | Monthly (uint base) const
| Scale a value to its monthly equivalent, based on last compression. More...
NodeID | AddNode (const Station *st)
| Add a node to the component and create empty edges associated with it. More...
void | RemoveNode (NodeID id)
| Remove a node from the link graph by overwriting it with the last node. More...
Public Member Functions inherited from Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_link_graph_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...

## Static Public Member Functions
static uint | Scale (uint val, uint target_age, uint orig_age)
| Scale a value from a link graph of age orig_age for usage in one of age target_age. More...
Static Public Member Functions inherited from Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_link_graph_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...

## Static Public Attributes
static const uint | MIN_TIMEOUT_DISTANCE = 32
| Minimum effective distance for timeout calculation.
static const uint | STALE_LINK_DEPOT_TIMEOUT = 1024
| Number of days before deleting links served only by vehicles stopped in depot.
static const uint | COMPRESSION_INTERVAL = 256
| Minimum number of days between subsequent compressions of a LG.

## Protected Attributes
CargoID | cargo
| Cargo of this component's link graph.
Date | last_compression
| Last time the capacities and supplies were compressed.
NodeVector | nodes
| Nodes in the component.
EdgeMatrix | edges
| Edges in the component.

## Friends
class | LinkGraph::ConstNode
class | LinkGraph::Node
class | SlLinkgraphNode
class | SlLinkgraphEdge
SaveLoadTable | GetLinkGraphDesc ()
| Get a SaveLoad array for a link graph. More...
SaveLoadTable | GetLinkGraphJobDesc ()
| Get a SaveLoad array for a link graph job. More...

## Additional Inherited Members
Data Fields inherited from Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_link_graph_pool >
Tindex | index
| Index of this pool item.

## Detailed Description

A connected component of a link graph.

Contains a complete set of stations connected by links as nodes and edges. Each component also holds a copy of the link graph settings at the time of its creation. The global settings might change between the creation and join time so we can't rely on them.

Definition at line 39 of file linkgraph.h.

## Constructor & Destructor Documentation

## ◆ LinkGraph()

LinkGraph::LinkGraph | ( | CargoID | cargo | ) |
| inline

Real constructor.

Parameters

  cargo | Cargo the link graph is about.

Definition at line 475 of file linkgraph.h.

## Member Function Documentation

## ◆ AddNode()

NodeID LinkGraph::AddNode | ( | const Station * | st | ) |

Add a node to the component and create empty edges associated with it.

Set the station's last_component to this component. Calculate the distances to all other nodes. The distances to all nodes are important as the demand calculator relies on their availability.

Parameters

  st | New node's station.

Returns
  New node's ID.

Definition at line 167 of file linkgraph.cpp.

References cargo, edges, GoodsEntry::GES_ACCEPTANCE, Station::goods, HasBit(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, LinkGraph::BaseEdge::next_edge, nodes, SmallMatrix< T >::Resize(), Size(), GoodsEntry::status, and BaseStation::xy.

Referenced by Merge().

## ◆ Cargo()

CargoID LinkGraph::Cargo | ( |  | ) | const
| inline

Get the cargo ID this component's link graph refers to.

Returns
  Cargo ID.

Definition at line 520 of file linkgraph.h.

References cargo.

Referenced by LinkGraphJob::Cargo().

## ◆ Init()

void LinkGraph::Init | ( | uint | size | ) |

Resize the component and fill it with empty nodes and edges.

Used when loading from save games. The component is expected to be empty before.

Parameters

  size | New size of the component.

Definition at line 305 of file linkgraph.cpp.

References edges, nodes, SmallMatrix< T >::Resize(), and Size().

## ◆ LastCompression()

Date LinkGraph::LastCompression | ( |  | ) | const
| inline

Get date of last compression.

Returns
  Date of last compression.

Definition at line 514 of file linkgraph.h.

References last_compression.

Referenced by LinkGraphJob::LastCompression().

## ◆ Merge()

void LinkGraph::Merge | ( | LinkGraph * | other | ) |

Merge a link graph with another one.

Parameters

  other | LinkGraph to be merged into this one.

Definition at line 92 of file linkgraph.cpp.

References _date, AddNode(), LinkGraph::BaseEdge::capacity, cargo, edges, SpecializedStation< Station, false >::Get(), Station::goods, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_link_graph_pool >::index, last_compression, GoodsEntry::link_graph, LinkGraph::BaseEdge::next_edge, GoodsEntry::node, nodes, Scale(), Size(), LinkGraph::BaseEdge::travel_time_sum, and LinkGraph::BaseEdge::usage.

## ◆ Monthly()

uint LinkGraph::Monthly | ( | uint | base | ) | const
| inline

Scale a value to its monthly equivalent, based on last compression.

Parameters

  base | Value to be scaled.

Returns
  Scaled value.

Definition at line 527 of file linkgraph.h.

References _date, and last_compression.

Referenced by StationViewWindow::DrawCargoRatings().

## ◆ operator[]() [1/2]

Node LinkGraph::operator[] | ( | NodeID | num | ) |
| inline

Get a node with the specified id.

Parameters

  num | ID of the node.

Returns
  the Requested node.

Definition at line 495 of file linkgraph.h.

## ◆ operator[]() [2/2]

ConstNode LinkGraph::operator[] | ( | NodeID | num | ) | const
| inline

Get a const reference to a node with the specified id.

Parameters

  num | ID of the node.

Returns
  the Requested node.

Definition at line 502 of file linkgraph.h.

## ◆ RemoveNode()

void LinkGraph::RemoveNode | ( | NodeID | id | ) |

Remove a node from the link graph by overwriting it with the last node.

Parameters

  id | ID of the node to be removed.

Definition at line 128 of file linkgraph.cpp.

References edges, LinkGraph::BaseEdge::next_edge, and Size().

## ◆ Scale()

static uint LinkGraph::Scale | ( | uint | val,
|  | uint | target_age,
|  | uint | orig_age
| ) |  |
| inlinestatic

Scale a value from a link graph of age orig_age for usage in one of age target_age.

Make sure that the value stays > 0 if it was > 0 before.

Parameters

  val | Value to be scaled.
  target_age | Age of the target link graph.
  orig_age | Age of the original link graph.

Returns
  scaled value.

Definition at line 464 of file linkgraph.h.

Referenced by Merge().

## ◆ ShiftDates()

void LinkGraph::ShiftDates | ( | int | interval | ) |

Shift all dates by given interval.

This is useful if the date has been modified with the cheat menu.

Parameters

  interval | Number of days to be added or subtracted.

Definition at line 53 of file linkgraph.cpp.

References edges, INVALID_DATE, last_compression, LinkGraph::BaseEdge::last_restricted_update, LinkGraph::BaseEdge::last_unrestricted_update, LinkGraph::BaseNode::last_update, nodes, and Size().

## ◆ Size()

NodeID LinkGraph::Size | ( |  | ) | const
| inline

Get the current size of the component.

Returns
  Size.

Definition at line 508 of file linkgraph.h.

References nodes.

Referenced by AddNode(), AfterLoadLinkGraphs(), Init(), Merge(), RemoveNode(), ShiftDates(), LinkGraphJob::Size(), and LinkGraphSchedule::SpawnNext().

## Friends And Related Function Documentation

## ◆ GetLinkGraphDesc

SaveLoadTable GetLinkGraphDesc | ( |  | ) |
| friend

Get a SaveLoad array for a link graph.

Returns
  SaveLoad array for link graph.

Definition at line 123 of file linkgraph_sl.cpp.

## ◆ GetLinkGraphJobDesc

SaveLoadTable GetLinkGraphJobDesc | ( |  | ) |
| friend

Get a SaveLoad array for a link graph job.

The settings struct is derived from the global settings saveload array. The exact entries are calculated when the function is called the first time. It's necessary to keep a copy of the settings for each link graph job so that you can change the settings while in-game and still not mess with current link graph runs. Of course the settings have to be saved and loaded, too, to avoid desyncs.

Returns
  Array of SaveLoad structs.

Definition at line 167 of file linkgraph_sl.cpp.

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

- src/linkgraph/linkgraph.h
- src/linkgraph/linkgraph.cpp