|
OpenTTD
|
A leg of a path in the link graph. More...
#include <linkgraphjob.h>
Public Member Functions | |
| Path (NodeID n, bool source=false) | |
| Create a leg of a path in the link graph. | |
| NodeID | GetNode () const |
| Get the node this leg passes. | |
| NodeID | GetOrigin () const |
| Get the overall origin of the path. | |
| Path * | GetParent () |
| Get the parent leg of this one. | |
| uint | GetCapacity () const |
| Get the overall capacity of the path. | |
| int | GetFreeCapacity () const |
| Get the free capacity of the path. | |
| int | GetCapacityRatio () const |
| Get capacity ratio of this path. | |
| uint | GetDistance () const |
| Get the overall distance of the path. | |
| void | ReduceFlow (uint f) |
| Reduce the flow on this leg only by the specified amount. | |
| void | AddFlow (uint f) |
| Increase the flow on this leg only by the specified amount. | |
| uint | GetFlow () const |
| Get the flow on this leg. | |
| uint | GetNumChildren () const |
| Get the number of "forked off" child legs of this one. | |
| void | Detach () |
| Detach this path from its parent. | |
| uint | AddFlow (uint f, LinkGraphJob &job, uint max_saturation) |
| Push some flow along a path and register the path in the nodes it passes if successful. | |
| void | Fork (Path *base, uint cap, int free_cap, uint dist) |
| Add this path as a new child to the given base path, thus making this path a "fork" of the base path. | |
Static Public Member Functions | |
| static int | GetCapacityRatio (int free, uint total) |
| Get ratio of free * 16 (so that we get fewer 0) / max(total capacity, 1) (so that we don't divide by 0). | |
Static Public Attributes | |
| static Path * | invalid_path = new Path(INVALID_NODE, true) |
| Static instance of an invalid path. | |
Protected Types | |
| enum | PathCapacityBoundaries { PATH_CAP_MULTIPLIER = 16, PATH_CAP_MIN_FREE = (INT_MIN + 1) / PATH_CAP_MULTIPLIER, PATH_CAP_MAX_FREE = (INT_MAX - 1) / PATH_CAP_MULTIPLIER } |
| Some boundaries to clamp agains in order to avoid integer overflows. | |
Protected Attributes | |
| uint | distance |
| Sum(distance of all legs up to this one). | |
| uint | capacity |
| This capacity is min(capacity) fom all edges. | |
| int | free_capacity |
| This capacity is min(edge.capacity - edge.flow) for the current run of Dijkstra. | |
| uint | flow |
| Flow the current run of the mcf solver assigns. | |
| NodeID | node |
| Link graph node this leg passes. | |
| NodeID | origin |
| Link graph node this path originates from. | |
| uint | num_children |
| Number of child legs that have been forked from this path. | |
| Path * | parent |
| Parent leg of this one. | |
A leg of a path in the link graph.
Paths can form trees by being "forked".
Definition at line 344 of file linkgraphjob.h.
| Path::Path | ( | NodeID | n, |
| bool | source = false |
||
| ) |
Create a leg of a path in the link graph.
| n | Id of the link graph node this path passes. |
| source | If true, this is the first leg of the path. |
Definition at line 272 of file linkgraphjob.cpp.
|
inline |
Increase the flow on this leg only by the specified amount.
Definition at line 393 of file linkgraphjob.h.
References flow.
Referenced by MCF1stPass::EliminateCycles(), and MultiCommodityFlow::PushFlow().
| uint Path::AddFlow | ( | uint | new_flow, |
| LinkGraphJob & | job, | ||
| uint | max_saturation | ||
| ) |
Push some flow along a path and register the path in the nodes it passes if successful.
| new_flow | Amount of flow to push. |
| job | Link graph job this node belongs to. |
| max_saturation | Maximum saturation of edges. |
Definition at line 245 of file linkgraphjob.cpp.
References LinkGraphJob::Edge::AddFlow(), LinkGraph::EdgeWrapper< Tedge >::Capacity(), LinkGraphJob::Edge::Flow(), and min().
| void Path::Fork | ( | Path * | base, |
| uint | cap, | ||
| int | free_cap, | ||
| uint | dist | ||
| ) |
Add this path as a new child to the given base path, thus making this path a "fork" of the base path.
| base | Path to fork from. |
| cap | Maximum capacity of the new leg. |
| free_cap | Remaining free capacity of the new leg. |
| dist | Distance of the new leg. |
Definition at line 223 of file linkgraphjob.cpp.
References capacity, distance, free_capacity, min(), num_children, and origin.
|
inline |
Get the overall capacity of the path.
Definition at line 360 of file linkgraphjob.h.
References capacity.
|
inlinestatic |
Get ratio of free * 16 (so that we get fewer 0) / max(total capacity, 1) (so that we don't divide by 0).
| free | Free capacity. |
| total | Total capacity. |
Definition at line 372 of file linkgraphjob.h.
|
inline |
Get capacity ratio of this path.
Definition at line 381 of file linkgraphjob.h.
References capacity, and free_capacity.
Referenced by CapacityAnnotation::GetAnnotation(), and CapacityAnnotation::IsBetter().
|
inline |
Get the overall distance of the path.
Definition at line 387 of file linkgraphjob.h.
References distance.
|
inline |
Get the flow on this leg.
Definition at line 396 of file linkgraphjob.h.
References flow.
Referenced by MultiCommodityFlow::CleanupPaths(), MCF1stPass::EliminateCycle(), MCF1stPass::EliminateCycles(), MCF1stPass::FindCycleFlow(), and FlowMapper::Run().
|
inline |
Get the free capacity of the path.
Definition at line 363 of file linkgraphjob.h.
References free_capacity.
Referenced by MCF1stPass::MCF1stPass(), and MCF2ndPass::MCF2ndPass().
|
inline |
Get the node this leg passes.
Definition at line 351 of file linkgraphjob.h.
References node.
Referenced by MultiCommodityFlow::CleanupPaths(), MCF1stPass::EliminateCycle(), MCF1stPass::EliminateCycles(), DistanceAnnotation::Comparator::operator()(), CapacityAnnotation::Comparator::operator()(), and FlowMapper::Run().
|
inline |
Get the number of "forked off" child legs of this one.
Definition at line 399 of file linkgraphjob.h.
References num_children.
Referenced by MultiCommodityFlow::CleanupPaths().
|
inline |
Get the overall origin of the path.
Definition at line 354 of file linkgraphjob.h.
References origin.
Referenced by MCF1stPass::EliminateCycles(), and FlowMapper::Run().
|
inline |
Get the parent leg of this one.
Definition at line 357 of file linkgraphjob.h.
References parent.
Referenced by MultiCommodityFlow::CleanupPaths(), and MCF1stPass::EliminateCycle().
|
inline |
Reduce the flow on this leg only by the specified amount.
Definition at line 390 of file linkgraphjob.h.
References flow.
Referenced by MCF1stPass::EliminateCycle(), and MCF1stPass::EliminateCycles().
Static instance of an invalid path.
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 346 of file linkgraphjob.h.
Referenced by MCF1stPass::EliminateCycles().
1.8.1.2