Use Set instead of Vec in transitive_relation
This commit is contained in:
parent
a9d1cafa87
commit
d45f025c90
@ -1,5 +1,5 @@
|
||||
use crate::frozen::Frozen;
|
||||
use crate::fx::FxIndexSet;
|
||||
use crate::fx::{FxHashSet, FxIndexSet};
|
||||
use rustc_index::bit_set::BitMatrix;
|
||||
use std::fmt::Debug;
|
||||
use std::hash::Hash;
|
||||
@ -16,7 +16,7 @@ pub struct TransitiveRelationBuilder<T> {
|
||||
|
||||
// List of base edges in the graph. Require to compute transitive
|
||||
// closure.
|
||||
edges: Vec<Edge>,
|
||||
edges: FxHashSet<Edge>,
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
@ -52,10 +52,10 @@ fn default() -> Self {
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Debug)]
|
||||
#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Debug, Hash)]
|
||||
struct Index(usize);
|
||||
|
||||
#[derive(Clone, PartialEq, Eq, Debug)]
|
||||
#[derive(Clone, PartialEq, Eq, Debug, Hash)]
|
||||
struct Edge {
|
||||
source: Index,
|
||||
target: Index,
|
||||
@ -99,9 +99,7 @@ pub fn add(&mut self, a: T, b: T) {
|
||||
let a = self.add_index(a);
|
||||
let b = self.add_index(b);
|
||||
let edge = Edge { source: a, target: b };
|
||||
if !self.edges.contains(&edge) {
|
||||
self.edges.push(edge);
|
||||
}
|
||||
self.edges.insert(edge);
|
||||
}
|
||||
|
||||
/// Compute the transitive closure derived from the edges, and converted to
|
||||
|
Loading…
Reference in New Issue
Block a user