diff options
| author | bors <bors@rust-lang.org> | 2013-08-15 18:23:14 -0700 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2013-08-15 18:23:14 -0700 |
| commit | 1ad0cf5841e2fb577c4c26a051067fdd06e24796 (patch) | |
| tree | 485cd217a260eb2b6357f5f7ff539fb7659c3673 /src/libstd | |
| parent | c4656cfd045ef436377b3dfeebaa265c2c92a00f (diff) | |
| parent | 3cec67bbf2ced2b01ef158ebb5ccc828e852d595 (diff) | |
| download | rust-1ad0cf5841e2fb577c4c26a051067fdd06e24796.tar.gz rust-1ad0cf5841e2fb577c4c26a051067fdd06e24796.zip | |
auto merge of #8503 : thestinger/rust/iterator, r=alexcrichton
Diffstat (limited to 'src/libstd')
| -rw-r--r-- | src/libstd/iterator.rs | 7 | ||||
| -rw-r--r-- | src/libstd/kinds.rs | 12 | ||||
| -rw-r--r-- | src/libstd/prelude.rs | 2 | ||||
| -rw-r--r-- | src/libstd/ptr.rs | 1 | ||||
| -rw-r--r-- | src/libstd/tuple.rs | 52 | ||||
| -rw-r--r-- | src/libstd/vec.rs | 54 |
6 files changed, 9 insertions, 119 deletions
diff --git a/src/libstd/iterator.rs b/src/libstd/iterator.rs index 1a5e364542b..34bbe9292a5 100644 --- a/src/libstd/iterator.rs +++ b/src/libstd/iterator.rs @@ -174,6 +174,7 @@ pub trait Iterator<A> { /// assert!(it.peek().is_none()); /// assert!(it.next().is_none()); /// ~~~ + #[inline] fn peekable(self) -> Peekable<A, Self> { Peekable{iter: self, peeked: None} } @@ -931,8 +932,7 @@ impl<'self, A, B, T: Iterator<A>> Iterator<B> for Map<'self, A, B, T> { } } -impl<'self, A, B, T: DoubleEndedIterator<A>> DoubleEndedIterator<B> -for Map<'self, A, B, T> { +impl<'self, A, B, T: DoubleEndedIterator<A>> DoubleEndedIterator<B> for Map<'self, A, B, T> { #[inline] fn next_back(&mut self) -> Option<B> { let next = self.iter.next_back(); @@ -940,8 +940,7 @@ for Map<'self, A, B, T> { } } -impl<'self, A, B, T: RandomAccessIterator<A>> RandomAccessIterator<B> -for Map<'self, A, B, T> { +impl<'self, A, B, T: RandomAccessIterator<A>> RandomAccessIterator<B> for Map<'self, A, B, T> { #[inline] fn indexable(&self) -> uint { self.iter.indexable() diff --git a/src/libstd/kinds.rs b/src/libstd/kinds.rs index 6b45ddddf7e..6a48e18a3cc 100644 --- a/src/libstd/kinds.rs +++ b/src/libstd/kinds.rs @@ -18,27 +18,21 @@ intrinsic properties of the type. These classifications, often called They cannot be implemented by user code, but are instead implemented by the compiler automatically for the types to which they apply. -The 2 kinds are - -* Send - owned types and types containing owned types. These types - may be transferred across task boundaries. - -* Freeze - types that are deeply immutable. - */ -#[allow(missing_doc)]; - +/// Types able to be transferred across task boundaries. #[lang="send"] pub trait Send { // empty. } +/// Types that are either immutable or have inherited mutability. #[lang="freeze"] pub trait Freeze { // empty. } +/// Types with a constant size known at compile-time. #[lang="sized"] pub trait Sized { // Empty. diff --git a/src/libstd/prelude.rs b/src/libstd/prelude.rs index deee49bc472..63f73002009 100644 --- a/src/libstd/prelude.rs +++ b/src/libstd/prelude.rs @@ -69,7 +69,7 @@ pub use str::{Str, StrVector, StrSlice, OwnedStr}; pub use from_str::FromStr; pub use to_bytes::IterBytes; pub use to_str::{ToStr, ToStrConsume}; -pub use tuple::{CopyableTuple, ImmutableTuple, ExtendedTupleOps}; +pub use tuple::{CopyableTuple, ImmutableTuple}; pub use tuple::{CloneableTuple1, ImmutableTuple1}; pub use tuple::{CloneableTuple2, CloneableTuple3, CloneableTuple4, CloneableTuple5}; pub use tuple::{CloneableTuple6, CloneableTuple7, CloneableTuple8, CloneableTuple9}; diff --git a/src/libstd/ptr.rs b/src/libstd/ptr.rs index b13d46d540d..50c25a2f722 100644 --- a/src/libstd/ptr.rs +++ b/src/libstd/ptr.rs @@ -47,6 +47,7 @@ pub unsafe fn buf_len<T>(buf: **T) -> uint { } impl<T> Clone for *T { + #[inline] fn clone(&self) -> *T { *self } diff --git a/src/libstd/tuple.rs b/src/libstd/tuple.rs index 8a3c024ede5..12073a1f4f0 100644 --- a/src/libstd/tuple.rs +++ b/src/libstd/tuple.rs @@ -13,9 +13,6 @@ #[allow(missing_doc)]; use clone::Clone; -use vec; -use vec::ImmutableVector; -use iterator::Iterator; pub use self::inner::*; @@ -79,55 +76,6 @@ impl<T, U> ImmutableTuple<T, U> for (T, U) { } } -pub trait ExtendedTupleOps<A,B> { - fn zip(&self) -> ~[(A, B)]; - fn map<C>(&self, f: &fn(a: &A, b: &B) -> C) -> ~[C]; -} - -impl<'self, - A:Clone, - B:Clone> - ExtendedTupleOps<A,B> for - (&'self [A], &'self [B]) { - #[inline] - fn zip(&self) -> ~[(A, B)] { - match *self { - (ref a, ref b) => { - vec::zip_slice(*a, *b) - } - } - } - - #[inline] - fn map<C>(&self, f: &fn(a: &A, b: &B) -> C) -> ~[C] { - match *self { - (ref a, ref b) => { - a.iter().zip(b.iter()).map(|(aa, bb)| f(aa, bb)).collect() - } - } - } -} - -impl<A:Clone, B:Clone> ExtendedTupleOps<A,B> for (~[A], ~[B]) { - #[inline] - fn zip(&self) -> ~[(A, B)] { - match *self { - (ref a, ref b) => { - vec::zip_slice(*a, *b) - } - } - } - - #[inline] - fn map<C>(&self, f: &fn(a: &A, b: &B) -> C) -> ~[C] { - match *self { - (ref a, ref b) => { - a.iter().zip(b.iter()).map(|(aa, bb)| f(aa, bb)).collect() - } - } - } -} - // macro for implementing n-ary tuple functions and operations macro_rules! tuple_impls { diff --git a/src/libstd/vec.rs b/src/libstd/vec.rs index a605ea4373f..7748c040a1d 100644 --- a/src/libstd/vec.rs +++ b/src/libstd/vec.rs @@ -391,39 +391,6 @@ pub fn unzip<T,U>(v: ~[(T, U)]) -> (~[T], ~[U]) { } /** - * Convert two vectors to a vector of pairs, by reference. As zip(). - */ -pub fn zip_slice<T:Clone,U:Clone>(v: &[T], u: &[U]) -> ~[(T, U)] { - let mut zipped = ~[]; - let sz = v.len(); - let mut i = 0u; - assert_eq!(sz, u.len()); - while i < sz { - zipped.push((v[i].clone(), u[i].clone())); - i += 1u; - } - zipped -} - -/** - * Convert two vectors to a vector of pairs. - * - * Returns a vector of tuples, where the i-th tuple contains the - * i-th elements from each of the input vectors. - */ -pub fn zip<T, U>(mut v: ~[T], mut u: ~[U]) -> ~[(T, U)] { - let mut i = v.len(); - assert_eq!(i, u.len()); - let mut w = with_capacity(i); - while i > 0 { - w.push((v.pop(),u.pop())); - i -= 1; - } - w.reverse(); - w -} - -/** * Iterate over all permutations of vector `v`. * * Permutations are produced in lexicographic order with respect to the order @@ -724,12 +691,6 @@ impl<T> Vector<T> for @[T] { } impl<'self, T> Container for &'self [T] { - /// Returns true if a vector contains no elements - #[inline] - fn is_empty(&self) -> bool { - self.as_imm_buf(|_p, len| len == 0u) - } - /// Returns the length of a vector #[inline] fn len(&self) -> uint { @@ -738,12 +699,6 @@ impl<'self, T> Container for &'self [T] { } impl<T> Container for ~[T] { - /// Returns true if a vector contains no elements - #[inline] - fn is_empty(&self) -> bool { - self.as_imm_buf(|_p, len| len == 0u) - } - /// Returns the length of a vector #[inline] fn len(&self) -> uint { @@ -2865,14 +2820,7 @@ mod tests { #[test] fn test_zip_unzip() { - let v1 = ~[1, 2, 3]; - let v2 = ~[4, 5, 6]; - - let z1 = zip(v1, v2); - - assert_eq!((1, 4), z1[0]); - assert_eq!((2, 5), z1[1]); - assert_eq!((3, 6), z1[2]); + let z1 = ~[(1, 4), (2, 5), (3, 6)]; let (left, right) = unzip(z1); |
