-
Notifications
You must be signed in to change notification settings - Fork 12.7k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Auto merge of #64883 - Centril:rollup-uehjt63, r=Centril
Rollup of 10 pull requests Successful merges: - #64131 (data_structures: Add deterministic FxHashMap and FxHashSet wrappers) - #64387 (Fix redundant semicolon lint interaction with proc macro attributes) - #64678 (added more context for duplicate lang item errors (fixes #60561)) - #64763 (Add E0734 and its long explanation) - #64793 (Fix format macro expansions spans to be macro-generated) - #64837 (Improve wording in documentation of MaybeUninit) - #64852 (Print ParamTy span when accessing a field (#52082)) - #64875 (Upgrade async/await to "used" keywords.) - #64876 (Fix typo in intrinsics op safety) - #64880 (Slice docs: fix typo) Failed merges: r? @ghost
- Loading branch information
Showing
54 changed files
with
620 additions
and
163 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,99 @@ | ||
pub use rustc_hash::FxHashMap; | ||
use std::borrow::Borrow; | ||
use std::collections::hash_map::Entry; | ||
use std::fmt; | ||
use std::hash::Hash; | ||
|
||
/// A deterministic wrapper around FxHashMap that does not provide iteration support. | ||
/// | ||
/// It supports insert, remove, get and get_mut functions from FxHashMap. | ||
/// It also allows to convert hashmap to a sorted vector with the method `into_sorted_vector()`. | ||
#[derive(Clone)] | ||
pub struct StableMap<K, V> { | ||
base: FxHashMap<K, V>, | ||
} | ||
|
||
impl<K, V> Default for StableMap<K, V> | ||
where | ||
K: Eq + Hash, | ||
{ | ||
fn default() -> StableMap<K, V> { | ||
StableMap::new() | ||
} | ||
} | ||
|
||
impl<K, V> fmt::Debug for StableMap<K, V> | ||
where | ||
K: Eq + Hash + fmt::Debug, | ||
V: fmt::Debug, | ||
{ | ||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { | ||
write!(f, "{:?}", self.base) | ||
} | ||
} | ||
|
||
impl<K, V> PartialEq for StableMap<K, V> | ||
where | ||
K: Eq + Hash, | ||
V: PartialEq, | ||
{ | ||
fn eq(&self, other: &StableMap<K, V>) -> bool { | ||
self.base == other.base | ||
} | ||
} | ||
|
||
impl<K, V> Eq for StableMap<K, V> | ||
where | ||
K: Eq + Hash, | ||
V: Eq, | ||
{} | ||
|
||
impl<K, V> StableMap<K, V> | ||
where | ||
K: Eq + Hash, | ||
{ | ||
pub fn new() -> StableMap<K, V> { | ||
StableMap { base: FxHashMap::default() } | ||
} | ||
|
||
pub fn into_sorted_vector(self) -> Vec<(K, V)> | ||
where | ||
K: Ord + Copy, | ||
{ | ||
let mut vector = self.base.into_iter().collect::<Vec<_>>(); | ||
vector.sort_unstable_by_key(|pair| pair.0); | ||
vector | ||
} | ||
|
||
pub fn entry(&mut self, k: K) -> Entry<'_, K, V> { | ||
self.base.entry(k) | ||
} | ||
|
||
pub fn get<Q: ?Sized>(&self, k: &Q) -> Option<&V> | ||
where | ||
K: Borrow<Q>, | ||
Q: Hash + Eq, | ||
{ | ||
self.base.get(k) | ||
} | ||
|
||
pub fn get_mut<Q: ?Sized>(&mut self, k: &Q) -> Option<&mut V> | ||
where | ||
K: Borrow<Q>, | ||
Q: Hash + Eq, | ||
{ | ||
self.base.get_mut(k) | ||
} | ||
|
||
pub fn insert(&mut self, k: K, v: V) -> Option<V> { | ||
self.base.insert(k, v) | ||
} | ||
|
||
pub fn remove<Q: ?Sized>(&mut self, k: &Q) -> Option<V> | ||
where | ||
K: Borrow<Q>, | ||
Q: Hash + Eq, | ||
{ | ||
self.base.remove(k) | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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) | ||
} | ||
} |
Oops, something went wrong.