Struct OrderTracker

Source
pub struct OrderTracker<Item, Gap> { /* private fields */ }
Expand description

A tracker for the order of items in a linked chunk.

This can be used to determine the absolute ordering of an item, and thus the relative ordering of two items in a linked chunk, in an efficient manner, thanks to OrderTracker::ordering. Internally, it keeps track of the relative ordering of the chunks themselves; given a Position in a linked chunk, the item ordering is the lexicographic ordering of the chunk in the linked chunk, and the internal position within the chunk. For the sake of ease, we return the absolute vector index of the item in the linked chunk.

It requires the full links’ metadata to be provided at creation time, so that it can also give an order for an item that’s not loaded yet, in the context of lazy-loading.

Implementations§

Source§

impl<Item, Gap> OrderTracker<Item, Gap>
where Item: Clone,

Source

pub fn flush_updates(&mut self, inhibit: bool)

Force flushing of the updates manually.

If inhibit is true (which is useful in the case of lazy-loading related updates, which shouldn’t affect the canonical, persisted linked chunk), the updates are ignored; otherwise, they are consumed normally.

Source

pub fn map_updates(&mut self, updates: &[Update<Item, Gap>])

Apply some out-of-band updates to the ordering tracker.

This must only be used when the updates do not affect the observed linked chunk, but would affect the fully-loaded collection.

Source

pub fn ordering(&self, event_pos: Position) -> Option<usize>

Given an event’s position, returns its final ordering in the current state of the linked chunk as a vector.

Useful to compare the ordering of multiple events.

Precondition: the reader must be up to date, i.e. Self::flush_updates must have been called before this method.

Will return None if the position doesn’t match a known chunk in the linked chunk, or if the chunk is a gap.

Trait Implementations§

Source§

impl<Item, Gap> Debug for OrderTracker<Item, Gap>
where Item: Debug, Gap: Debug,

Source§

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

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl<Item, Gap> Freeze for OrderTracker<Item, Gap>

§

impl<Item, Gap> RefUnwindSafe for OrderTracker<Item, Gap>
where Item: RefUnwindSafe,

§

impl<Item, Gap> Send for OrderTracker<Item, Gap>
where Item: Send + Sync, Gap: Send + Sync,

§

impl<Item, Gap> Sync for OrderTracker<Item, Gap>
where Item: Sync + Send, Gap: Send + Sync,

§

impl<Item, Gap> Unpin for OrderTracker<Item, Gap>
where Item: Unpin,

§

impl<Item, Gap> UnwindSafe for OrderTracker<Item, Gap>
where Item: 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, W> HasTypeWitness<W> for T
where W: MakeTypeWitness<Arg = T>, T: ?Sized,

Source§

const WITNESS: W = W::MAKE

A constant of the type witness
Source§

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

Source§

const TYPE_EQ: TypeEq<T, <T as Identity>::Type> = TypeEq::NEW

Proof that Self is the same type as Self::Type, provides methods for casting between Self and Self::Type.
Source§

type Type = T

The same type as Self, used to emulate type equality bounds (T == U) with associated type equality constraints (T: Identity<Type = U>).
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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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 more
Source§

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

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
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<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

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
Source§

impl<T> Any for T
where T: Any,

Source§

impl<T> AsyncTraitDeps for T

Source§

impl<T> ErasedDestructor for T
where T: 'static,

Source§

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

Source§

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