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