Trait pushgen::traits::ReverseGenerator
source · pub trait ReverseGenerator: Generator {
// Required method
fn run_back(
&mut self,
output: impl FnMut(Self::Output) -> ValueResult
) -> GeneratorResult;
// Provided method
fn try_advance_back(&mut self, n: NonZeroUsize) -> (usize, GeneratorResult) { ... }
}
Expand description
A generator able to produce values from in reverse order.
A generator that implements ReverseGenerator
can produce values in reverse order.
Both forward and reverse generation work on the same range and do not cross: a generator is complete when the forward and reverse generator meets.
Examples
Basic usage:
use pushgen::{SliceGenerator, GeneratorResult, GeneratorExt};
let numbers = [1, 2, 3, 4, 5, 6];
let mut gen = SliceGenerator::new(&numbers);
assert_eq!(Ok(&1), gen.next());
assert_eq!(Ok(&6), gen.next_back());
assert_eq!(Ok(&5), gen.next_back());
assert_eq!(Ok(&2), gen.next());
assert_eq!(Ok(&3), gen.next());
assert_eq!(Ok(&4), gen.next());
assert_eq!(Err(GeneratorResult::Complete), gen.next());
assert_eq!(Err(GeneratorResult::Complete), gen.next_back());
Required Methods§
sourcefn run_back(
&mut self,
output: impl FnMut(Self::Output) -> ValueResult
) -> GeneratorResult
fn run_back( &mut self, output: impl FnMut(Self::Output) -> ValueResult ) -> GeneratorResult
Run a generator backwards, producing values from the end to the beginning.
Provided Methods§
sourcefn try_advance_back(&mut self, n: NonZeroUsize) -> (usize, GeneratorResult)
fn try_advance_back(&mut self, n: NonZeroUsize) -> (usize, GeneratorResult)
Tries to advance the generator from the back by n
values.