pub use core::iter::range;
pub use core::iter::{FromIterator, Extend, IteratorExt};
pub use core::iter::{Iterator, DoubleEndedIterator, RandomAccessIterator};
- pub use core::iter::{IteratorCloneExt, CloneIteratorExt, DoubleEndedIteratorExt};
+ pub use core::iter::{IteratorCloneExt, CloneIteratorExt};
pub use core::iter::{IteratorOrdExt, MutableDoubleEndedIterator, ExactSizeIterator};
pub use core::kinds::{Copy, Send, Sized, Sync};
pub use core::mem::drop;
mod tests {
use std::boxed::Box;
use prelude::{Some, None, range, Vec, ToString, Clone, Greater, Less, Equal};
- use prelude::{SliceExt, Iterator, IteratorExt, DoubleEndedIteratorExt};
+ use prelude::{SliceExt, Iterator, IteratorExt};
use prelude::AsSlice;
use prelude::{RandomAccessIterator, Ord, SliceConcatExt};
use core::cell::Cell;
#[cfg(test)]
mod bench {
use super::*;
- use prelude::{SliceExt, IteratorExt, DoubleEndedIteratorExt, SliceConcatExt};
+ use prelude::{SliceExt, IteratorExt, SliceConcatExt};
use test::Bencher;
use test::black_box;
use char;
use char::Char;
use fmt;
-use iter::{range, DoubleEndedIteratorExt};
+use iter::{IteratorExt, range};
use num::{cast, Float, ToPrimitive};
use num::FpCategory as Fp;
use ops::FnOnce;
#![allow(unsigned_negation)]
use fmt;
-use iter::DoubleEndedIteratorExt;
+use iter::IteratorExt;
use num::{Int, cast};
use slice::SliceExt;
use str;
}
}).map(|(x, _)| x)
}
+
+ /// Change the direction of the iterator
+ ///
+ /// The flipped iterator swaps the ends on an iterator that can already
+ /// be iterated from the front and from the back.
+ ///
+ ///
+ /// If the iterator also implements RandomAccessIterator, the flipped
+ /// iterator is also random access, with the indices starting at the back
+ /// of the original iterator.
+ ///
+ /// Note: Random access with flipped indices still only applies to the first
+ /// `uint::MAX` elements of the original iterator.
+ #[inline]
+ #[stable]
+ fn rev(self) -> Rev<Self> {
+ Rev{iter: self}
+ }
}
#[unstable = "trait is unstable"]
fn next_back(&mut self) -> Option< <Self as Iterator>::Item>;
}
-/// Extension methods for double-ended iterators.
-#[unstable = "new extension trait convention"]
-pub trait DoubleEndedIteratorExt: DoubleEndedIterator + Sized {
- /// Change the direction of the iterator
- ///
- /// The flipped iterator swaps the ends on an iterator that can already
- /// be iterated from the front and from the back.
- ///
- ///
- /// If the iterator also implements RandomAccessIterator, the flipped
- /// iterator is also random access, with the indices starting at the back
- /// of the original iterator.
- ///
- /// Note: Random access with flipped indices still only applies to the first
- /// `uint::MAX` elements of the original iterator.
- #[inline]
- #[stable]
- fn rev(self) -> Rev<Self> {
- Rev{iter: self}
- }
-}
-
-#[unstable = "trait is unstable"]
-impl<I> DoubleEndedIteratorExt for I where I: DoubleEndedIterator {}
-
/// A double-ended iterator yielding mutable references
#[experimental = "not widely used"]
pub trait MutableDoubleEndedIterator {
pub use clone::Clone;
pub use cmp::{PartialEq, PartialOrd, Eq, Ord};
pub use iter::{Extend, IteratorExt};
-pub use iter::{Iterator, DoubleEndedIterator, DoubleEndedIteratorExt};
+pub use iter::{Iterator, DoubleEndedIterator};
pub use iter::{IteratorCloneExt, CloneIteratorExt};
pub use iter::{IteratorOrdExt, ExactSizeIterator, IteratorPairExt};
pub use option::Option::{mod, Some, None};
use cmp::{mod, Eq};
use default::Default;
use iter::range;
-use iter::{DoubleEndedIteratorExt, ExactSizeIterator};
+use iter::ExactSizeIterator;
use iter::{Map, Iterator, IteratorExt, DoubleEndedIterator};
use kinds::Sized;
use mem;
use cmp::{PartialEq, Eq, PartialOrd, Ord, Ordering};
use hash;
use io::Writer;
-use iter::{DoubleEndedIteratorExt, AdditiveIterator, Extend};
+use iter::{AdditiveIterator, Extend};
use iter::{Iterator, IteratorExt, Map};
use option::Option;
use option::Option::{None, Some};
use super::*;
use clone::Clone;
- use iter::{IteratorExt, DoubleEndedIteratorExt};
+ use iter::IteratorExt;
use option::Option::{mod, Some, None};
use path::GenericPath;
use slice::{AsSlice, SliceExt};
use cmp::{PartialEq, Eq, PartialOrd, Ord, Ordering};
use hash;
use io::Writer;
-use iter::{AdditiveIterator, DoubleEndedIteratorExt, Extend};
+use iter::{AdditiveIterator, Extend};
use iter::{Iterator, IteratorExt, Map, repeat};
use mem;
use option::Option;
use super::*;
use clone::Clone;
- use iter::{IteratorExt, DoubleEndedIteratorExt};
+ use iter::IteratorExt;
use option::Option::{mod, Some, None};
use path::GenericPath;
use slice::{AsSlice, SliceExt};
#[stable] #[doc(no_inline)] pub use cmp::{PartialEq, PartialOrd, Eq, Ord};
#[stable] #[doc(no_inline)] pub use iter::CloneIteratorExt;
#[stable] #[doc(no_inline)] pub use iter::DoubleEndedIterator;
-#[stable] #[doc(no_inline)] pub use iter::DoubleEndedIteratorExt;
#[stable] #[doc(no_inline)] pub use iter::ExactSizeIterator;
#[stable] #[doc(no_inline)] pub use iter::{Iterator, IteratorExt, Extend};
#[stable] #[doc(no_inline)] pub use iter::{IteratorCloneExt, IteratorOrdExt};