differential_dataflow::trace::cursor

Trait Cursor

Source
pub trait Cursor {
    type Key<'a>: Copy + Clone + Ord;
    type Val<'a>: Copy + Clone + Ord;
    type Time: Timestamp + Lattice + Ord + Clone;
    type TimeGat<'a>: Copy + IntoOwned<'a, Owned = Self::Time>;
    type Diff: Semigroup + 'static;
    type DiffGat<'a>: Copy + IntoOwned<'a, Owned = Self::Diff>;
    type Storage;

Show 14 methods // Required methods fn key_valid(&self, storage: &Self::Storage) -> bool; fn val_valid(&self, storage: &Self::Storage) -> bool; fn key<'a>(&self, storage: &'a Self::Storage) -> Self::Key<'a>; fn val<'a>(&self, storage: &'a Self::Storage) -> Self::Val<'a>; fn map_times<L: FnMut(Self::TimeGat<'_>, Self::DiffGat<'_>)>( &mut self, storage: &Self::Storage, logic: L, ); fn step_key(&mut self, storage: &Self::Storage); fn seek_key(&mut self, storage: &Self::Storage, key: Self::Key<'_>); fn step_val(&mut self, storage: &Self::Storage); fn seek_val(&mut self, storage: &Self::Storage, val: Self::Val<'_>); fn rewind_keys(&mut self, storage: &Self::Storage); fn rewind_vals(&mut self, storage: &Self::Storage); // Provided methods fn get_key<'a>(&self, storage: &'a Self::Storage) -> Option<Self::Key<'a>> { ... } fn get_val<'a>(&self, storage: &'a Self::Storage) -> Option<Self::Val<'a>> { ... } fn to_vec<K, V>( &mut self, storage: &Self::Storage, ) -> Vec<((K, V), Vec<(Self::Time, Self::Diff)>)> where for<'a> Self::Key<'a>: IntoOwned<'a, Owned = K>, for<'a> Self::Val<'a>: IntoOwned<'a, Owned = V> { ... }
}
Expand description

A cursor for navigating ordered (key, val, time, diff) updates.

Required Associated Types§

Source

type Key<'a>: Copy + Clone + Ord

Key by which updates are indexed.

Source

type Val<'a>: Copy + Clone + Ord

Values associated with keys.

Source

type Time: Timestamp + Lattice + Ord + Clone

Timestamps associated with updates

Source

type TimeGat<'a>: Copy + IntoOwned<'a, Owned = Self::Time>

Borrowed form of timestamp.

Source

type Diff: Semigroup + 'static

Owned form of update difference.

Source

type DiffGat<'a>: Copy + IntoOwned<'a, Owned = Self::Diff>

Borrowed form of update difference.

Source

type Storage

Storage required by the cursor.

Required Methods§

Source

fn key_valid(&self, storage: &Self::Storage) -> bool

Indicates if the current key is valid.

A value of false indicates that the cursor has exhausted all keys.

Source

fn val_valid(&self, storage: &Self::Storage) -> bool

Indicates if the current value is valid.

A value of false indicates that the cursor has exhausted all values for this key.

Source

fn key<'a>(&self, storage: &'a Self::Storage) -> Self::Key<'a>

A reference to the current key. Asserts if invalid.

Source

fn val<'a>(&self, storage: &'a Self::Storage) -> Self::Val<'a>

A reference to the current value. Asserts if invalid.

Source

fn map_times<L: FnMut(Self::TimeGat<'_>, Self::DiffGat<'_>)>( &mut self, storage: &Self::Storage, logic: L, )

Applies logic to each pair of time and difference. Intended for mutation of the closure’s scope.

Source

fn step_key(&mut self, storage: &Self::Storage)

Advances the cursor to the next key.

Source

fn seek_key(&mut self, storage: &Self::Storage, key: Self::Key<'_>)

Advances the cursor to the specified key.

Source

fn step_val(&mut self, storage: &Self::Storage)

Advances the cursor to the next value.

Source

fn seek_val(&mut self, storage: &Self::Storage, val: Self::Val<'_>)

Advances the cursor to the specified value.

Source

fn rewind_keys(&mut self, storage: &Self::Storage)

Rewinds the cursor to the first key.

Source

fn rewind_vals(&mut self, storage: &Self::Storage)

Rewinds the cursor to the first value for current key.

Provided Methods§

Source

fn get_key<'a>(&self, storage: &'a Self::Storage) -> Option<Self::Key<'a>>

Returns a reference to the current key, if valid.

Source

fn get_val<'a>(&self, storage: &'a Self::Storage) -> Option<Self::Val<'a>>

