pub struct UnordSet<V: Eq + Hash> {
inner: FxHashSet<V>,
}
Expand description
This is a set collection type that tries very hard to not expose any internal iteration. This is a useful property when trying to uphold the determinism invariants imposed by the query system.
This collection type is a good choice for set-like collections the keys of which don’t have a semantic ordering.
See MCP 533 for more information.
Fields§
§inner: FxHashSet<V>
Implementations§
Source§impl<V: Eq + Hash> UnordSet<V>
impl<V: Eq + Hash> UnordSet<V>
pub fn new() -> Self
pub fn with_capacity(capacity: usize) -> Self
pub fn len(&self) -> usize
pub fn is_empty(&self) -> bool
pub fn insert(&mut self, v: V) -> bool
pub fn contains<Q>(&self, v: &Q) -> bool
pub fn remove<Q>(&mut self, k: &Q) -> bool
pub fn items(&self) -> UnordItems<&V, impl Iterator<Item = &V>>
pub fn into_items(self) -> UnordItems<V, impl Iterator<Item = V>>
Sourcepub fn to_sorted<HCX>(&self, hcx: &HCX, cache_sort_key: bool) -> Vec<&V>where
V: ToStableHashKey<HCX>,
pub fn to_sorted<HCX>(&self, hcx: &HCX, cache_sort_key: bool) -> Vec<&V>where
V: ToStableHashKey<HCX>,
Returns the items of this set in stable sort order (as defined by ToStableHashKey
).
The cache_sort_key
parameter controls if slice::sort_by_cached_key or
slice::sort_unstable_by_key will be used for sorting the vec. Use
cache_sort_key
when the ToStableHashKey::to_stable_hash_key implementation
for V
is expensive (e.g. a DefId -> DefPathHash
lookup).
Sourcepub fn to_sorted_stable_ord(&self) -> Vec<&V>where
V: StableCompare,
pub fn to_sorted_stable_ord(&self) -> Vec<&V>where
V: StableCompare,
Returns the items of this set in stable sort order (as defined by
StableCompare
). This method is much more efficient than
into_sorted
because it does not need to transform keys to their
ToStableHashKey
equivalent.
Sourcepub fn into_sorted_stable_ord(self) -> Vec<V>where
V: StableCompare,
pub fn into_sorted_stable_ord(self) -> Vec<V>where
V: StableCompare,
Returns the items of this set in stable sort order (as defined by
StableCompare
). This method is much more efficient than
into_sorted
because it does not need to transform keys to their
ToStableHashKey
equivalent.
Sourcepub fn into_sorted<HCX>(self, hcx: &HCX, cache_sort_key: bool) -> Vec<V>where
V: ToStableHashKey<HCX>,
pub fn into_sorted<HCX>(self, hcx: &HCX, cache_sort_key: bool) -> Vec<V>where
V: ToStableHashKey<HCX>,
Returns the items of this set in stable sort order (as defined by ToStableHashKey
).
The cache_sort_key
parameter controls if slice::sort_by_cached_key or
slice::sort_unstable_by_key will be used for sorting the vec. Use
cache_sort_key
when the ToStableHashKey::to_stable_hash_key implementation
for V
is expensive (e.g. a DefId -> DefPathHash
lookup).
pub fn clear(&mut self)
Trait Implementations§
Source§impl<V: Hash + Eq> Extend<V> for UnordSet<V>
impl<V: Hash + Eq> Extend<V> for UnordSet<V>
Source§fn extend<T: IntoIterator<Item = V>>(&mut self, iter: T)
fn extend<T: IntoIterator<Item = V>>(&mut self, iter: T)
Source§fn extend_one(&mut self, item: A)
fn extend_one(&mut self, item: A)
extend_one
)Source§fn extend_reserve(&mut self, additional: usize)
fn extend_reserve(&mut self, additional: usize)
extend_one
)Source§impl<V: Hash + Eq, I: Iterator<Item = V>> From<UnordItems<V, I>> for UnordSet<V>
impl<V: Hash + Eq, I: Iterator<Item = V>> From<UnordItems<V, I>> for UnordSet<V>
Source§fn from(value: UnordItems<V, I>) -> Self
fn from(value: UnordItems<V, I>) -> Self
Source§impl<V: Hash + Eq> FromIterator<V> for UnordSet<V>
impl<V: Hash + Eq> FromIterator<V> for UnordSet<V>
Source§fn from_iter<T: IntoIterator<Item = V>>(iter: T) -> Self
fn from_iter<T: IntoIterator<Item = V>>(iter: T) -> Self
Source§impl<HCX, V: Hash + Eq + HashStable<HCX>> HashStable<HCX> for UnordSet<V>
impl<HCX, V: Hash + Eq + HashStable<HCX>> HashStable<HCX> for UnordSet<V>
fn hash_stable(&self, hcx: &mut HCX, hasher: &mut StableHasher)
impl<V: Eq + Eq + Hash> Eq for UnordSet<V>
impl<V> !IntoIterator for UnordSet<V>
impl<V: Eq + Hash> StructuralPartialEq for UnordSet<V>
impl<V: Eq + Hash> UnordCollection for UnordSet<V>
Auto Trait Implementations§
impl<V> DynSend for UnordSet<V>where
V: DynSend,
impl<V> DynSync for UnordSet<V>where
V: DynSync,
impl<V> Freeze for UnordSet<V>
impl<V> RefUnwindSafe for UnordSet<V>where
V: RefUnwindSafe,
impl<V> Send for UnordSet<V>where
V: Send,
impl<V> Sync for UnordSet<V>where
V: Sync,
impl<V> Unpin for UnordSet<V>where
V: Unpin,
impl<V> UnwindSafe for UnordSet<V>where
V: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key
and return true
if they are equal.Source§impl<C, T> ExtendUnord<T> for Cwhere
C: Extend<T> + UnordCollection,
impl<C, T> ExtendUnord<T> for Cwhere
C: Extend<T> + UnordCollection,
Source§fn extend_unord<I>(&mut self, items: UnordItems<T, I>)where
I: Iterator<Item = T>,
fn extend_unord<I>(&mut self, items: UnordItems<T, I>)where
I: Iterator<Item = T>,
UnordItems
.
This method is called extend_unord
instead of just extend
so it
does not conflict with Extend::extend
. Otherwise there would be many
places where the two methods would have to be explicitly disambiguated
via UFCS.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T> WithSubscriber for T
impl<T> WithSubscriber for T
Source§fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
Source§fn with_current_subscriber(self) -> WithDispatch<Self>
fn with_current_subscriber(self) -> WithDispatch<Self>
impl<'a, T> Captures<'a> for Twhere
T: ?Sized,
Layout§
Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...)
attributes. Please see the Rust Reference's “Type Layout” chapter for details on type layout guarantees.
Size: 32 bytes