1
#include "mjolnir/node_expander.h"
6
node_bundle collect_node_edges(const sequence<Node>::iterator& node_itr,
8
sequence<Edge>& edges) {
9
//copy out the first nodes attributes (as they are the correctly merged one)
11
node_bundle bundle(*itr);
13
//for each node with the same id (duplicate)
14
for(; itr != nodes.end() && (node = *itr).node.osmid == bundle.node.osmid; ++itr) {
17
auto edge_itr = edges[node.start_of];
18
auto edge = *edge_itr;
19
// Set driveforward - this edge is traversed in forward direction
20
edge.attributes.driveforward = edge.attributes.driveableforward;
21
bundle.node_edges.emplace(std::make_pair(edge, node.start_of));
22
bundle.node.attributes_.link_edge = bundle.node.attributes_.link_edge || edge.attributes.link;
23
bundle.node.attributes_.ferry_edge = bundle.node.attributes_.ferry_edge || edge.attributes.driveable_ferry;
24
bundle.node.attributes_.shortlink |= edge.attributes.shortlink;
25
// Do not count non-driveable (e.g. emergency service roads) as a
26
// non-link edge or non-ferry edge
27
if (edge.attributes.driveableforward || edge.attributes.driveablereverse) {
28
bundle.node.attributes_.non_link_edge = bundle.node.attributes_.non_link_edge || !edge.attributes.link;
29
bundle.node.attributes_.non_ferry_edge = bundle.node.attributes_.non_ferry_edge || !edge.attributes.driveable_ferry;
31
if (edge.attributes.link) {
34
bundle.non_link_count++;
36
if (edge.attributes.driveforward) {
37
bundle.driveforward_count++;
41
auto edge_itr = edges[node.end_of];
42
auto edge = *edge_itr;
43
// Set driveforward - this edge is traversed in reverse direction
44
edge.attributes.driveforward = edge.attributes.driveablereverse;
45
bundle.node_edges.emplace(std::make_pair(edge, node.end_of));
46
bundle.node.attributes_.link_edge = bundle.node.attributes_.link_edge || edge.attributes.link;
47
bundle.node.attributes_.ferry_edge = bundle.node.attributes_.ferry_edge || edge.attributes.driveable_ferry;
48
bundle.node.attributes_.shortlink |= edge.attributes.shortlink;
49
// Do not count non-driveable (e.g. emergency service roads) as a non-link edge
50
if (edge.attributes.driveableforward || edge.attributes.driveablereverse) {
51
bundle.node.attributes_.non_link_edge = bundle.node.attributes_.non_link_edge || !edge.attributes.link;
52
bundle.node.attributes_.non_ferry_edge = bundle.node.attributes_.non_ferry_edge || !edge.attributes.driveable_ferry;
54
if (edge.attributes.link) {
57
bundle.non_link_count++;
59
if (edge.attributes.driveforward) {
60
bundle.driveforward_count++;