[−][src]Trait backtracking_iterator::BacktrackingIterator
An iterator capable of backtracking behaviour This generifies the copying and non-copying versions and their behaviour
Associated Types
type RefPoint
The type used to refer to positions in the history
Required methods
fn get_ref_point(&self) -> Self::RefPoint
Yield a reference to the current point in the history This reference must be valid for as long as the current point remains in the history
fn get_oldest_point(&self) -> Self::RefPoint
Yield a reference to the oldest point in the history
fn backtrack(&mut self, point: Self::RefPoint)
Return to a given point in the history Doesn't have to do anything if the point is invalid
extern crate backtracking_iterator; use backtracking_iterator::{BacktrackingIterator, Walkback, Walkbackable}; let v = vec![1_u8, 2_u8, 3_u8]; let mut rec = backtracking_iterator::BacktrackingRecorder::new(v.into_iter()); let mut bt = rec.copying(); bt.next(); // 1_u8 bt.next(); // 2_u8 let wb_pos = { let mut wb = bt.walk_back(); assert!(wb.next().unwrap() == 2_u8); wb.get_ref_point() }; bt.backtrack(wb_pos); assert!(bt.next().unwrap() == 2_u8);
Provided methods
fn start_again(&mut self)
Start the iterator again from all the elements in the current history
The iterator will repeat every element which was emitted since the last
call to forget().
extern crate backtracking_iterator; use backtracking_iterator::BacktrackingIterator; let v = vec![1_u8, 2_u8]; let mut rec = backtracking_iterator::BacktrackingRecorder::new(v.into_iter()); let mut bt = rec.copying(); bt.next(); bt.start_again(); assert!(bt.next().unwrap() == 1_u8);
fn peek(&mut self) -> Option<Self::Item>
Get the next element of the iterator, without advancing it.
The iterator will yield the same element again in the next call to
peek() or next().
extern crate backtracking_iterator; use backtracking_iterator::BacktrackingIterator; let v = vec![1_u8, 2_u8]; let mut rec = backtracking_iterator::BacktrackingRecorder::new(v.into_iter()); let mut bt = rec.copying(); assert!(bt.peek().unwrap() == 1_u8); assert!(bt.peek().unwrap() == 1_u8); assert!(bt.peek().unwrap() == 1_u8); assert!(bt.next().unwrap() == 1_u8);
Implementors
impl<'item, Iter> BacktrackingIterator for ConcurrentReferencingBacktrackingIterator<'item, Iter> where
Iter: Iterator,
Iter: 'item, [src]
Iter: Iterator,
Iter: 'item,
type RefPoint = usize
fn get_ref_point(&self) -> usize[src]
fn get_oldest_point(&self) -> usize[src]
fn backtrack(&mut self, position: usize)[src]
fn start_again(&mut self)[src]
fn peek(&mut self) -> Option<Self::Item>[src]
impl<'record, I> BacktrackingIterator for CopyingBacktrackingIterator<'record, I> where
I: Iterator,
I::Item: Clone, [src]
I: Iterator,
I::Item: Clone,
type RefPoint = usize
fn get_ref_point(&self) -> usize[src]
fn get_oldest_point(&self) -> usize[src]
fn backtrack(&mut self, position: usize)[src]
fn start_again(&mut self)[src]
fn peek(&mut self) -> Option<Self::Item>[src]
impl<'record, Iter> BacktrackingIterator for ReferencingBacktrackingIterator<'record, Iter> where
Iter: Iterator, [src]
Iter: Iterator,