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:
Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_link_graph_pool >

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 SmallVector< BaseNode, 16 > NodeVector
typedef SmallMatrix< BaseEdgeEdgeMatrix

Public Member Functions

 LinkGraph ()
 Bare constructor, only for save/load.
 LinkGraph (CargoID cargo)
 Real constructor.
void Init (uint size)
 Resize the component and fill it with empty nodes and edges.
void Compress ()
void Merge (LinkGraph *other)
 Merge a link graph with another one.
Node operator[] (NodeID num)
 Get a node with the specified id.
ConstNode operator[] (NodeID num) const
 Get a const reference to a node with the specified id.
uint Size () const
 Get the current size of the component.
Date LastCompression () const
 Get date of last compression.
CargoID Cargo () const
 Get the cargo ID this component's link graph refers to.
uint Monthly (uint base) const
 Scale a value to its monthly equivalent, based on last compression.
NodeID AddNode (const Station *st)
 Add a node to the component and create empty edges associated with it.
void RemoveNode (NodeID id)
 Remove a node from the link graph by overwriting it with the last node.

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.

Static Public Attributes

static const uint MIN_TIMEOUT_DISTANCE = 48
 Minimum effective distance for timeout calculation.
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
const SaveLoadGetLinkGraphDesc ()
 Get a SaveLoad array for a link graph.
const SaveLoadGetLinkGraphJobDesc ()
 Get a SaveLoad array for a link graph job.
void SaveLoad_LinkGraph (LinkGraph &lg)
 Save/load a link graph.

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 40 of file linkgraph.h.


Constructor & Destructor Documentation

LinkGraph::LinkGraph (  )  [inline]

Bare constructor, only for save/load.

Definition at line 437 of file linkgraph.h.

LinkGraph::LinkGraph ( CargoID  cargo  )  [inline]

Real constructor.

Parameters:
cargo Cargo the link graph is about.

Definition at line 442 of file linkgraph.h.


Member Function Documentation

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 135 of file linkgraph.cpp.

References GoodsEntry::acceptance_pickup, SmallVector< T, S >::Append(), cargo, DistanceManhattan(), edges, GoodsEntry::GES_ACCEPTANCE, SpecializedStation< Station, false >::Get(), Station::goods, HasBit(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, LinkGraph::BaseEdge::Init(), max(), LinkGraph::BaseEdge::next_edge, nodes, SmallMatrix< T >::Resize(), Size(), and BaseStation::xy.

Referenced by IncreaseStats(), and Merge().

CargoID LinkGraph::Cargo (  )  const [inline]

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

Returns:
Cargo ID.

Definition at line 486 of file linkgraph.h.

References cargo.

Referenced by LinkGraphJob::Cargo().

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 243 of file linkgraph.cpp.

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

Referenced by Load_LGRJ(), and Load_LGRP().

Date LinkGraph::LastCompression (  )  const [inline]

Get date of last compression.

Returns:
Date of last compression.

Definition at line 480 of file linkgraph.h.

References last_compression.

Referenced by DeleteStaleLinks(), and LinkGraphJob::LastCompression().

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 493 of file linkgraph.h.

References _date, and last_compression.

Referenced by LinkGraphOverlay::AddLinks(), StationViewWindow::DrawCargoRatings(), and LinkGraphOverlay::RebuildCache().

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 468 of file linkgraph.h.

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 461 of file linkgraph.h.

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 99 of file linkgraph.cpp.

References cargo, edges, SmallVector< T, S >::Erase(), SmallMatrix< T >::EraseColumn(), SmallVector< T, S >::Get(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_link_graph_pool >::Get(), LinkGraph::BaseEdge::next_edge, nodes, and Size().

Referenced by Station::~Station().

static uint LinkGraph::Scale ( uint  val,
uint  target_age,
uint  orig_age 
) [inline, static]

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 431 of file linkgraph.h.

References max().

Referenced by Merge().

uint LinkGraph::Size (  )  const [inline]

Get the current size of the component.

Returns:
Size.

Definition at line 474 of file linkgraph.h.

References SmallVector< T, S >::Length(), and nodes.

Referenced by AddNode(), DoSave_LGRP(), IncreaseStats(), Init(), Merge(), RemoveNode(), SaveLoad_LinkGraph(), LinkGraphJob::Size(), and Station::~Station().


Friends And Related Function Documentation

const SaveLoad* GetLinkGraphDesc (  )  [friend]

Get a SaveLoad array for a link graph.

Returns:
SaveLoad array for link graph.

Definition at line 30 of file linkgraph_sl.cpp.

const SaveLoad* 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 50 of file linkgraph_sl.cpp.

void SaveLoad_LinkGraph ( LinkGraph lg  )  [friend]

Save/load a link graph.

Parameters:
comp Link graph to be saved or loaded.

Definition at line 133 of file linkgraph_sl.cpp.


Field Documentation

const uint LinkGraph::COMPRESSION_INTERVAL = 256 [static]

Minimum number of days between subsequent compressions of a LG.

Definition at line 421 of file linkgraph.h.

Referenced by DeleteStaleLinks().

const uint LinkGraph::MIN_TIMEOUT_DISTANCE = 48 [static]

Minimum effective distance for timeout calculation.

Definition at line 418 of file linkgraph.h.

Referenced by DeleteStaleLinks().


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