Returns a reference to the current value, if valid.

Source

fn to_vec<K, V>( &mut self, storage: &Self::Storage, ) -> Vec<((K, V), Vec<(Self::Time, Self::Diff)>)>
where for<'a> Self::Key<'a>: IntoOwned<'a, Owned = K>, for<'a> Self::Val<'a>: IntoOwned<'a, Owned = V>,

Rewinds the cursor and outputs its contents to a Vec

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementors§

Source§

impl<C, F> Cursor for CursorFilter<C, F>
where C: Cursor, F: FnMut(C::Key<'_>, C::Val<'_>) -> bool + 'static,

Source§

type Key<'a> = <C as Cursor>::Key<'a>

Source§

type Val<'a> = <C as Cursor>::Val<'a>

Source§

type Time = <C as Cursor>::Time

Source§

type TimeGat<'a> = <C as Cursor>::TimeGat<'a>

Source§

type Diff = <C as Cursor>::Diff

Source§

type DiffGat<'a> = <C as Cursor>::DiffGat<'a>

Source§

type Storage = <C as Cursor>::Storage

Source§

impl<C, F> Cursor for CursorFreeze<C, F>
where C: Cursor, F: Fn(C::TimeGat<'_>) -> Option<C::Time>,

Source§

type Key<'a> = <C as Cursor>::Key<'a>

Source§

type Val<'a> = <C as Cursor>::Val<'a>

Source§

type Time = <C as Cursor>::Time

Source§

type TimeGat<'a> = <C as Cursor>::TimeGat<'a>

Source§

type Diff = <C as Cursor>::Diff

Source§

type DiffGat<'a> = <C as Cursor>::DiffGat<'a>

Source§

type Storage = <C as Cursor>::Storage

Source§

impl<C, TInner> Cursor for differential_dataflow::trace::wrappers::enter::CursorEnter<C, TInner>
where C: Cursor, TInner: Refines<C::Time> + Lattice,

Source§

type Key<'a> = <C as Cursor>::Key<'a>

Source§

type Val<'a> = <C as Cursor>::Val<'a>

Source§

type Time = TInner

Source§

type TimeGat<'a> = &'a TInner

Source§

type Diff = <C as Cursor>::Diff

Source§

type DiffGat<'a> = <C as Cursor>::DiffGat<'a>

Source§

type Storage = <C as Cursor>::Storage

Source§

impl<C, TInner, F> Cursor for differential_dataflow::trace::wrappers::enter_at::CursorEnter<C, TInner, F>
where C: Cursor, TInner: Refines<C::Time> + Lattice, F: FnMut(C::Key<'_>, C::Val<'_>, C::TimeGat<'_>) -> TInner,

Source§

type Key<'a> = <C as Cursor>::Key<'a>

Source§

type Val<'a> = <C as Cursor>::Val<'a>

Source§

type Time = TInner

Source§

type TimeGat<'a> = &'a TInner

Source§

type Diff = <C as Cursor>::Diff

Source§

type DiffGat<'a> = <C as Cursor>::DiffGat<'a>

Source§

type Storage = <C as Cursor>::Storage

Source§

impl<C: Cursor> Cursor for RcBatchCursor<C>

Source§

type Key<'a> = <C as Cursor>::Key<'a>

Source§

type Val<'a> = <C as Cursor>::Val<'a>

Source§

type Time = <C as Cursor>::Time

Source§

type TimeGat<'a> = <C as Cursor>::TimeGat<'a>

Source§

type Diff = <C as Cursor>::Diff

Source§

type DiffGat<'a> = <C as Cursor>::DiffGat<'a>

Source§

type Storage = Rc<<C as Cursor>::Storage>

Source§

impl<C: Cursor> Cursor for BatchCursorFrontier<C>
where C::Storage: BatchReader,

Source§

type Key<'a> = <C as Cursor>::Key<'a>

Source§

type Val<'a> = <C as Cursor>::Val<'a>

Source§

type Time = <C as Cursor>::Time

Source§

type TimeGat<'a> = <C as Cursor>::TimeGat<'a>

Source§

type Diff = <C as Cursor>::Diff

Source§

type DiffGat<'a> = <C as Cursor>::DiffGat<'a>

Source§

type Storage = BatchFrontier<<C as Cursor>::Storage>

Source§

impl<C: Cursor> Cursor for CursorFrontier<C, C::Time>

Source§

type Key<'a> = <C as Cursor>::Key<'a>

Source§

type Val<'a> = <C as Cursor>::Val<'a>

Source§

type Time = <C as Cursor>::Time

Source§

type TimeGat<'a> = <C as Cursor>::TimeGat<'a>

Source§

type Diff = <C as Cursor>::Diff

Source§

type DiffGat<'a> = <C as Cursor>::DiffGat<'a>

Source§

type Storage = <C as Cursor>::Storage

Source§

impl<C: Cursor> Cursor for CursorList<C>

Source§

type Key<'a> = <C as Cursor>::Key<'a>

Source§

type Val<'a> = <C as Cursor>::Val<'a>

Source§

type Time = <C as Cursor>::Time

Source§

type TimeGat<'a> = <C as Cursor>::TimeGat<'a>

Source§

type Diff = <C as Cursor>::Diff

Source§

type DiffGat<'a> = <C as Cursor>::DiffGat<'a>

Source§

type Storage = Vec<<C as Cursor>::Storage>

Source§

impl<C: Cursor, F> Cursor for BatchCursorFilter<C, F>
where F: FnMut(C::Key<'_>, C::Val<'_>) -> bool + 'static,

Source§

type Key<'a> = <C as Cursor>::Key<'a>

Source§

type Val<'a> = <C as Cursor>::Val<'a>

Source§

type Time = <C as Cursor>::Time

Source§

type TimeGat<'a> = <C as Cursor>::TimeGat<'a>

Source§

type Diff = <C as Cursor>::Diff

Source§

type DiffGat<'a> = <C as Cursor>::DiffGat<'a>

Source§

type Storage = BatchFilter<<C as Cursor>::Storage, F>

Source§

impl<C: Cursor, F> Cursor for BatchCursorFreeze<C, F>
where F: Fn(C::TimeGat<'_>) -> Option<C::Time>,

Source§

type Key<'a> = <C as Cursor>::Key<'a>

Source§

type Val<'a> = <C as Cursor>::Val<'a>

Source§

type Time = <C as Cursor>::Time

Source§

type TimeGat<'a> = <C as Cursor>::TimeGat<'a>

Source§

type Diff = <C as Cursor>::Diff

Source§

type DiffGat<'a> = <C as Cursor>::DiffGat<'a>

Source§

type Storage = BatchFreeze<<C as Cursor>::Storage, F>

Source§

impl<TInner, C: Cursor> Cursor for differential_dataflow::trace::wrappers::enter::BatchCursorEnter<C, TInner>
where TInner: Refines<C::Time> + Lattice,

Source§

type Key<'a> = <C as Cursor>::Key<'a>

Source§

type Val<'a> = <C as Cursor>::Val<'a>

Source§

type Time = TInner

Source§

type TimeGat<'a> = &'a TInner

Source§

type Diff = <C as Cursor>::Diff

Source§

type DiffGat<'a> = <C as Cursor>::DiffGat<'a>

Source§

type Storage = BatchEnter<<C as Cursor>::Storage, TInner>

Source§

impl<TInner, C: Cursor, F> Cursor for differential_dataflow::trace::wrappers::enter_at::BatchCursorEnter<C, TInner, F>
where TInner: Refines<C::Time> + Lattice, F: FnMut(C::Key<'_>, C::Val<'_>, C::TimeGat<'_>) -> TInner,

Source§

type Key<'a> = <C as Cursor>::Key<'a>

Source§

type Val<'a> = <C as Cursor>::Val<'a>

Source§

type Time = TInner

Source§

type TimeGat<'a> = &'a TInner

Source§

type Diff = <C as Cursor>::Diff

Source§

type DiffGat<'a> = <C as Cursor>::DiffGat<'a>

Source§

type Storage = BatchEnter<<C as Cursor>::Storage, TInner, F>