OpenTTD

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

- Data Structures
- Class Hierarchy
- Data Fields

Public Types | Public Member Functions | Static Public Attributes | Private Attributes
FlowStat Class Reference

Flow statistics telling how much flow should be sent along a link. More...

`#include <station_base.h>`

## Public Types
typedef std::map< uint32, StationID > | SharesMap

## Public Member Functions
| FlowStat ()
| Invalid constructor.
| FlowStat (StationID st, uint flow, bool restricted=false)
| Create a FlowStat with an initial entry.
void | AppendShare (StationID st, uint flow, bool restricted=false)
| Add some flow to the end of the shares map.
uint | GetShare (StationID st) const
| Get flow for a station.
void | ChangeShare (StationID st, int flow)
| Change share for specified station.
void | RestrictShare (StationID st)
| Restrict a flow by moving it to the end of the map and decreasing the amount of unrestricted flow.
void | ReleaseShare (StationID st)
| Release ("unrestrict") a flow by moving it to the begin of the map and increasing the amount of unrestricted flow.
void | ScaleToMonthly (uint runtime)
| Scale all shares from link graph's runtime to monthly values.
const SharesMap * | GetShares () const
| Get the actual shares as a const pointer so that they can be iterated over.
uint | GetUnrestricted () const
| Return total amount of unrestricted shares.
void | SwapShares (FlowStat &other)
| Swap the shares maps, and thus the content of this FlowStat with the other one.
StationID | GetViaWithRestricted (bool &is_restricted) const
| Get a station a package can be routed to.
StationID | GetVia () const
| Get a station a package can be routed to.
StationID | GetVia (StationID excluded, StationID excluded2=INVALID_STATION) const
| Get a station a package can be routed to, but exclude the given ones.
void | Invalidate ()
| Reduce all flows to minimum capacity so that they don't get in the way of link usage statistics too much.

## Static Public Attributes
static const SharesMap | empty_sharesmap
| Static instance of FlowStat::SharesMap.

## Private Attributes
SharesMap | shares
| Shares of flow to be sent via specified station (or consumed locally).
uint | unrestricted
| Limit for unrestricted shares.

## Detailed Description

Flow statistics telling how much flow should be sent along a link.

This is done by creating "flow shares" and using std::map's upper_bound() method to look them up with a random number. A flow share is the difference between a key in a map and the previous key. So one key in the map doesn't actually mean anything by itself.

Definition at line 36 of file station_base.h.

## Constructor & Destructor Documentation

FlowStat::FlowStat | ( |  | ) |
| inline

Invalid constructor.

This can't be called as a FlowStat must not be empty. However, the constructor must be defined and reachable for FlwoStat to be used in a std::map.

Definition at line 47 of file station_base.h.

FlowStat::FlowStat | ( | StationID | st,
|  | uint | flow,
|  | bool | restricted = `false`
| ) |  |
| inline

Create a FlowStat with an initial entry.

Parameters

  st | Station the initial entry refers to.
  flow | Amount of flow for the initial entry.
  restricted | If the flow to be added is restricted.

Definition at line 55 of file station_base.h.

References shares, and unrestricted.

## Member Function Documentation

void FlowStat::AppendShare | ( | StationID | st,
|  | uint | flow,
|  | bool | restricted = `false`
| ) |  |
| inline

Add some flow to the end of the shares map.

Only do that if you know that the station isn't in the map yet. Anything else may lead to inconsistencies.

Parameters

  st | Remote station.
  flow | Amount of flow to be added.
  restricted | If the flow to be added is restricted.

Definition at line 70 of file station_base.h.

References shares, and unrestricted.

Referenced by FlowStatMap::PassOnFlow().

void FlowStat::ChangeShare | ( | StationID | st,
|  | int | flow
| ) |  |

Change share for specified station.

By specifing INT_MIN as parameter you can erase a share. Newly added flows will be unrestricted.

Parameters

  st | Next Hop to be removed.
  flow | Share to be added or removed.

Definition at line 4236 of file station_cmd.cpp.

References ReleaseShare(), shares, and unrestricted.

Referenced by FlowStatMap::DeleteFlows(), FlowStatMap::FinalizeLocalConsumption(), and VehicleCargoList::Stage().

uint FlowStat::GetShare | ( | StationID | st | ) | const

