[−][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,
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<Iter> BacktrackingIterator for ConcurrentCopyingBacktrackingIterator<Iter> where
Iter: Iterator,
Iter::Item: Clone,
[src]
Iter: Iterator,
Iter::Item: Clone,