Use Set instead of Vec in transitive_relation

This commit is contained in:
nils 2022-10-18 22:13:26 +02:00
parent a9d1cafa87
commit d45f025c90
No known key found for this signature in database

View File

@ -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