MCPcopy Create free account
hub / github.com/Project-OSRM/osrm-backend / graphToEdges

Function graphToEdges

include/partitioner/edge_based_graph_reader.hpp:143–191  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

141}
142
143inline std::vector<extractor::EdgeBasedEdge>
144graphToEdges(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
193inline DynamicEdgeBasedGraph LoadEdgeBasedGraph(const std::filesystem::path &path)
194{

Callers 1

RunMethod · 0.85

Calls 5

GetNumberOfNodesMethod · 0.45
beginMethod · 0.45
endMethod · 0.45
GetAdjacentEdgeRangeMethod · 0.45
GetTargetMethod · 0.45

Tested by

no test coverage detected