mv compiler to compiler/
This commit is contained in:
parent
db534b3ac2
commit
9e5f7d5631
1686 changed files with 941 additions and 1051 deletions
77
compiler/rustc_data_structures/src/stable_set.rs
Normal file
77
compiler/rustc_data_structures/src/stable_set.rs
Normal file
|
@ -0,0 +1,77 @@
|
|||
pub use rustc_hash::FxHashSet;
|
||||
use std::borrow::Borrow;
|
||||
use std::fmt;
|
||||
use std::hash::Hash;
|
||||
|
||||
/// A deterministic wrapper around FxHashSet that does not provide iteration support.
|
||||
///
|
||||
/// It supports insert, remove, get functions from FxHashSet.
|
||||
/// It also allows to convert hashset to a sorted vector with the method `into_sorted_vector()`.
|
||||
#[derive(Clone)]
|
||||
pub struct StableSet<T> {
|
||||
base: FxHashSet<T>,
|
||||
}
|
||||
|
||||
impl<T> Default for StableSet<T>
|
||||
where
|
||||
T: Eq + Hash,
|
||||
{
|
||||
fn default() -> StableSet<T> {
|
||||
StableSet::new()
|
||||
}
|
||||
}
|
||||
|
||||
impl<T> fmt::Debug for StableSet<T>
|
||||
where
|
||||
T: Eq + Hash + fmt::Debug,
|
||||
{
|
||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
write!(f, "{:?}", self.base)
|
||||
}
|
||||
}
|
||||
|
||||
impl<T> PartialEq<StableSet<T>> for StableSet<T>
|
||||
where
|
||||
T: Eq + Hash,
|
||||
{
|
||||
fn eq(&self, other: &StableSet<T>) -> bool {
|
||||
self.base == other.base
|
||||
}
|
||||
}
|
||||
|
||||
impl<T> Eq for StableSet<T> where T: Eq + Hash {}
|
||||
|
||||
impl<T: Hash + Eq> StableSet<T> {
|
||||
pub fn new() -> StableSet<T> {
|
||||
StableSet { base: FxHashSet::default() }
|
||||
}
|
||||
|
||||
pub fn into_sorted_vector(self) -> Vec<T>
|
||||
where
|
||||
T: Ord,
|
||||
{
|
||||
let mut vector = self.base.into_iter().collect::<Vec<_>>();
|
||||
vector.sort_unstable();
|
||||
vector
|
||||
}
|
||||
|
||||
pub fn get<Q: ?Sized>(&self, value: &Q) -> Option<&T>
|
||||
where
|
||||
T: Borrow<Q>,
|
||||
Q: Hash + Eq,
|
||||
{
|
||||
self.base.get(value)
|
||||
}
|
||||
|
||||
pub fn insert(&mut self, value: T) -> bool {
|
||||
self.base.insert(value)
|
||||
}
|
||||
|
||||
pub fn remove<Q: ?Sized>(&mut self, value: &Q) -> bool
|
||||
where
|
||||
T: Borrow<Q>,
|
||||
Q: Hash + Eq,
|
||||
{
|
||||
self.base.remove(value)
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue