Skip to content

Commit

Permalink
Address @daniel-j-h PR commtents
Browse files Browse the repository at this point in the history
  • Loading branch information
TheMarex authored and Patrick Niklaus committed Mar 17, 2017
1 parent 4475772 commit bf6698f
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 51 deletions.
56 changes: 28 additions & 28 deletions include/extractor/segment_data_container.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -65,8 +65,8 @@ template <bool UseShareMemory> 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);
}
Expand All @@ -78,56 +78,56 @@ template <bool UseShareMemory> 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);
}
Expand All @@ -139,48 +139,48 @@ template <bool UseShareMemory> 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));
}
Expand Down
47 changes: 24 additions & 23 deletions src/updater/updater.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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 << ":"
Expand All @@ -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 << ":"
Expand Down Expand Up @@ -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<std::size_t>(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;
Expand Down Expand Up @@ -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<std::size_t>(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;
Expand Down Expand Up @@ -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<DirectionalGeometryID>(0, segment_data.GetNumberOfGeometries()))
{
auto nodes_range = segment_data.GetForwardGeometry(geometry_id);

Expand All @@ -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<std::size_t>(0, new_fwd_durations_range.size()))
{
if (new_fwd_datasources_range[segment_offset] == LUA_SOURCE)
continue;
Expand All @@ -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<std::size_t>(0, new_rev_durations_range.size()))
{
if (new_rev_datasources_range[segment_offset] == LUA_SOURCE)
continue;
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -428,7 +427,7 @@ Updater::LoadAndUpdateEdgeExpandedGraph(std::vector<extractor::EdgeBasedEdge> &e
{
TIMER_START(load_edges);

auto max_edge_id = 0;
EdgeID max_edge_id = 0;

{
storage::io::FileReader reader(config.edge_based_graph_path,
Expand Down Expand Up @@ -459,11 +458,11 @@ Updater::LoadAndUpdateEdgeExpandedGraph(std::vector<extractor::EdgeBasedEdge> &e
std::vector<TurnPenalty> 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);
Expand Down Expand Up @@ -517,11 +516,13 @@ Updater::LoadAndUpdateEdgeExpandedGraph(std::vector<extractor::EdgeBasedEdge> &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;
});
Expand Down Expand Up @@ -551,7 +552,7 @@ Updater::LoadAndUpdateEdgeExpandedGraph(std::vector<extractor::EdgeBasedEdge> &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
{
Expand All @@ -566,14 +567,14 @@ Updater::LoadAndUpdateEdgeExpandedGraph(std::vector<extractor::EdgeBasedEdge> &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<WeightAndDuration> accumulated_segment_data(updated_segments.size());
tbb::parallel_for(tbb::blocked_range<std::size_t>(0, updated_segments.size()),
[&](const tbb::blocked_range<std::size_t> &range) {
[&](const auto &range) {
for (auto index = range.begin(); index < range.end(); ++index)
{
accumulated_segment_data[index] =
Expand Down Expand Up @@ -647,7 +648,7 @@ Updater::LoadAndUpdateEdgeExpandedGraph(std::vector<extractor::EdgeBasedEdge> &e
if (updated_segments.size() > 0)
{
tbb::parallel_for(tbb::blocked_range<std::size_t>(0, edge_based_edge_list.size()),
[&](const tbb::blocked_range<std::size_t> &range) {
[&](const auto &range) {
for (auto index = range.begin(); index < range.end(); ++index)
{
update_edge(edge_based_edge_list[index]);
Expand Down

0 comments on commit bf6698f

Please sign in to comment.