Public Types | Public Member Functions | 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 (StationID st, uint flow)
void | AddShare (StationID st, uint flow)
| Add some flow.
uint | GetShare (StationID st) const
| Get flow for a station.
void | EraseShare (StationID st)
| Erase shares for specified station.
const SharesMap * | GetShares () const
StationID | GetVia () const
| Get a station a package can be routed to.
StationID | GetVia (StationID excluded) const
| Get a station a package can be routed to, but exclude the given one.
## Private Attributes
SharesMap | shares
| Shares of flow to be sent via specified station (or consumed locally).

## 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 160 of file station_base.h.

## Member Function Documentation

void FlowStat::AddShare | ( | StationID | st,
|  | uint | flow |
| ) |  |  | `[inline]`

Add some flow.

Parameters:

  | st | Remote station.
  | flow | Amount of flow to be added.

Definition at line 177 of file station_base.h.

References shares.

Referenced by Node::ExportFlows().

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

Erase shares for specified station.

Parameters:

  | st | Next Hop to be removed.

Definition at line 3975 of file station_cmd.cpp.

References shares.

Referenced by DeleteStaleFlows().

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 3932 of file station_cmd.cpp.

References shares.

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

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

Parameters:

  | excluded | StationID not to be selected.

Returns:
  A station ID from the shares map.

Definition at line 3950 of file station_cmd.cpp.

References max(), and shares.

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.

Returns:
  A station ID from the shares map.

Definition at line 196 of file station_base.h.

References shares.

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

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