[][src]Trait iterpipes::ResetablePipe

pub trait ResetablePipe: Pipe {
    fn reset(&mut self);
}

A pipe that can be reseted to its initial state.

Pipes may have an internal state which they also may modify with every item they process. However, there a situations where wants to reset a pipeline to it's initial state without needing to reconstruct it. Pipes that have the ability to be reseted to their inital state implement this trait. After reset was called, the pipe is reseted to it's construction state.

Many decorators implement ResetablePipe where possible, which means that pipelines that were constructed from resetable pipes will be resetable too. One major exception is the LazyMut pipe. Since the function object may modify it's state and doesn't offer a way to reset this state, a pipeline that contains a LazyMut is not resetable.

Required methods

fn reset(&mut self)

Reset the state of the pipe.

If implemented, this method resets the pipe to the state it had before the first output was retrieved. Since all decorator pipes of this crate implement it, it can be be used to reset the state of a whole pipeline without needing to constructing it again.

If your pipe can't be reseted, you may use the unimplemented!() macro. However, you should note this behavior in your documentation!

Example

use iterpipes::*;

/// A pipe that counts up.
struct Counter {
    index: usize,
}

impl Pipe for Counter {
    type InputItem = ();
    type OutputItem = usize;

    fn next(&mut self, _: ()) -> usize {
        let output = self.index;
        self.index += 1;
        output
    }
}

impl ResetablePipe for Counter {
    fn reset(&mut self) {
        self.index = 0;
    }
}

let mut counter = Counter { index: 0};
assert_eq!(0, counter.next(()));
assert_eq!(1, counter.next(()));
counter.reset();
assert_eq!(0, counter.next(()));
assert_eq!(1, counter.next(()));
Loading content...

Implementations on Foreign Types

impl ResetablePipe for ()[src]

impl<'a, P: ResetablePipe + ?Sized> ResetablePipe for &'a mut P[src]

impl<A: ResetablePipe> ResetablePipe for (A,)[src]

impl<A: ResetablePipe, B: ResetablePipe> ResetablePipe for (A, B)[src]

impl<A: ResetablePipe, B: ResetablePipe, C: ResetablePipe> ResetablePipe for (A, B, C)[src]

impl<A: ResetablePipe, B: ResetablePipe, C: ResetablePipe, D: ResetablePipe> ResetablePipe for (A, B, C, D)[src]

impl<A: ResetablePipe, B: ResetablePipe, C: ResetablePipe, D: ResetablePipe, E: ResetablePipe> ResetablePipe for (A, B, C, D, E)[src]

impl<A: ResetablePipe, B: ResetablePipe, C: ResetablePipe, D: ResetablePipe, E: ResetablePipe, F: ResetablePipe> ResetablePipe for (A, B, C, D, E, F)[src]

impl<A: ResetablePipe, B: ResetablePipe, C: ResetablePipe, D: ResetablePipe, E: ResetablePipe, F: ResetablePipe, G: ResetablePipe> ResetablePipe for (A, B, C, D, E, F, G)[src]

impl<A: ResetablePipe, B: ResetablePipe, C: ResetablePipe, D: ResetablePipe, E: ResetablePipe, F: ResetablePipe, G: ResetablePipe, H: ResetablePipe> ResetablePipe for (A, B, C, D, E, F, G, H)[src]

impl<A: ResetablePipe, B: ResetablePipe, C: ResetablePipe, D: ResetablePipe, E: ResetablePipe, F: ResetablePipe, G: ResetablePipe, H: ResetablePipe, I: ResetablePipe> ResetablePipe for (A, B, C, D, E, F, G, H, I)[src]

impl<A: ResetablePipe, B: ResetablePipe, C: ResetablePipe, D: ResetablePipe, E: ResetablePipe, F: ResetablePipe, G: ResetablePipe, H: ResetablePipe, I: ResetablePipe, J: ResetablePipe> ResetablePipe for (A, B, C, D, E, F, G, H, I, J)[src]

impl<A: ResetablePipe, B: ResetablePipe, C: ResetablePipe, D: ResetablePipe, E: ResetablePipe, F: ResetablePipe, G: ResetablePipe, H: ResetablePipe, I: ResetablePipe, J: ResetablePipe, K: ResetablePipe> ResetablePipe for (A, B, C, D, E, F, G, H, I, J, K)[src]

impl<A: ResetablePipe, B: ResetablePipe, C: ResetablePipe, D: ResetablePipe, E: ResetablePipe, F: ResetablePipe, G: ResetablePipe, H: ResetablePipe, I: ResetablePipe, J: ResetablePipe, K: ResetablePipe, L: ResetablePipe> ResetablePipe for (A, B, C, D, E, F, G, H, I, J, K, L)[src]

Loading content...

Implementors

impl<I, O, F> ResetablePipe for Lazy<I, O, F> where
    F: Fn(I) -> O, 
[src]

impl<P> ResetablePipe for Bypass<P> where
    P: ResetablePipe,
    P::InputItem: Clone
[src]

impl<P> ResetablePipe for Optional<P> where
    P: ResetablePipe
[src]

impl<P0, P1> ResetablePipe for Connector<P0, P1> where
    P0: ResetablePipe,
    P1: ResetablePipe<InputItem = P0::OutputItem>, 
[src]

impl<P: ResetablePipe> ResetablePipe for Composed<P> where
    P: ResetablePipe
[src]

impl<P: ResetablePipe> ResetablePipe for Enumerate<P>[src]

impl<T> ResetablePipe for Counter<T> where
    T: AddAssign<T> + Copy
[src]

impl<T> ResetablePipe for Ditto<T>[src]

Loading content...