pub struct ColumnDataIter<'a, C: ColumnCursor> { /* private fields */ }Expand description
An iterator over items in a ColumnData, with rich navigation capabilities.
Produced by ColumnData::iter and ColumnData::iter_range.
Beyond standard Iterator usage, ColumnDataIter supports:
advance_by/advance_to— fast O(log n) forward jump.seek_to_value— binary search for a sorted value.advance_acc_by— advance by accumulator amount.next_run— access the raw RLE runs.shift_next— move the window and return the next item.suspend/ColumnDataIterState::try_resume— serialize and restore position across async boundaries or between calls.with_acc— wrap in aColGroupIterthat emits(acc, pos, item)tuples.as_acc— wrap in aColAccIterthat emits onlyAcc.
Implementations§
Source§impl<'a, C: ColumnCursor> ColumnDataIter<'a, C>
impl<'a, C: ColumnCursor> ColumnDataIter<'a, C>
Sourcepub fn pos(&self) -> usize
pub fn pos(&self) -> usize
Returns the current position (index of the next item to be yielded).
Sourcepub fn next_run(&mut self) -> Option<Run<'a, C::Item>>
pub fn next_run(&mut self) -> Option<Run<'a, C::Item>>
Returns the next RLE Run, advancing pos by run.count.
More efficient than calling next() repeatedly when you only need run-level access.
Returns None when the iterator is exhausted.
Sourcepub fn advance_by(&mut self, amount: usize)
pub fn advance_by(&mut self, amount: usize)
Advances the iterator by amount items in O(log n). A no-op if amount is 0.
Sourcepub fn advance_to(&mut self, target: usize)
pub fn advance_to(&mut self, target: usize)
Advances the iterator to position target in O(log n).
Panics if target < self.pos().
Sourcepub fn seek_to_value<B, R>(
&mut self,
value: Option<B>,
range: R,
) -> Range<usize>
pub fn seek_to_value<B, R>( &mut self, value: Option<B>, range: R, ) -> Range<usize>
Returns the contiguous index range where value appears within range, positioning
the iterator at the start of that range.
Requires that values within range are sorted; gives undefined results otherwise.
Uses B-tree binary search followed by a linear slab scan.
Returns an empty range at the found position if value is absent.
After returning, the iterator is positioned at the first index where value appears
(or where it would appear if absent), ready for further reads.
Sourcepub fn end_pos(&self) -> usize
pub fn end_pos(&self) -> usize
Returns the exclusive upper bound of the iteration range (as set by iter_range or set_max).
Sourcepub fn to_vec(self) -> Vec<C::Export>
pub fn to_vec(self) -> Vec<C::Export>
Collects all remaining items into a Vec. Primarily useful for testing.
Sourcepub fn with_acc(self) -> ColGroupIter<'a, C> ⓘ
pub fn with_acc(self) -> ColGroupIter<'a, C> ⓘ
Wraps this iterator in a ColGroupIter that emits (acc, pos, item) tuples.
Sourcepub fn as_acc(self) -> ColAccIter<'a, C> ⓘ
pub fn as_acc(self) -> ColAccIter<'a, C> ⓘ
Wraps this iterator in a ColAccIter that emits only the Acc value for each item.
Sourcepub fn calculate_acc(&self) -> Acc
pub fn calculate_acc(&self) -> Acc
Returns the Acc value immediately before the current iterator position.
Sourcepub fn shift_next(
&mut self,
range: Range<usize>,
) -> Option<<Self as Iterator>::Item>
pub fn shift_next( &mut self, range: Range<usize>, ) -> Option<<Self as Iterator>::Item>
Moves the iterator window to range and returns the item at range.start.
The iterator must already be at or before range.start. After this call, the
iterator will yield items from range.start up to (exclusive) range.end.
Subsequent calls to shift_next can extend the window further forward.
Panics if range.start < self.pos.
Sourcepub fn advance_acc_by<A: Into<Acc>>(&mut self, n: A) -> usize
pub fn advance_acc_by<A: Into<Acc>>(&mut self, n: A) -> usize
Advances the iterator until the cumulative Acc has grown by at least n.
Returns the number of items consumed. If the total accumulator of the remaining
items is less than n, the iterator is exhausted and the actual advance is returned.
This is O(log n) using the slab-level accumulator index.
Sourcepub fn suspend(&self) -> ColumnDataIterState<C>
pub fn suspend(&self) -> ColumnDataIterState<C>
Captures the current iterator position as a ColumnDataIterState that can be
stored and later restored via ColumnDataIterState::try_resume.
Resumption will fail if the underlying ColumnData is mutated between suspend and resume.
Trait Implementations§
Source§impl<C: ColumnCursor> Clone for ColumnDataIter<'_, C>
impl<C: ColumnCursor> Clone for ColumnDataIter<'_, C>
Source§impl<'a, C: Debug + ColumnCursor> Debug for ColumnDataIter<'a, C>
impl<'a, C: Debug + ColumnCursor> Debug for ColumnDataIter<'a, C>
Source§impl<C: ColumnCursor> Default for ColumnDataIter<'_, C>
impl<C: ColumnCursor> Default for ColumnDataIter<'_, C>
Source§impl<'a, C: ColumnCursor> Iterator for ColumnDataIter<'a, C>
impl<'a, C: ColumnCursor> Iterator for ColumnDataIter<'a, C>
Source§type Item = Option<Cow<'a, <C as ColumnCursor>::Item>>
type Item = Option<Cow<'a, <C as ColumnCursor>::Item>>
Source§fn next(&mut self) -> Option<Self::Item>
fn next(&mut self) -> Option<Self::Item>
Source§fn nth(&mut self, n: usize) -> Option<Self::Item>
fn nth(&mut self, n: usize) -> Option<Self::Item>
nth element of the iterator. Read moreSource§fn next_chunk<const N: usize>(
&mut self,
) -> Result<[Self::Item; N], IntoIter<Self::Item, N>>where
Self: Sized,
fn next_chunk<const N: usize>(
&mut self,
) -> Result<[Self::Item; N], IntoIter<Self::Item, N>>where
Self: Sized,
iter_next_chunk)N values. Read more1.0.0 · Source§fn size_hint(&self) -> (usize, Option<usize>)
fn size_hint(&self) -> (usize, Option<usize>)
1.0.0 · Source§fn count(self) -> usizewhere
Self: Sized,
fn count(self) -> usizewhere
Self: Sized,
1.0.0 · Source§fn last(self) -> Option<Self::Item>where
Self: Sized,
fn last(self) -> Option<Self::Item>where
Self: Sized,
Source§fn advance_by(&mut self, n: usize) -> Result<(), NonZero<usize>>
fn advance_by(&mut self, n: usize) -> Result<(), NonZero<usize>>
iter_advance_by)n elements. Read more1.28.0 · Source§fn step_by(self, step: usize) -> StepBy<Self>where
Self: Sized,
fn step_by(self, step: usize) -> StepBy<Self>where
Self: Sized,
1.0.0 · Source§fn chain<U>(self, other: U) -> Chain<Self, <U as IntoIterator>::IntoIter>
fn chain<U>(self, other: U) -> Chain<Self, <U as IntoIterator>::IntoIter>
1.0.0 · Source§fn zip<U>(self, other: U) -> Zip<Self, <U as IntoIterator>::IntoIter>where
Self: Sized,
U: IntoIterator,
fn zip<U>(self, other: U) -> Zip<Self, <U as IntoIterator>::IntoIter>where
Self: Sized,
U: IntoIterator,
Source§fn intersperse(self, separator: Self::Item) -> Intersperse<Self>
fn intersperse(self, separator: Self::Item) -> Intersperse<Self>
iter_intersperse)separator between items
of the original iterator. Read moreSource§fn intersperse_with<G>(self, separator: G) -> IntersperseWith<Self, G>
fn intersperse_with<G>(self, separator: G) -> IntersperseWith<Self, G>
iter_intersperse)separator
between items of the original iterator. Read more1.0.0 · Source§fn map<B, F>(self, f: F) -> Map<Self, F>
fn map<B, F>(self, f: F) -> Map<Self, F>
1.0.0 · Source§fn filter<P>(self, predicate: P) -> Filter<Self, P>
fn filter<P>(self, predicate: P) -> Filter<Self, P>
1.0.0 · Source§fn filter_map<B, F>(self, f: F) -> FilterMap<Self, F>
fn filter_map<B, F>(self, f: F) -> FilterMap<Self, F>
1.0.0 · Source§fn enumerate(self) -> Enumerate<Self>where
Self: Sized,
fn enumerate(self) -> Enumerate<Self>where
Self: Sized,
1.0.0 · Source§fn skip_while<P>(self, predicate: P) -> SkipWhile<Self, P>
fn skip_while<P>(self, predicate: P) -> SkipWhile<Self, P>
1.0.0 · Source§fn take_while<P>(self, predicate: P) -> TakeWhile<Self, P>
fn take_while<P>(self, predicate: P) -> TakeWhile<Self, P>
1.57.0 · Source§fn map_while<B, P>(self, predicate: P) -> MapWhile<Self, P>
fn map_while<B, P>(self, predicate: P) -> MapWhile<Self, P>
1.0.0 · Source§fn skip(self, n: usize) -> Skip<Self>where
Self: Sized,
fn skip(self, n: usize) -> Skip<Self>where
Self: Sized,
n elements. Read more1.0.0 · Source§fn take(self, n: usize) -> Take<Self>where
Self: Sized,
fn take(self, n: usize) -> Take<Self>where
Self: Sized,
n elements, or fewer
if the underlying iterator ends sooner. Read more1.0.0 · Source§fn flat_map<U, F>(self, f: F) -> FlatMap<Self, U, F>
fn flat_map<U, F>(self, f: F) -> FlatMap<Self, U, F>
1.29.0 · Source§fn flatten(self) -> Flatten<Self>
fn flatten(self) -> Flatten<Self>
Source§fn map_windows<F, R, const N: usize>(self, f: F) -> MapWindows<Self, F, N>
fn map_windows<F, R, const N: usize>(self, f: F) -> MapWindows<Self, F, N>
iter_map_windows)f for each contiguous window of size N over
self and returns an iterator over the outputs of f. Like slice::windows(),
the windows during mapping overlap as well. Read more1.0.0 · Source§fn inspect<F>(self, f: F) -> Inspect<Self, F>
fn inspect<F>(self, f: F) -> Inspect<Self, F>
1.0.0 · Source§fn by_ref(&mut self) -> &mut Selfwhere
Self: Sized,
fn by_ref(&mut self) -> &mut Selfwhere
Self: Sized,
Iterator. Read moreSource§fn try_collect<B>(
&mut self,
) -> <<Self::Item as Try>::Residual as Residual<B>>::TryType
fn try_collect<B>( &mut self, ) -> <<Self::Item as Try>::Residual as Residual<B>>::TryType
iterator_try_collect)Source§fn collect_into<E>(self, collection: &mut E) -> &mut E
fn collect_into<E>(self, collection: &mut E) -> &mut E
iter_collect_into)1.0.0 · Source§fn partition<B, F>(self, f: F) -> (B, B)
fn partition<B, F>(self, f: F) -> (B, B)
Source§fn is_partitioned<P>(self, predicate: P) -> bool
fn is_partitioned<P>(self, predicate: P) -> bool
iter_is_partitioned)true precede all those that return false. Read more1.27.0 · Source§fn try_fold<B, F, R>(&mut self, init: B, f: F) -> R
fn try_fold<B, F, R>(&mut self, init: B, f: F) -> R
1.27.0 · Source§fn try_for_each<F, R>(&mut self, f: F) -> R
fn try_for_each<F, R>(&mut self, f: F) -> R
1.0.0 · Source§fn fold<B, F>(self, init: B, f: F) -> B
fn fold<B, F>(self, init: B, f: F) -> B
1.51.0 · Source§fn reduce<F>(self, f: F) -> Option<Self::Item>
fn reduce<F>(self, f: F) -> Option<Self::Item>
Source§fn try_reduce<R>(
&mut self,
f: impl FnMut(Self::Item, Self::Item) -> R,
) -> <<R as Try>::Residual as Residual<Option<<R as Try>::Output>>>::TryType
fn try_reduce<R>( &mut self, f: impl FnMut(Self::Item, Self::Item) -> R, ) -> <<R as Try>::Residual as Residual<Option<<R as Try>::Output>>>::TryType
iterator_try_reduce)1.0.0 · Source§fn all<F>(&mut self, f: F) -> bool
fn all<F>(&mut self, f: F) -> bool
1.0.0 · Source§fn any<F>(&mut self, f: F) -> bool
fn any<F>(&mut self, f: F) -> bool
1.0.0 · Source§fn find<P>(&mut self, predicate: P) -> Option<Self::Item>
fn find<P>(&mut self, predicate: P) -> Option<Self::Item>
1.30.0 · Source§fn find_map<B, F>(&mut self, f: F) -> Option<B>
fn find_map<B, F>(&mut self, f: F) -> Option<B>
Source§fn try_find<R>(
&mut self,
f: impl FnMut(&Self::Item) -> R,
) -> <<R as Try>::Residual as Residual<Option<Self::Item>>>::TryType
fn try_find<R>( &mut self, f: impl FnMut(&Self::Item) -> R, ) -> <<R as Try>::Residual as Residual<Option<Self::Item>>>::TryType
try_find)1.0.0 · Source§fn position<P>(&mut self, predicate: P) -> Option<usize>
fn position<P>(&mut self, predicate: P) -> Option<usize>
1.0.0 · Source§fn max(self) -> Option<Self::Item>
fn max(self) -> Option<Self::Item>
1.0.0 · Source§fn min(self) -> Option<Self::Item>
fn min(self) -> Option<Self::Item>
1.6.0 · Source§fn max_by_key<B, F>(self, f: F) -> Option<Self::Item>
fn max_by_key<B, F>(self, f: F) -> Option<Self::Item>
1.15.0 · Source§fn max_by<F>(self, compare: F) -> Option<Self::Item>
fn max_by<F>(self, compare: F) -> Option<Self::Item>
1.6.0 · Source§fn min_by_key<B, F>(self, f: F) -> Option<Self::Item>
fn min_by_key<B, F>(self, f: F) -> Option<Self::Item>
1.15.0 · Source§fn min_by<F>(self, compare: F) -> Option<Self::Item>
fn min_by<F>(self, compare: F) -> Option<Self::Item>
1.0.0 · Source§fn unzip<A, B, FromA, FromB>(self) -> (FromA, FromB)
fn unzip<A, B, FromA, FromB>(self) -> (FromA, FromB)
1.36.0 · Source§fn copied<'a, T>(self) -> Copied<Self>
fn copied<'a, T>(self) -> Copied<Self>
Source§fn array_chunks<const N: usize>(self) -> ArrayChunks<Self, N>where
Self: Sized,
fn array_chunks<const N: usize>(self) -> ArrayChunks<Self, N>where
Self: Sized,
iter_array_chunks)N elements of the iterator at a time. Read more1.11.0 · Source§fn product<P>(self) -> P
fn product<P>(self) -> P
Source§fn cmp_by<I, F>(self, other: I, cmp: F) -> Ordering
fn cmp_by<I, F>(self, other: I, cmp: F) -> Ordering
iter_order_by)Iterator with those
of another with respect to the specified comparison function. Read more1.5.0 · Source§fn partial_cmp<I>(self, other: I) -> Option<Ordering>
fn partial_cmp<I>(self, other: I) -> Option<Ordering>
PartialOrd elements of
this Iterator with those of another. The comparison works like short-circuit
evaluation, returning a result without comparing the remaining elements.
As soon as an order can be determined, the evaluation stops and a result is returned. Read moreSource§fn partial_cmp_by<I, F>(self, other: I, partial_cmp: F) -> Option<Ordering>where
Self: Sized,
I: IntoIterator,
F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Option<Ordering>,
fn partial_cmp_by<I, F>(self, other: I, partial_cmp: F) -> Option<Ordering>where
Self: Sized,
I: IntoIterator,
F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Option<Ordering>,
iter_order_by)Iterator with those
of another with respect to the specified comparison function. Read moreSource§fn eq_by<I, F>(self, other: I, eq: F) -> bool
fn eq_by<I, F>(self, other: I, eq: F) -> bool
iter_order_by)1.5.0 · Source§fn lt<I>(self, other: I) -> bool
fn lt<I>(self, other: I) -> bool
Iterator are lexicographically
less than those of another. Read more1.5.0 · Source§fn le<I>(self, other: I) -> bool
fn le<I>(self, other: I) -> bool
Iterator are lexicographically
less or equal to those of another. Read more1.5.0 · Source§fn gt<I>(self, other: I) -> bool
fn gt<I>(self, other: I) -> bool
Iterator are lexicographically
greater than those of another. Read more1.5.0 · Source§fn ge<I>(self, other: I) -> bool
fn ge<I>(self, other: I) -> bool
Iterator are lexicographically
greater than or equal to those of another. Read more