[−][src]Trait iterpipes::ResetablePipe
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(()));
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]
F: Fn(I) -> O,
impl<P> ResetablePipe for Bypass<P> where
P: ResetablePipe,
P::InputItem: Clone,
[src]
P: ResetablePipe,
P::InputItem: Clone,
impl<P> ResetablePipe for Optional<P> where
P: ResetablePipe,
[src]
P: ResetablePipe,
impl<P0, P1> ResetablePipe for Connector<P0, P1> where
P0: ResetablePipe,
P1: ResetablePipe<InputItem = P0::OutputItem>,
[src]
P0: ResetablePipe,
P1: ResetablePipe<InputItem = P0::OutputItem>,
impl<P: ResetablePipe> ResetablePipe for Composed<P> where
P: ResetablePipe,
[src]
P: ResetablePipe,
impl<P: ResetablePipe> ResetablePipe for Enumerate<P>
[src]
impl<T> ResetablePipe for Counter<T> where
T: AddAssign<T> + Copy,
[src]
T: AddAssign<T> + Copy,