From f5e9c7df077a02782d5cd7be10296510041f1776 Mon Sep 17 00:00:00 2001 From: Michael Krasnyk Date: Wed, 22 Feb 2017 14:15:07 +0100 Subject: [PATCH] adjust extractor scc to new StaticGraph --- include/util/static_graph.hpp | 11 ++++++----- src/extractor/extractor.cpp | 34 +++++++--------------------------- 2 files changed, 13 insertions(+), 32 deletions(-) diff --git a/include/util/static_graph.hpp b/include/util/static_graph.hpp index 8dee24a23..9a0120844 100644 --- a/include/util/static_graph.hpp +++ b/include/util/static_graph.hpp @@ -58,11 +58,12 @@ template <> struct SortableEdgeWithData bool operator<(const SortableEdgeWithData &right) const { - if (source != right.source) - { - return source < right.source; - } - return target < right.target; + return std::tie(source, target) < std::tie(right.source, right.target); + } + + bool operator==(const SortableEdgeWithData &right) const + { + return std::tie(source, target) == std::tie(right.source, right.target); } }; diff --git a/src/extractor/extractor.cpp b/src/extractor/extractor.cpp index 78b969fdc..ddf8be4de 100644 --- a/src/extractor/extractor.cpp +++ b/src/extractor/extractor.cpp @@ -326,27 +326,8 @@ void Extractor::FindComponents(unsigned max_edge_id, const util::DeallocatingVector &input_edge_list, std::vector &input_nodes) const { - struct UncontractedEdgeData - { - EdgeWeight duration; - }; - struct InputEdge - { - unsigned source; - unsigned target; - UncontractedEdgeData data; - - bool operator<(const InputEdge &rhs) const - { - return source < rhs.source || (source == rhs.source && target < rhs.target); - } - - bool operator==(const InputEdge &rhs) const - { - return source == rhs.source && target == rhs.target; - } - }; - using UncontractedGraph = util::StaticGraph; + using InputEdge = util::static_graph_details::SortableEdgeWithData; + using UncontractedGraph = util::StaticGraph; std::vector edges; edges.reserve(input_edge_list.size() * 2); @@ -358,12 +339,12 @@ void Extractor::FindComponents(unsigned max_edge_id, BOOST_ASSERT(edge.target <= max_edge_id); if (edge.forward) { - edges.push_back({edge.source, edge.target, {edge.duration}}); + edges.push_back({edge.source, edge.target}); } if (edge.backward) { - edges.push_back({edge.target, edge.source, {edge.duration}}); + edges.push_back({edge.target, edge.source}); } } @@ -374,14 +355,13 @@ void Extractor::FindComponents(unsigned max_edge_id, { BOOST_ASSERT(node.forward_segment_id.id <= max_edge_id); BOOST_ASSERT(node.reverse_segment_id.id <= max_edge_id); - edges.push_back({node.forward_segment_id.id, node.reverse_segment_id.id, {}}); - edges.push_back({node.reverse_segment_id.id, node.forward_segment_id.id, {}}); + edges.push_back({node.forward_segment_id.id, node.reverse_segment_id.id}); + edges.push_back({node.reverse_segment_id.id, node.forward_segment_id.id}); } } tbb::parallel_sort(edges.begin(), edges.end()); - auto new_end = std::unique(edges.begin(), edges.end()); - edges.resize(new_end - edges.begin()); + edges.erase(std::unique(edges.begin(), edges.end()), edges.end()); auto uncontracted_graph = UncontractedGraph(max_edge_id + 1, edges);