Skip to main content

KevySet

Struct KevySet 

Source
pub struct KevySet<K>(/* private fields */);
Expand description

HashSet-shaped wrapper over KevyMap<K, ()>.

Carries the same per-shard / single-trust-domain assumptions; differs from std::HashSet only by hashing through KevyHash (one-call inlinable) and exposing the underlying KevyMap’s bucket-address API via KevySet::as_map for callers that want prefetch.

Implementations§

Source§

impl<K> KevySet<K>

Source

pub fn new() -> Self

Construct an empty set without allocating.

Source

pub fn with_capacity(cap_hint: usize) -> Self

Construct a set sized for cap_hint members without growing.

Source

pub fn len(&self) -> usize

Live member count.

Source

pub fn is_empty(&self) -> bool

Whether len() == 0.

Source

pub fn capacity(&self) -> usize

Allocated slot count of the underlying map.

Source

pub fn clear(&mut self)

Drop every member and reset the metadata. Keeps the allocation.

Source

pub fn iter(&self) -> SetIter<'_, K>

&K iterator over all members (unspecified order).

Source

pub fn iter_from_slot(&self, start: usize) -> impl Iterator<Item = &K>

Borrow the underlying map (gives access to the bucket-addr / prefetch API). An iterator that begins at slot start and wraps once around the whole table. Take the first element for an arbitrary member in O(1) expected time — the pattern SPOP and SRANDMEMBER need, and the one Redis’s dictGetRandomKey uses.

Not perfectly uniform: a member sitting after a long run of empty slots is likelier to be picked than one in a dense cluster. Redis has the same bias for the same reason, and the contract is “arbitrary”, not “uniform”. What it is NOT is the identical member every single time, which is what iter().next() gives you.

Source

pub fn as_map(&self) -> &KevyMap<K, ()>

The backing map, for callers that want its bucket addresses (prefetch).

Source§

impl<K: KevyHash + Eq> KevySet<K>

Source

pub fn insert(&mut self, key: K) -> bool

Insert key. Returns true if newly added, false if it was already present (matches HashSet::insert).

Source§

impl<K> KevySet<K>

Source

pub fn contains<Q>(&self, key: &Q) -> bool
where K: Borrow<Q>, Q: KevyHash + Eq + ?Sized,

Whether key is a member of the set.

Source

pub fn remove<Q>(&mut self, key: &Q) -> bool
where K: Borrow<Q>, Q: KevyHash + Eq + ?Sized,

Remove key; returns true if it was present (matches HashSet::remove).

Trait Implementations§

Source§

impl<K: Clone> Clone for KevySet<K>

Source§

fn clone(&self) -> KevySet<K>

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<K: Debug> Debug for KevySet<K>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<K> Default for KevySet<K>

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl<K: KevyHash + Eq> Extend<K> for KevySet<K>

Source§

fn extend<I: IntoIterator<Item = K>>(&mut self, iter: I)

Extends a collection with the contents of an iterator. Read more
Source§

fn extend_one(&mut self, item: A)

🔬This is a nightly-only experimental API. (extend_one)
Extends a collection with exactly one element.
Source§

fn extend_reserve(&mut self, additional: usize)

🔬This is a nightly-only experimental API. (extend_one)
Reserves capacity in a collection for the given number of additional elements. Read more
Source§

impl<K: KevyHash + Eq> FromIterator<K> for KevySet<K>

Source§

fn from_iter<I: IntoIterator<Item = K>>(iter: I) -> Self

Creates a value from an iterator. Read more
Source§

impl<'a, K> IntoIterator for &'a KevySet<K>

Source§

type Item = &'a K

The type of the elements being iterated over.
Source§

type IntoIter = SetIter<'a, K>

Which kind of iterator are we turning this into?
Source§

fn into_iter(self) -> Self::IntoIter

Creates an iterator from a value. Read more

Auto Trait Implementations§

§

impl<K> Freeze for KevySet<K>

§

impl<K> RefUnwindSafe for KevySet<K>
where K: RefUnwindSafe,

§

impl<K> Send for KevySet<K>
where K: Send,

§

impl<K> Sync for KevySet<K>
where K: Sync,

§

impl<K> Unpin for KevySet<K>
where K: Unpin,

§

impl<K> UnsafeUnpin for KevySet<K>

§

impl<K> UnwindSafe for KevySet<K>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.