summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/linkgraph/linkgraph_gui.cpp2
-rw-r--r--src/station_base.h7
-rw-r--r--src/station_cmd.cpp46
3 files changed, 48 insertions, 7 deletions
diff --git a/src/linkgraph/linkgraph_gui.cpp b/src/linkgraph/linkgraph_gui.cpp
index 579bf9c46..1fe34fe79 100644
--- a/src/linkgraph/linkgraph_gui.cpp
+++ b/src/linkgraph/linkgraph_gui.cpp
@@ -152,7 +152,7 @@ void LinkGraphOverlay::AddLinks(const Station *from, const Station *to)
ConstEdge edge = lg[ge.node][to->goods[c].node];
if (edge.Capacity() > 0) {
this->AddStats(lg.Monthly(edge.Capacity()), lg.Monthly(edge.Usage()),
- ge.GetSumFlowVia(to->index), from->owner == OWNER_NONE || to->owner == OWNER_NONE,
+ ge.flows.GetFlowVia(to->index), from->owner == OWNER_NONE || to->owner == OWNER_NONE,
this->cached_links[from->index][to->index]);
}
}
diff --git a/src/station_base.h b/src/station_base.h
index 6d6522840..b832a3c19 100644
--- a/src/station_base.h
+++ b/src/station_base.h
@@ -149,6 +149,11 @@ private:
/** Flow descriptions by origin stations. */
class FlowStatMap : public std::map<StationID, FlowStat> {
public:
+ uint GetFlow() const;
+ uint GetFlowVia(StationID via) const;
+ uint GetFlowFrom(StationID from) const;
+ uint GetFlowFromVia(StationID from, StationID via) const;
+
void AddFlow(StationID origin, StationID via, uint amount);
void PassOnFlow(StationID origin, StationID via, uint amount);
StationIDStack DeleteFlows(StationID via);
@@ -268,8 +273,6 @@ struct GoodsEntry {
return HasBit(this->status, GES_RATING);
}
- uint GetSumFlowVia(StationID via) const;
-
/**
* Get the best next hop for a cargo packet from station source.
* @param source Source of the packet.
diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp
index eb3e5de6a..0d8236ddc 100644
--- a/src/station_cmd.cpp
+++ b/src/station_cmd.cpp
@@ -4457,19 +4457,57 @@ void FlowStatMap::ReleaseFlows(StationID via)
}
/**
- * Get the sum of flows via a specific station from this GoodsEntry.
+ * Get the sum of all flows from this FlowStatMap.
+ * @return sum of all flows.
+ */
+uint FlowStatMap::GetFlow() const
+{
+ uint ret = 0;
+ for (FlowStatMap::const_iterator i = this->begin(); i != this->end(); ++i) {
+ ret += (--(i->second.GetShares()->end()))->first;
+ }
+ return ret;
+}
+
+/**
+ * Get the sum of flows via a specific station from this FlowStatMap.
* @param via Remote station to look for.
- * @return a FlowStat with all flows for 'via' added up.
+ * @return all flows for 'via' added up.
*/
-uint GoodsEntry::GetSumFlowVia(StationID via) const
+uint FlowStatMap::GetFlowVia(StationID via) const
{
uint ret = 0;
- for (FlowStatMap::const_iterator i = this->flows.begin(); i != this->flows.end(); ++i) {
+ for (FlowStatMap::const_iterator i = this->begin(); i != this->end(); ++i) {
ret += i->second.GetShare(via);
}
return ret;
}
+/**
+ * Get the sum of flows from a specific station from this FlowStatMap.
+ * @param from Origin station to look for.
+ * @return all flows from 'from' added up.
+ */
+uint FlowStatMap::GetFlowFrom(StationID from) const
+{
+ FlowStatMap::const_iterator i = this->find(from);
+ if (i == this->end()) return 0;
+ return (--(i->second.GetShares()->end()))->first;
+}
+
+/**
+ * Get the flow from a specific station via a specific other station.
+ * @param from Origin station to look for.
+ * @param via Remote station to look for.
+ * @return flow share originating at 'from' and going to 'via'.
+ */
+uint FlowStatMap::GetFlowFromVia(StationID from, StationID via) const
+{
+ FlowStatMap::const_iterator i = this->find(from);
+ if (i == this->end()) return 0;
+ return i->second.GetShare(via);
+}
+
extern const TileTypeProcs _tile_type_station_procs = {
DrawTile_Station, // draw_tile_proc
GetSlopePixelZ_Station, // get_slope_z_proc