I suspect a more generally interesting solution would be a Counted iterator adaptor that keeps track of how many non-None values it's returned from next(). You could use this to validate that your Take iterator returned the expected number of values.
pub struct Counted<T> {
iter: T,
/// Incremented by 1 every time `next()` returns a non-`None` value
pub count: uint
}
impl<A, T: Iterator<A>> Iterator<A> for Counted<T> {
fn next(&mut self) -> Option<A> {
match self.iter.next() {
x@Some(_) => {
self.count += 1;
x
}
None => None
}
}
fn size_hint(&self) -> (uint, Option<uint>) {
self.iter.size_hint()
}
}
// plus various associated traits like DoubleEndedIterator
-Kevin
On May 30, 2014, at 9:31 AM, Andrew Poelstra <[email protected]> wrote:
> Hi guys,
>
>
> Take is an iterator adaptor which cuts off the contained iterator after
> some number of elements, always returning None.
>
> I find that I need to detect whether I'm getting None from a Take
> iterator because I've read all of the elements I expected or because the
> underlying iterator ran dry unexpectedly. (Specifically, I'm parsing
> some data from the network and want to detect an early EOM.)
>
>
> This seems like it might be only me, so I'm posing this to the list: if
> there was a function Take::is_done(&self) -> bool, which returned whether
> or not the Take had returned as many elements as it could, would that be
> generally useful?
>
> I'm happy to submit a PR but want to check that this is appropriate for
> the standard library.
>
>
>
> Thanks
>
> Andrew
>
>
>
> --
> Andrew Poelstra
> Mathematics Department, University of Texas at Austin
> Email: apoelstra at wpsoftware.net
> Web: http://www.wpsoftware.net/andrew
>
> "If they had taught a class on how to be the kind of citizen Dick Cheney
> worries about, I would have finished high school." --Edward Snowden
>
> _______________________________________________
> Rust-dev mailing list
> [email protected]
> https://mail.mozilla.org/listinfo/rust-dev
smime.p7s
Description: S/MIME cryptographic signature
_______________________________________________ Rust-dev mailing list [email protected] https://mail.mozilla.org/listinfo/rust-dev
