#[inline]
fn nth(&mut self, n: usize) -> Option<I::Item> {
- // FIXME(#43234): merge these when borrow-checking gets better.
- if n == 0 {
- match self.peeked.take() {
- Some(v) => v,
- None => self.iter.nth(n),
- }
- } else {
- match self.peeked.take() {
- Some(None) => None,
- Some(Some(_)) => self.iter.nth(n - 1),
- None => self.iter.nth(n),
- }
+ match self.peeked.take() {
+ Some(None) => None,
+ Some(v @ Some(_)) if n == 0 => v,
+ Some(Some(_)) => self.iter.nth(n - 1),
+ None => self.iter.nth(n),
}
}
#[inline]
#[stable(feature = "rust1", since = "1.0.0")]
pub fn peek(&mut self) -> Option<&I::Item> {
- if self.peeked.is_none() {
- self.peeked = Some(self.iter.next());
- }
- match self.peeked {
- Some(Some(ref value)) => Some(value),
- Some(None) => None,
- _ => unreachable!(),
- }
+ let iter = &mut self.iter;
+ self.peeked.get_or_insert_with(|| iter.next()).as_ref()
}
}
#![feature(link_llvm_intrinsics)]
#![feature(never_type)]
#![feature(nll)]
+#![feature(bind_by_move_pattern_guards)]
#![feature(exhaustive_patterns)]
#![feature(no_core)]
#![feature(on_unimplemented)]