diff --git a/include/extractor/segment_data_container.hpp b/include/extractor/segment_data_container.hpp index ccb0d27a7b7..4a10ca8556d 100644 --- a/include/extractor/segment_data_container.hpp +++ b/include/extractor/segment_data_container.hpp @@ -65,8 +65,8 @@ template class SegmentDataContainerImpl auto GetForwardGeometry(const DirectionalGeometryID id) { - const auto begin = nodes.begin() + index.at(id); - const auto end = nodes.begin() + index.at(id + 1); + const auto begin = nodes.begin() + index[id]; + const auto end = nodes.begin() + index[id + 1]; return boost::make_iterator_range(begin, end); } @@ -78,56 +78,56 @@ template class SegmentDataContainerImpl auto GetForwardDurations(const DirectionalGeometryID id) { - const auto begin = fwd_durations.begin() + index.at(id) + 1; - const auto end = fwd_durations.begin() + index.at(id + 1); + const auto begin = fwd_durations.begin() + index[id] + 1; + const auto end = fwd_durations.begin() + index[id + 1]; return boost::make_iterator_range(begin, end); } auto GetReverseDurations(const DirectionalGeometryID id) { - const auto begin = rev_durations.begin() + index.at(id); - const auto end = rev_durations.begin() + index.at(id + 1) - 1; + const auto begin = rev_durations.begin() + index[id]; + const auto end = rev_durations.begin() + index[id + 1] - 1; return boost::adaptors::reverse(boost::make_iterator_range(begin, end)); } auto GetForwardWeights(const DirectionalGeometryID id) { - const auto begin = fwd_weights.begin() + index.at(id) + 1; - const auto end = fwd_weights.begin() + index.at(id + 1); + const auto begin = fwd_weights.begin() + index[id] + 1; + const auto end = fwd_weights.begin() + index[id + 1]; return boost::make_iterator_range(begin, end); } auto GetReverseWeights(const DirectionalGeometryID id) { - const auto begin = rev_weights.begin() + index.at(id); - const auto end = rev_weights.begin() + index.at(id + 1) - 1; + const auto begin = rev_weights.begin() + index[id]; + const auto end = rev_weights.begin() + index[id + 1] - 1; return boost::adaptors::reverse(boost::make_iterator_range(begin, end)); } auto GetForwardDatasources(const DirectionalGeometryID id) { - const auto begin = datasources.begin() + index.at(id) + 1; - const auto end = datasources.begin() + index.at(id + 1); + const auto begin = datasources.begin() + index[id] + 1; + const auto end = datasources.begin() + index[id + 1]; return boost::make_iterator_range(begin, end); } auto GetReverseDatasources(const DirectionalGeometryID id) { - const auto begin = datasources.begin() + index.at(id); - const auto end = datasources.begin() + index.at(id + 1) - 1; + const auto begin = datasources.begin() + index[id]; + const auto end = datasources.begin() + index[id + 1] - 1; return boost::adaptors::reverse(boost::make_iterator_range(begin, end)); } auto GetForwardGeometry(const DirectionalGeometryID id) const { - const auto begin = nodes.cbegin() + index.at(id); - const auto end = nodes.cbegin() + index.at(id + 1); + const auto begin = nodes.cbegin() + index[id]; + const auto end = nodes.cbegin() + index[id + 1]; return boost::make_iterator_range(begin, end); } @@ -139,48 +139,48 @@ template class SegmentDataContainerImpl auto GetForwardDurations(const DirectionalGeometryID id) const { - const auto begin = fwd_durations.cbegin() + index.at(id) + 1; - const auto end = fwd_durations.cbegin() + index.at(id + 1); + const auto begin = fwd_durations.cbegin() + index[id] + 1; + const auto end = fwd_durations.cbegin() + index[id + 1]; return boost::make_iterator_range(begin, end); } auto GetReverseDurations(const DirectionalGeometryID id) const { - const auto begin = rev_durations.cbegin() + index.at(id); - const auto end = rev_durations.cbegin() + index.at(id + 1) - 1; + const auto begin = rev_durations.cbegin() + index[id]; + const auto end = rev_durations.cbegin() + index[id + 1] - 1; return boost::adaptors::reverse(boost::make_iterator_range(begin, end)); } auto GetForwardWeights(const DirectionalGeometryID id) const { - const auto begin = fwd_weights.cbegin() + index.at(id) + 1; - const auto end = fwd_weights.cbegin() + index.at(id + 1); + const auto begin = fwd_weights.cbegin() + index[id] + 1; + const auto end = fwd_weights.cbegin() + index[id + 1]; return boost::make_iterator_range(begin, end); } auto GetReverseWeights(const DirectionalGeometryID id) const { - const auto begin = rev_weights.cbegin() + index.at(id); - const auto end = rev_weights.cbegin() + index.at(id + 1) - 1; + const auto begin = rev_weights.cbegin() + index[id]; + const auto end = rev_weights.cbegin() + index[id + 1] - 1; return boost::adaptors::reverse(boost::make_iterator_range(begin, end)); } auto GetForwardDatasources(const DirectionalGeometryID id) const { - const auto begin = datasources.cbegin() + index.at(id) + 1; - const auto end = datasources.cbegin() + index.at(id + 1); + const auto begin = datasources.cbegin() + index[id] + 1; + const auto end = datasources.cbegin() + index[id + 1]; return boost::make_iterator_range(begin, end); } auto GetReverseDatasources(const DirectionalGeometryID id) const { - const auto begin = datasources.cbegin() + index.at(id); - const auto end = datasources.cbegin() + index.at(id + 1) - 1; + const auto begin = datasources.cbegin() + index[id]; + const auto end = datasources.cbegin() + index[id + 1] - 1; return boost::adaptors::reverse(boost::make_iterator_range(begin, end)); } diff --git a/src/updater/updater.cpp b/src/updater/updater.cpp index 960647df593..f353798d92a 100644 --- a/src/updater/updater.cpp +++ b/src/updater/updater.cpp @@ -99,7 +99,7 @@ void checkWeightsConsistency( if (geometry_id.forward) { auto range = segment_data.GetForwardWeights(geometry_id.id); - EdgeWeight weight = std::accumulate(range.begin(), range.end(), 0); + EdgeWeight weight = std::accumulate(range.begin(), range.end(), EdgeWeight{0}); if (weight > edge.data.weight) { util::Log(logWARNING) << geometry_id.id << " vs " << edge.data.edge_id << ":" @@ -109,7 +109,7 @@ void checkWeightsConsistency( else { auto range = segment_data.GetReverseWeights(geometry_id.id); - EdgeWeight weight = std::accumulate(range.begin(), range.end(), 0); + EdgeWeight weight = std::accumulate(range.begin(), range.end(), EdgeWeight{0}); if (weight > edge.data.weight) { util::Log(logWARNING) << geometry_id.id << " vs " << edge.data.edge_id << ":" @@ -192,8 +192,7 @@ updateSegmentData(const UpdaterConfig &config, auto fwd_durations_range = segment_data.GetForwardDurations(geometry_id); auto fwd_datasources_range = segment_data.GetForwardDatasources(geometry_id); bool fwd_was_updated = false; - for (auto segment_offset = 0UL; segment_offset < fwd_weights_range.size(); - ++segment_offset) + for (const auto segment_offset : util::irange(0, fwd_weights_range.size())) { auto u = internal_to_external_node_map[nodes_range[segment_offset]].node_id; auto v = internal_to_external_node_map[nodes_range[segment_offset + 1]].node_id; @@ -227,8 +226,7 @@ updateSegmentData(const UpdaterConfig &config, boost::adaptors::reverse(segment_data.GetReverseDatasources(geometry_id)); bool rev_was_updated = false; - for (auto segment_offset = 0UL; segment_offset < fwd_weights_range.size(); - ++segment_offset) + for (const auto segment_offset : util::irange(0, rev_weights_range.size())) { auto u = internal_to_external_node_map[nodes_range[segment_offset]].node_id; auto v = internal_to_external_node_map[nodes_range[segment_offset + 1]].node_id; @@ -284,9 +282,8 @@ updateSegmentData(const UpdaterConfig &config, { BOOST_ASSERT(segment_data_backup); - for (DirectionalGeometryID geometry_id = 0; - geometry_id < segment_data.GetNumberOfGeometries(); - geometry_id++) + for (const auto geometry_id : + util::irange(0, segment_data.GetNumberOfGeometries())) { auto nodes_range = segment_data.GetForwardGeometry(geometry_id); @@ -299,8 +296,8 @@ updateSegmentData(const UpdaterConfig &config, auto old_rev_durations_range = boost::adaptors::reverse(segment_data_backup->GetReverseDurations(geometry_id)); - for (auto segment_offset = 0UL; segment_offset < new_fwd_durations_range.size(); - ++segment_offset) + for (const auto segment_offset : + util::irange(0, new_fwd_durations_range.size())) { if (new_fwd_datasources_range[segment_offset] == LUA_SOURCE) continue; @@ -321,8 +318,8 @@ updateSegmentData(const UpdaterConfig &config, } } - for (auto segment_offset = 0UL; segment_offset < new_rev_durations_range.size(); - ++segment_offset) + for (const auto segment_offset : + util::irange(0, new_rev_durations_range.size())) { if (new_rev_datasources_range[segment_offset] == LUA_SOURCE) continue; @@ -352,14 +349,16 @@ void saveDatasourcesNames(const UpdaterConfig &config) { extractor::Datasources sources; DatasourceID source = 0; - sources.SetSourceName(source++, "lua profile"); + sources.SetSourceName(source, "lua profile"); + source++; // Only write the filename, without path or extension. // This prevents information leakage, and keeps names short // for rendering in the debug tiles. for (auto const &name : config.segment_speed_lookup_paths) { - sources.SetSourceName(source++, boost::filesystem::path(name).stem().string()); + sources.SetSourceName(source, boost::filesystem::path(name).stem().string()); + source++; } extractor::io::write(config.datasource_names_path, sources); @@ -428,7 +427,7 @@ Updater::LoadAndUpdateEdgeExpandedGraph(std::vector &e { TIMER_START(load_edges); - auto max_edge_id = 0; + EdgeID max_edge_id = 0; { storage::io::FileReader reader(config.edge_based_graph_path, @@ -459,11 +458,11 @@ Updater::LoadAndUpdateEdgeExpandedGraph(std::vector &e std::vector turn_duration_penalties; if (update_edge_weights || update_turn_penalties) { - const auto load_segment_data = [&]() { + const auto load_segment_data = [&] { extractor::io::read(config.geometry_path, segment_data); }; - const auto load_edge_data = [&]() { + const auto load_edge_data = [&] { storage::io::FileReader edges_input_file(config.edge_data_path, storage::io::FileReader::HasNoFingerprint); edges_input_file.DeserializeVector(edge_data); @@ -517,11 +516,13 @@ Updater::LoadAndUpdateEdgeExpandedGraph(std::vector &e turn_penalty_lookup, turn_weight_penalties, turn_duration_penalties); + const auto offset = updated_segments.size(); + updated_segments.resize(offset + updated_turn_penalties.size()); // we need to re-compute all edges that have updated turn penalties. // this marks it for re-computation std::transform(updated_turn_penalties.begin(), updated_turn_penalties.end(), - std::back_inserter(updated_segments), + updated_segments.begin() + offset, [&edge_data](const std::uint64_t edge_index) { return edge_data[edge_index].via_geometry; }); @@ -551,7 +552,7 @@ Updater::LoadAndUpdateEdgeExpandedGraph(std::vector &e new_weight += weight; } const auto durations = segment_data.GetForwardDurations(geometry_id.id); - new_duration = std::accumulate(durations.begin(), durations.end(), 0); + new_duration = std::accumulate(durations.begin(), durations.end(), EdgeWeight{0}); } else { @@ -566,14 +567,14 @@ Updater::LoadAndUpdateEdgeExpandedGraph(std::vector &e new_weight += weight; } const auto durations = segment_data.GetReverseDurations(geometry_id.id); - new_duration = std::accumulate(durations.begin(), durations.end(), 0); + new_duration = std::accumulate(durations.begin(), durations.end(), EdgeWeight{0}); } return std::make_tuple(new_weight, new_duration); }; std::vector accumulated_segment_data(updated_segments.size()); tbb::parallel_for(tbb::blocked_range(0, updated_segments.size()), - [&](const tbb::blocked_range &range) { + [&](const auto &range) { for (auto index = range.begin(); index < range.end(); ++index) { accumulated_segment_data[index] = @@ -647,7 +648,7 @@ Updater::LoadAndUpdateEdgeExpandedGraph(std::vector &e if (updated_segments.size() > 0) { tbb::parallel_for(tbb::blocked_range(0, edge_based_edge_list.size()), - [&](const tbb::blocked_range &range) { + [&](const auto &range) { for (auto index = range.begin(); index < range.end(); ++index) { update_edge(edge_based_edge_list[index]);