[][src]Struct backtracking_iterator::BacktrackingRecorder

pub struct BacktrackingRecorder<Iter> where
    Iter: Iterator
{ /* fields omitted */ }

A wrapper around an existing iterator to give it a historical representation with the ability to then produce copying and referencing backtracking iterators on the history

Methods

impl<Iter> BacktrackingRecorder<Iter> where
    Iter: Iterator
[src]

pub fn new(iterator: Iter) -> Self[src]

Create a BacktrackingRecorder from an existing iterator.

Important traits for ReferencingBacktrackingIterator<'record, Iter>
pub fn referencing<'record>(
    &'record mut self
) -> ReferencingBacktrackingIterator<'record, Iter>
[src]

Important traits for CopyingBacktrackingIterator<'record, I>
pub fn copying<'record>(
    &'record mut self
) -> CopyingBacktrackingIterator<'record, Iter> where
    Iter::Item: Clone
[src]

pub fn drain_history(&mut self) -> Vec<Iter::Item>[src]

Take all items out of the history.

extern crate backtracking_iterator;
use backtracking_iterator::{BacktrackingIterator, BacktrackingRecorder};

let vec_iter = vec![1_u8, 2, 3].into_iter();
let mut rec = BacktrackingRecorder::new(vec_iter);

{
  let mut bt_ref = rec.referencing();
  bt_ref.next(); // 1_u8
}

let mut history = rec.drain_history().into_iter();
// Repeats only what was in the history
assert!(history.next().unwrap() == 1_u8);
assert!(history.next().is_none());

Trait Implementations

impl<Iter> Record for BacktrackingRecorder<Iter> where
    Iter: Iterator
[src]

type RefPoint = usize

The type used to refer to positions in the history

impl<Iter, Item> IntoIterator for BacktrackingRecorder<Iter> where
    Iter: Iterator<Item = Item> + IntoIterator<Item = Item>, 
[src]

type Item = Item

The type of the elements being iterated over.

type IntoIter = Chain<IntoIter<Item>, Iter::IntoIter>

Which kind of iterator are we turning this into?

fn into_iter(self) -> Self::IntoIter[src]

Destroy the record and return an iterator which starts from the beginning of the history and chains into the originally-given iterator

extern crate backtracking_iterator;
use backtracking_iterator::{BacktrackingIterator, BacktrackingRecorder};

let vec_iter = vec![1_u8, 2, 3].into_iter();
let mut rec = BacktrackingRecorder::new(vec_iter);

{
  let mut bt_ref = rec.referencing();
  bt_ref.next(); // 1_u8
}

let mut rec_iter = rec.into_iter();
// Repeats the value in the history
assert!(rec_iter.next().unwrap() == 1_u8);
// And follows up with the ones not yet recorded
assert!(rec_iter.next().unwrap() == 2_u8);
assert!(rec_iter.next().unwrap() == 3_u8);
assert!(rec_iter.next().is_none());

Auto Trait Implementations

impl<Iter> Send for BacktrackingRecorder<Iter> where
    Iter: Send,
    <Iter as Iterator>::Item: Send

impl<Iter> Sync for BacktrackingRecorder<Iter> where
    Iter: Sync,
    <Iter as Iterator>::Item: Sync

Blanket Implementations

impl<T, U> Into for T where
    U: From<T>, 
[src]

impl<T> From for T[src]

impl<I> IntoIterator for I where
    I: Iterator
[src]

type Item = <I as Iterator>::Item

The type of the elements being iterated over.

type IntoIter = I

Which kind of iterator are we turning this into?

impl<T, U> TryFrom for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T> Borrow for T where
    T: ?Sized
[src]

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> BorrowMut for T where
    T: ?Sized
[src]

impl<T, U> TryInto for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.