Changeset - r21748:d01bfc2964c5
[Not reviewed]
master
0 3 0
fonsinchen - 10 years ago 2014-09-21 16:19:52
fonsinchen@openttd.org
(svn r26891) -Codechange: Add methods to retrieve flows from a FlowStatMap
3 files changed with 49 insertions and 8 deletions:
0 comments (0 inline, 0 general)
src/linkgraph/linkgraph_gui.cpp
Show inline comments
 
@@ -152,7 +152,7 @@ void LinkGraphOverlay::AddLinks(const St
 
		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]);
 
		}
 
	}
src/station_base.h
Show inline comments
 
@@ -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.
src/station_cmd.cpp
Show inline comments
 
@@ -4457,19 +4457,57 @@ void FlowStatMap::ReleaseFlows(StationID
 
}
 

	
 
/**
 
 * Get the sum of flows via a specific station from this GoodsEntry.
 
 * @param via Remote station to look for.
 
 * @return a FlowStat with all flows for 'via' added up.
 
 * Get the sum of all flows from this FlowStatMap.
 
 * @return sum of all flows.
 
 */
 
uint GoodsEntry::GetSumFlowVia(StationID via) const
 
uint FlowStatMap::GetFlow() 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.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 all flows for 'via' added up.
 
 */
 
uint FlowStatMap::GetFlowVia(StationID via) const
 
{
 
	uint ret = 0;
 
	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
0 comments (0 inline, 0 general)