Don't copy query nodes

This commit is contained in:
Patrick Niklaus 2017-03-13 23:51:28 +00:00 committed by Patrick Niklaus
parent 23c74af2b5
commit 8f9b4fcdbb

View File

@ -209,25 +209,17 @@ void updaterSegmentData(const UpdaterConfig &config,
auto range = tbb::blocked_range<DirectionalGeometryID>(0, segment_data.GetNumberOfGeometries()); auto range = tbb::blocked_range<DirectionalGeometryID>(0, segment_data.GetNumberOfGeometries());
tbb::parallel_for(range, [&](const auto &range) { tbb::parallel_for(range, [&](const auto &range) {
auto &counters = segment_speeds_counters.local(); auto &counters = segment_speeds_counters.local();
std::vector<extractor::QueryNode> query_nodes;
std::vector<double> segment_lengths; std::vector<double> segment_lengths;
for (auto geometry_id = range.begin(); geometry_id < range.end(); geometry_id++) for (auto geometry_id = range.begin(); geometry_id < range.end(); geometry_id++)
{ {
query_nodes.clear();
segment_lengths.clear(); segment_lengths.clear();
auto nodes_range = segment_data.GetForwardGeometry(geometry_id); auto nodes_range = segment_data.GetForwardGeometry(geometry_id);
query_nodes.reserve(nodes_range.size());
for (const auto node : nodes_range)
{
query_nodes.push_back(internal_to_external_node_map[node]);
}
segment_lengths.reserve(nodes_range.size() + 1); segment_lengths.reserve(nodes_range.size() + 1);
util::for_each_pair(query_nodes, [&](const auto &u, const auto &v) { util::for_each_pair(nodes_range, [&](const auto &u, const auto &v) {
segment_lengths.push_back(util::coordinate_calculation::greatCircleDistance( segment_lengths.push_back(util::coordinate_calculation::greatCircleDistance(
util::Coordinate{u.lon, u.lat}, util::Coordinate{v.lon, v.lat})); util::Coordinate{internal_to_external_node_map[u]}, util::Coordinate{internal_to_external_node_map[v]}));
}); });
auto fwd_weights_range = segment_data.GetForwardWeights(geometry_id); auto fwd_weights_range = segment_data.GetForwardWeights(geometry_id);
@ -236,8 +228,8 @@ void updaterSegmentData(const UpdaterConfig &config,
for (auto segment_offset = 0UL; segment_offset < fwd_weights_range.size(); for (auto segment_offset = 0UL; segment_offset < fwd_weights_range.size();
++segment_offset) ++segment_offset)
{ {
auto u = query_nodes[segment_offset].node_id; auto u = internal_to_external_node_map[nodes_range[segment_offset]].node_id;
auto v = query_nodes[segment_offset + 1].node_id; auto v = internal_to_external_node_map[nodes_range[segment_offset + 1]].node_id;
if (auto value = segment_speed_lookup({u, v})) if (auto value = segment_speed_lookup({u, v}))
{ {
EdgeWeight new_segment_weight, new_segment_duration; EdgeWeight new_segment_weight, new_segment_duration;
@ -270,8 +262,8 @@ void updaterSegmentData(const UpdaterConfig &config,
for (auto segment_offset = 0UL; segment_offset < fwd_weights_range.size(); for (auto segment_offset = 0UL; segment_offset < fwd_weights_range.size();
++segment_offset) ++segment_offset)
{ {
auto u = query_nodes[segment_offset].node_id; auto u = internal_to_external_node_map[nodes_range[segment_offset]].node_id;
auto v = query_nodes[segment_offset + 1].node_id; auto v = internal_to_external_node_map[nodes_range[segment_offset + 1]].node_id;
if (auto value = segment_speed_lookup({v, u})) if (auto value = segment_speed_lookup({v, u}))
{ {
EdgeWeight new_segment_weight, new_segment_duration; EdgeWeight new_segment_weight, new_segment_duration;