Get flow for a station.

Parameters

  st | Station to get flow for.

Returns
  Flow for st.

Definition at line 4145 of file station_cmd.cpp.

References shares.

Referenced by FlowStatMap::FinalizeLocalConsumption().

const SharesMap* FlowStat::GetShares | ( |  | ) | const
| inline

Get the actual shares as a const pointer so that they can be iterated over.

Returns
  Actual shares.

Definition at line 92 of file station_base.h.

References shares.

Referenced by FlowStatMap::DeleteFlows(), FlowStatMap::FinalizeLocalConsumption(), VehicleCargoList::Stage(), and LinkGraphJob::~LinkGraphJob().

uint FlowStat::GetUnrestricted | ( |  | ) | const
| inline

Return total amount of unrestricted shares.

Returns
  Amount of unrestricted shares.

Definition at line 98 of file station_base.h.

References unrestricted.

StationID FlowStat::GetVia | ( |  | ) | const
| inline

Get a station a package can be routed to.

This done by drawing a random number between 0 and sum_shares and then looking that up in the map with lower_bound. So each share gets selected with a probability dependent on its flow. Don't include restricted flows.

Returns
  A station ID from the shares map.

Definition at line 134 of file station_base.h.

References RandomRange(), shares, and unrestricted.

Referenced by VehicleCargoList::Stage().

StationID FlowStat::GetVia | ( | StationID | excluded,
|  | StationID | excluded2 = `INVALID_STATION`
| ) |  | const

Get a station a package can be routed to, but exclude the given ones.

Parameters

  excluded | StationID not to be selected.
  excluded2 | Another StationID not to be selected.

Returns
  A station ID from the shares map.

Definition at line 4164 of file station_cmd.cpp.

References RandomRange(), shares, Swap(), and unrestricted.

StationID FlowStat::GetViaWithRestricted | ( | bool & | is_restricted | ) | const
| inline

Get a station a package can be routed to.

This done by drawing a random number between 0 and sum_shares and then looking that up in the map with lower_bound. So each share gets selected with a probability dependent on its flow. Do include restricted flows here.

Parameters

  is_restricted | Output if a restricted flow was chosen.

Returns
  A station ID from the shares map.

Definition at line 119 of file station_base.h.

References RandomRange(), shares, and unrestricted.

void FlowStat::Invalidate | ( |  | ) |

Reduce all flows to minimum capacity so that they don't get in the way of link usage statistics too much.

Keep them around, though, to continue routing any remaining cargo.

Definition at line 4217 of file station_cmd.cpp.

References shares, and unrestricted.

void FlowStat::ReleaseShare | ( | StationID | st | ) |

Release ("unrestrict") a flow by moving it to the begin of the map and increasing the amount of unrestricted flow.

Parameters

  st | Station of flow to be released.

Definition at line 4317 of file station_cmd.cpp.

References shares, and unrestricted.

Referenced by ChangeShare().

void FlowStat::RestrictShare | ( | StationID | st | ) |

Restrict a flow by moving it to the end of the map and decreasing the amount of unrestricted flow.

Parameters

  st | Station of flow to be restricted.

Definition at line 4286 of file station_cmd.cpp.

References shares, and unrestricted.

void FlowStat::ScaleToMonthly | ( | uint | runtime | ) |

Scale all shares from link graph's runtime to monthly values.

Parameters

  runtime | Time the link graph has been running without compression.

Precondition
  runtime must be greater than 0 as we don't want infinite flow values.

Definition at line 4354 of file station_cmd.cpp.

References max(), shares, and unrestricted.

void FlowStat::SwapShares | ( | FlowStat & | other | ) |
| inline

Swap the shares maps, and thus the content of this FlowStat with the other one.

Parameters

  other | FlowStat to swap with.

Definition at line 105 of file station_base.h.

References shares, Swap(), and unrestricted.

## Field Documentation

const FlowStat::SharesMap FlowStat::empty_sharesmap
| static

Static instance of FlowStat::SharesMap.

Note: This instance is created on task start. Lazy creation on first usage results in a data race between the CDist threads.

Definition at line 40 of file station_base.h.

Referenced by FlowEdgeIterator::SetNode().

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

- src/station_base.h
- src/station_cmd.cpp