In this case I think it would be simpler to just zip the iterator with
range(0, n) than implement a whole Counted iterator.
On May 31, 2014 4:02 AM, "Kevin Ballard" <[email protected]> wrote:

> 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
>
>
> _______________________________________________
> Rust-dev mailing list
> [email protected]
> https://mail.mozilla.org/listinfo/rust-dev
>
>
_______________________________________________
Rust-dev mailing list
[email protected]
https://mail.mozilla.org/listinfo/rust-dev

Reply via email to