adjust extractor scc to new StaticGraph

This commit is contained in:
Michael Krasnyk 2017-02-22 14:15:07 +01:00 committed by Patrick Niklaus
parent 1541d32a42
commit f5e9c7df07
2 changed files with 13 additions and 32 deletions

View File

@ -58,11 +58,12 @@ template <> struct SortableEdgeWithData<void>
bool operator<(const SortableEdgeWithData &right) const bool operator<(const SortableEdgeWithData &right) const
{ {
if (source != right.source) return std::tie(source, target) < std::tie(right.source, right.target);
{
return source < right.source;
} }
return target < right.target;
bool operator==(const SortableEdgeWithData &right) const
{
return std::tie(source, target) == std::tie(right.source, right.target);
} }
}; };

View File

@ -326,27 +326,8 @@ void Extractor::FindComponents(unsigned max_edge_id,
const util::DeallocatingVector<EdgeBasedEdge> &input_edge_list, const util::DeallocatingVector<EdgeBasedEdge> &input_edge_list,
std::vector<EdgeBasedNode> &input_nodes) const std::vector<EdgeBasedNode> &input_nodes) const
{ {
struct UncontractedEdgeData using InputEdge = util::static_graph_details::SortableEdgeWithData<void>;
{ using UncontractedGraph = util::StaticGraph<void>;
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<UncontractedEdgeData>;
std::vector<InputEdge> edges; std::vector<InputEdge> edges;
edges.reserve(input_edge_list.size() * 2); 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); BOOST_ASSERT(edge.target <= max_edge_id);
if (edge.forward) if (edge.forward)
{ {
edges.push_back({edge.source, edge.target, {edge.duration}}); edges.push_back({edge.source, edge.target});
} }
if (edge.backward) 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.forward_segment_id.id <= max_edge_id);
BOOST_ASSERT(node.reverse_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.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.reverse_segment_id.id, node.forward_segment_id.id});
} }
} }
tbb::parallel_sort(edges.begin(), edges.end()); tbb::parallel_sort(edges.begin(), edges.end());
auto new_end = std::unique(edges.begin(), edges.end()); edges.erase(std::unique(edges.begin(), edges.end()), edges.end());
edges.resize(new_end - edges.begin());
auto uncontracted_graph = UncontractedGraph(max_edge_id + 1, edges); auto uncontracted_graph = UncontractedGraph(max_edge_id + 1, edges);