rustc VecGraph: require the index type to implement Ord
This commit is contained in:
@@ -1,3 +1,5 @@
|
||||
use std::cmp::Ord;
|
||||
|
||||
use crate::graph::{DirectedGraph, GraphSuccessors, WithNumEdges, WithNumNodes, WithSuccessors};
|
||||
use rustc_index::vec::{Idx, IndexVec};
|
||||
|
||||
@@ -17,10 +19,10 @@ pub struct VecGraph<N: Idx> {
|
||||
edge_targets: Vec<N>,
|
||||
}
|
||||
|
||||
impl<N: Idx> VecGraph<N> {
|
||||
impl<N: Idx + Ord> VecGraph<N> {
|
||||
pub fn new(num_nodes: usize, mut edge_pairs: Vec<(N, N)>) -> Self {
|
||||
// Sort the edges by the source -- this is important.
|
||||
edge_pairs.sort_by_key(|&edge_pairs| (edge_pairs.0.index(), edge_pairs.1.index()));
|
||||
edge_pairs.sort();
|
||||
|
||||
let num_edges = edge_pairs.len();
|
||||
|
||||
@@ -100,7 +102,7 @@ impl<'graph, N: Idx> GraphSuccessors<'graph> for VecGraph<N> {
|
||||
type Iter = std::iter::Cloned<std::slice::Iter<'graph, N>>;
|
||||
}
|
||||
|
||||
impl<N: Idx> WithSuccessors for VecGraph<N> {
|
||||
impl<N: Idx + Ord> WithSuccessors for VecGraph<N> {
|
||||
fn successors(&self, node: N) -> <Self as GraphSuccessors<'_>>::Iter {
|
||||
self.successors(node).iter().cloned()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user