flowmapper.cpp
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00012 #include "../stdafx.h"
00013 #include "flowmapper.h"
00014
00019 void FlowMapper::Run(LinkGraphComponent *component)
00020 {
00021 for (NodeID node_id = 0; node_id < component->GetSize(); ++node_id) {
00022 Node &prev_node = component->GetNode(node_id);
00023 StationID prev = prev_node.station;
00024 PathSet &paths = prev_node.paths;
00025 for (PathSet::iterator i = paths.begin(); i != paths.end(); ++i) {
00026 Path *path = *i;
00027 uint flow = path->GetFlow();
00028 if (flow == 0) continue;
00029 Node &node = component->GetNode(path->GetNode());
00030 StationID via = node.station;
00031 assert(prev != via);
00032 StationID origin = component->GetNode(path->GetOrigin()).station;
00033 assert(via != origin);
00034
00035 node.flows[origin][via] += flow;
00036
00037
00038
00039 prev_node.flows[origin][via] += flow;
00040
00041 assert(node.flows[origin][prev] == 0);
00042 if (prev != origin) {
00043 prev_node.flows[origin][prev] -= flow;
00044 }
00045 }
00046 }
00047 for (NodeID node_id = 0; node_id < component->GetSize(); ++node_id) {
00048 PathSet &paths = component->GetNode(node_id).paths;
00049 for (PathSet::iterator i = paths.begin(); i != paths.end(); ++i) {
00050 delete *i;
00051 }
00052 paths.clear();
00053 }
00054 }