adjust extractor scc to new StaticGraph
This commit is contained in:
parent
1541d32a42
commit
f5e9c7df07
@ -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);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -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);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user