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 prev_node.flows[origin][via] += flow;
00039
00040 assert(node.flows[origin][prev] == 0);
00041 if (prev != origin) {
00042 prev_node.flows[origin][prev] -= flow;
00043 }
00044 }
00045 }
00046 for (NodeID node_id = 0; node_id < component->GetSize(); ++node_id) {
00047 PathSet &paths = component->GetNode(node_id).paths;
00048 for (PathSet::iterator i = paths.begin(); i != paths.end(); ++i) {
00049 delete *i;
00050 }
00051 paths.clear();
00052 }
00053 }