| 141 | } |
| 142 | |
| 143 | inline std::vector<extractor::EdgeBasedEdge> |
| 144 | graphToEdges(const DynamicEdgeBasedGraph &edge_based_graph) |
| 145 | { |
| 146 | auto range = tbb::blocked_range<NodeID>(0, edge_based_graph.GetNumberOfNodes()); |
| 147 | auto max_turn_id = tbb::parallel_reduce( |
| 148 | range, |
| 149 | NodeID{0}, |
| 150 | [&edge_based_graph](const auto range, NodeID initial) |
| 151 | { |
| 152 | NodeID max_turn_id = initial; |
| 153 | for (auto node = range.begin(); node < range.end(); ++node) |
| 154 | { |
| 155 | for (auto edge : edge_based_graph.GetAdjacentEdgeRange(node)) |
| 156 | { |
| 157 | const auto &data = edge_based_graph.GetEdgeData(edge); |
| 158 | max_turn_id = std::max(max_turn_id, data.turn_id); |
| 159 | } |
| 160 | } |
| 161 | return max_turn_id; |
| 162 | }, |
| 163 | [](const NodeID lhs, const NodeID rhs) { return std::max(lhs, rhs); }); |
| 164 | |
| 165 | std::vector<extractor::EdgeBasedEdge> edges(max_turn_id + 1); |
| 166 | tbb::parallel_for(range, |
| 167 | [&](const auto range) |
| 168 | { |
| 169 | for (auto node = range.begin(); node < range.end(); ++node) |
| 170 | { |
| 171 | for (auto edge : edge_based_graph.GetAdjacentEdgeRange(node)) |
| 172 | { |
| 173 | const auto &data = edge_based_graph.GetEdgeData(edge); |
| 174 | // we only need to save the forward edges, since the read method |
| 175 | // will convert from forward to bi-directional edges again |
| 176 | if (data.forward) |
| 177 | { |
| 178 | auto target = edge_based_graph.GetTarget(edge); |
| 179 | BOOST_ASSERT(data.turn_id <= max_turn_id); |
| 180 | edges[data.turn_id] = |
| 181 | extractor::EdgeBasedEdge{node, target, data}; |
| 182 | // only save the forward edge |
| 183 | edges[data.turn_id].data.forward = true; |
| 184 | edges[data.turn_id].data.backward = false; |
| 185 | } |
| 186 | } |
| 187 | } |
| 188 | }); |
| 189 | |
| 190 | return edges; |
| 191 | } |
| 192 | |
| 193 | inline DynamicEdgeBasedGraph LoadEdgeBasedGraph(const std::filesystem::path &path) |
| 194 | { |
no test coverage detected