ReusableDeduplicator

Struct ReusableDeduplicator 

Source
pub struct ReusableDeduplicator<T> { /* private fields */ }
Expand description

A helper for deduplicating items in an iterator while amortizing the storage cost of deduplication.

When deduplicating items in an iterator, a set of which items have been seen must be kept. This involves underlying storage that grows as more items are seen for the first time. When many iterators are being deduplicated, this storage cost can add up in terms of the number of underlying allocations, and resizing operations of the set.

ReusableDeduplicator allows for reuse of the underlying set between iterations.

§Safety

In order to support reusing the underlying storage between iterations, without having to clone the items, we directly hash items and track the presence of their hash value. This is a subtle distinction compared to using the items themselves, as it means that we lose the typical fallback of comparing items for equality if there is a hash collision detected. Consistent with other code in this repository that deals with things like metric tags, we use a high-quality hash function and make a calculated bet that collisions are extremely unlikely.

Implementations§

Source§

impl<T: Eq + Hash> ReusableDeduplicator<T>

Source

pub fn new() -> Self

Create a new ReusableDeduplicator.

Source

pub fn deduplicated<'item, I>( &mut self, iter: I, ) -> Deduplicated<'_, 'item, I, T>
where I: Iterator<Item = &'item T>,

Creates a wrapper iterator over the given iterator that deduplicates the items.

Trait Implementations§

Source§

impl<T: Debug> Debug for ReusableDeduplicator<T>

Source§

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

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl<T> Freeze for ReusableDeduplicator<T>

§

impl<T> RefUnwindSafe for ReusableDeduplicator<T>
where T: RefUnwindSafe,

§

impl<T> Send for ReusableDeduplicator<T>
where T: Send,

§

impl<T> Sync for ReusableDeduplicator<T>
where T: Sync,

§

impl<T> Unpin for ReusableDeduplicator<T>
where T: Unpin,

§

impl<T> UnwindSafe for ReusableDeduplicator<T>
where T: UnwindSafe,

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> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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> Same for T

Source§

type Output = T

Should always be Self
§

impl<T> Track for T

§

fn track_allocations(self, token: AllocationGroupToken) -> Tracked<Self>

Instruments this type by attaching the given allocation group token, returning a Tracked wrapper. Read more
§

fn in_current_allocation_group(self) -> Tracked<Self>

Instruments this type by attaching the current allocation group, returning a Tracked wrapper. 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.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more