diff options
| author | bors <bors@rust-lang.org> | 2014-02-24 22:17:02 -0800 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2014-02-24 22:17:02 -0800 |
| commit | 4243cad56bbd266872770218873900da22fed5ea (patch) | |
| tree | e6641cd309453d27c829fdca475650b797b3ad48 /src/libstd | |
| parent | 043c9721791731bbf7b9d8be354a65ed25b9a6d9 (diff) | |
| parent | 7d85546721cf954606a2fe25a63e9fb9e8a256ad (diff) | |
| download | rust-4243cad56bbd266872770218873900da22fed5ea.tar.gz rust-4243cad56bbd266872770218873900da22fed5ea.zip | |
auto merge of #12535 : alexcrichton/rust/rollup, r=alexcrichton
Closes #12474 (rustc: Don't error on the rlib symlinks) r=brson
Closes #12475 (Use lines_any() when parsing output form "ar") r=brson
Closes #12476 (Remove some obsolete ignored tests) r=alexcrichton
Closes #12481 (Make .swap_remove return Option<T>) r=brson
Closes #12485 (Remove some non-essential trait re-exports from the prelude.) r=brson
Closes #12489 (Handle multibyte characters in source files better) r=alexcrichton
Closes #12494 (Mark by-value parameters that are passed on the stack as nocapture) r=nmatsakis
Closes #12497 (syntax: allow stmt/expr macro invocations to be delimited by {}) r=alexcrichton
Closes #12508 (Match binding is assignment) r=nmatsakis
Closes #12513 (Run the travis build as one large command) r=huonw
Closes #12515 (Update source code layout in src/) r=alexcrichton
Closes #12521 (Tutorial: Add std::num::sqrt to the example) r=cmr
Closes #12529 (test: single-variant enum can't be dereferenced) r=huonw
Diffstat (limited to 'src/libstd')
| -rw-r--r-- | src/libstd/bool.rs | 1 | ||||
| -rw-r--r-- | src/libstd/io/net/ip.rs | 1 | ||||
| -rw-r--r-- | src/libstd/num/f32.rs | 1 | ||||
| -rw-r--r-- | src/libstd/num/f64.rs | 1 | ||||
| -rw-r--r-- | src/libstd/num/i16.rs | 1 | ||||
| -rw-r--r-- | src/libstd/num/i32.rs | 1 | ||||
| -rw-r--r-- | src/libstd/num/i64.rs | 1 | ||||
| -rw-r--r-- | src/libstd/num/i8.rs | 1 | ||||
| -rw-r--r-- | src/libstd/num/int.rs | 1 | ||||
| -rw-r--r-- | src/libstd/num/int_macros.rs | 3 | ||||
| -rw-r--r-- | src/libstd/num/u16.rs | 1 | ||||
| -rw-r--r-- | src/libstd/num/u32.rs | 1 | ||||
| -rw-r--r-- | src/libstd/num/u64.rs | 1 | ||||
| -rw-r--r-- | src/libstd/num/u8.rs | 1 | ||||
| -rw-r--r-- | src/libstd/num/uint.rs | 1 | ||||
| -rw-r--r-- | src/libstd/num/uint_macros.rs | 1 | ||||
| -rw-r--r-- | src/libstd/prelude.rs | 4 | ||||
| -rw-r--r-- | src/libstd/rand/reseeding.rs | 1 | ||||
| -rw-r--r-- | src/libstd/str.rs | 1 | ||||
| -rw-r--r-- | src/libstd/vec.rs | 50 | ||||
| -rw-r--r-- | src/libstd/vec_ng.rs | 19 |
21 files changed, 62 insertions, 31 deletions
diff --git a/src/libstd/bool.rs b/src/libstd/bool.rs index 918d42e1bce..2376603fcc8 100644 --- a/src/libstd/bool.rs +++ b/src/libstd/bool.rs @@ -295,6 +295,7 @@ impl Default for bool { mod tests { use prelude::*; use super::all_values; + use from_str::FromStr; #[test] fn test_bool() { diff --git a/src/libstd/io/net/ip.rs b/src/libstd/io/net/ip.rs index e4f36764323..f67ba8fce03 100644 --- a/src/libstd/io/net/ip.rs +++ b/src/libstd/io/net/ip.rs @@ -340,6 +340,7 @@ impl FromStr for SocketAddr { mod test { use prelude::*; use super::*; + use from_str::FromStr; #[test] fn test_from_str_ipv4() { diff --git a/src/libstd/num/f32.rs b/src/libstd/num/f32.rs index a98fd31c457..a686edef99e 100644 --- a/src/libstd/num/f32.rs +++ b/src/libstd/num/f32.rs @@ -15,6 +15,7 @@ use prelude::*; use cmath; use default::Default; +use from_str::FromStr; use libc::{c_float, c_int}; use num::{FPCategory, FPNaN, FPInfinite , FPZero, FPSubnormal, FPNormal}; use num::{Zero, One, Bounded, strconv}; diff --git a/src/libstd/num/f64.rs b/src/libstd/num/f64.rs index 5975ce40d84..026bd651e0e 100644 --- a/src/libstd/num/f64.rs +++ b/src/libstd/num/f64.rs @@ -16,6 +16,7 @@ use prelude::*; use cmath; use default::Default; +use from_str::FromStr; use libc::{c_double, c_int}; use num::{FPCategory, FPNaN, FPInfinite , FPZero, FPSubnormal, FPNormal}; use num::{Zero, One, Bounded, strconv}; diff --git a/src/libstd/num/i16.rs b/src/libstd/num/i16.rs index 141626ed98a..0ecb55e5106 100644 --- a/src/libstd/num/i16.rs +++ b/src/libstd/num/i16.rs @@ -15,6 +15,7 @@ use prelude::*; use default::Default; +use from_str::FromStr; use num::{Bitwise, Bounded, CheckedAdd, CheckedSub, CheckedMul}; use num::{CheckedDiv, Zero, One, strconv}; use num::{ToStrRadix, FromStrRadix}; diff --git a/src/libstd/num/i32.rs b/src/libstd/num/i32.rs index a43a6e6a288..0526f2c488b 100644 --- a/src/libstd/num/i32.rs +++ b/src/libstd/num/i32.rs @@ -15,6 +15,7 @@ use prelude::*; use default::Default; +use from_str::FromStr; use num::{Bitwise, Bounded, CheckedAdd, CheckedSub, CheckedMul}; use num::{CheckedDiv, Zero, One, strconv}; use num::{ToStrRadix, FromStrRadix}; diff --git a/src/libstd/num/i64.rs b/src/libstd/num/i64.rs index e8503d808a7..0c1c01dbf4a 100644 --- a/src/libstd/num/i64.rs +++ b/src/libstd/num/i64.rs @@ -15,6 +15,7 @@ use prelude::*; use default::Default; +use from_str::FromStr; #[cfg(target_word_size = "64")] use num::CheckedMul; use num::{Bitwise, Bounded, CheckedAdd, CheckedSub}; diff --git a/src/libstd/num/i8.rs b/src/libstd/num/i8.rs index 9f857ff40ff..881cc46201e 100644 --- a/src/libstd/num/i8.rs +++ b/src/libstd/num/i8.rs @@ -15,6 +15,7 @@ use prelude::*; use default::Default; +use from_str::FromStr; use num::{Bitwise, Bounded, CheckedAdd, CheckedSub, CheckedMul}; use num::{CheckedDiv, Zero, One, strconv}; use num::{ToStrRadix, FromStrRadix}; diff --git a/src/libstd/num/int.rs b/src/libstd/num/int.rs index 6d1a50b724f..83c9e8ea855 100644 --- a/src/libstd/num/int.rs +++ b/src/libstd/num/int.rs @@ -15,6 +15,7 @@ use prelude::*; use default::Default; +use from_str::FromStr; use num::{Bitwise, Bounded, CheckedAdd, CheckedSub, CheckedMul}; use num::{CheckedDiv, Zero, One, strconv}; use num::{ToStrRadix, FromStrRadix}; diff --git a/src/libstd/num/int_macros.rs b/src/libstd/num/int_macros.rs index 030aa2d81fa..ea62a3ec374 100644 --- a/src/libstd/num/int_macros.rs +++ b/src/libstd/num/int_macros.rs @@ -295,8 +295,9 @@ mod tests { use int; use i32; use num; - use num::CheckedDiv; use num::Bitwise; + use num::CheckedDiv; + use num::ToStrRadix; #[test] fn test_overflows() { diff --git a/src/libstd/num/u16.rs b/src/libstd/num/u16.rs index da0293b3418..d1de1ff0a72 100644 --- a/src/libstd/num/u16.rs +++ b/src/libstd/num/u16.rs @@ -15,6 +15,7 @@ use prelude::*; use default::Default; +use from_str::FromStr; use num::{Bitwise, Bounded}; use num::{CheckedAdd, CheckedSub, CheckedMul}; use num::{CheckedDiv, Zero, One, strconv}; diff --git a/src/libstd/num/u32.rs b/src/libstd/num/u32.rs index b103e18f701..1caec678025 100644 --- a/src/libstd/num/u32.rs +++ b/src/libstd/num/u32.rs @@ -15,6 +15,7 @@ use prelude::*; use default::Default; +use from_str::FromStr; use num::{Bitwise, Bounded}; use num::{CheckedAdd, CheckedSub, CheckedMul}; use num::{CheckedDiv, Zero, One, strconv}; diff --git a/src/libstd/num/u64.rs b/src/libstd/num/u64.rs index f7956f0128e..ab495834eaa 100644 --- a/src/libstd/num/u64.rs +++ b/src/libstd/num/u64.rs @@ -15,6 +15,7 @@ use prelude::*; use default::Default; +use from_str::FromStr; use num::{Bitwise, Bounded}; #[cfg(target_word_size = "64")] use num::CheckedMul; diff --git a/src/libstd/num/u8.rs b/src/libstd/num/u8.rs index e6ce9c72e96..a0ef574f6cf 100644 --- a/src/libstd/num/u8.rs +++ b/src/libstd/num/u8.rs @@ -15,6 +15,7 @@ use prelude::*; use default::Default; +use from_str::FromStr; use num::{Bitwise, Bounded}; use num::{CheckedAdd, CheckedSub, CheckedMul}; use num::{CheckedDiv, Zero, One, strconv}; diff --git a/src/libstd/num/uint.rs b/src/libstd/num/uint.rs index a8c85787f7e..95d4a3a50be 100644 --- a/src/libstd/num/uint.rs +++ b/src/libstd/num/uint.rs @@ -15,6 +15,7 @@ use prelude::*; use default::Default; +use from_str::FromStr; use num::{Bitwise, Bounded}; use num::{CheckedAdd, CheckedSub, CheckedMul}; use num::{CheckedDiv, Zero, One, strconv}; diff --git a/src/libstd/num/uint_macros.rs b/src/libstd/num/uint_macros.rs index 001927e6033..719afeb7878 100644 --- a/src/libstd/num/uint_macros.rs +++ b/src/libstd/num/uint_macros.rs @@ -233,6 +233,7 @@ mod tests { use num; use num::CheckedDiv; use num::Bitwise; + use num::ToStrRadix; use u16; #[test] diff --git a/src/libstd/prelude.rs b/src/libstd/prelude.rs index ce746852dae..cc1a14a4f82 100644 --- a/src/libstd/prelude.rs +++ b/src/libstd/prelude.rs @@ -43,14 +43,12 @@ pub use char::Char; pub use clone::{Clone, DeepClone}; pub use cmp::{Eq, Ord, TotalEq, TotalOrd, Ordering, Less, Equal, Greater, Equiv}; pub use container::{Container, Mutable, Map, MutableMap, Set, MutableSet}; -pub use default::Default; -pub use from_str::FromStr; pub use iter::{FromIterator, Extendable}; pub use iter::{Iterator, DoubleEndedIterator, RandomAccessIterator, CloneableIterator}; pub use iter::{OrdIterator, MutableDoubleEndedIterator, ExactSize}; pub use num::{Num, NumCast, CheckedAdd, CheckedSub, CheckedMul}; pub use num::{Signed, Unsigned, Round}; -pub use num::{Primitive, Int, Float, ToStrRadix, ToPrimitive, FromPrimitive}; +pub use num::{Primitive, Int, Float, ToPrimitive, FromPrimitive}; pub use path::{GenericPath, Path, PosixPath, WindowsPath}; pub use ptr::RawPtr; pub use io::{Buffer, Writer, Reader, Seek}; diff --git a/src/libstd/rand/reseeding.rs b/src/libstd/rand/reseeding.rs index 758ca22e5c3..a916ce173fb 100644 --- a/src/libstd/rand/reseeding.rs +++ b/src/libstd/rand/reseeding.rs @@ -144,6 +144,7 @@ impl Default for ReseedWithDefault { mod test { use prelude::*; use super::*; + use default::Default; use rand::{SeedableRng, Rng}; struct Counter { diff --git a/src/libstd/str.rs b/src/libstd/str.rs index daaf46be187..12044b4a06a 100644 --- a/src/libstd/str.rs +++ b/src/libstd/str.rs @@ -3072,6 +3072,7 @@ impl Default for ~str { #[cfg(test)] mod tests { use iter::AdditiveIterator; + use default::Default; use prelude::*; use str::*; diff --git a/src/libstd/vec.rs b/src/libstd/vec.rs index d8cb8bf3ed1..cf49ea53562 100644 --- a/src/libstd/vec.rs +++ b/src/libstd/vec.rs @@ -1368,13 +1368,24 @@ pub trait OwnedVector<T> { /// ``` fn remove(&mut self, i: uint) -> Option<T>; - /** - * Remove an element from anywhere in the vector and return it, replacing it - * with the last element. This does not preserve ordering, but is O(1). - * - * Fails if index >= length. - */ - fn swap_remove(&mut self, index: uint) -> T; + /// Remove an element from anywhere in the vector and return it, replacing it + /// with the last element. This does not preserve ordering, but is O(1). + /// + /// Returns `None` if `index` is out of bounds. + /// + /// # Example + /// ```rust + /// let mut v = ~[~"foo", ~"bar", ~"baz", ~"qux"]; + /// + /// assert_eq!(v.swap_remove(1), Some(~"bar")); + /// assert_eq!(v, ~[~"foo", ~"qux", ~"baz"]); + /// + /// assert_eq!(v.swap_remove(0), Some(~"foo")); + /// assert_eq!(v, ~[~"baz", ~"qux"]); + /// + /// assert_eq!(v.swap_remove(2), None); + /// ``` + fn swap_remove(&mut self, index: uint) -> Option<T>; /// Shorten a vector, dropping excess elements. fn truncate(&mut self, newlen: uint); @@ -1580,15 +1591,14 @@ impl<T> OwnedVector<T> for ~[T] { None } } - fn swap_remove(&mut self, index: uint) -> T { + fn swap_remove(&mut self, index: uint) -> Option<T> { let ln = self.len(); - if index >= ln { - fail!("vec::swap_remove - index {} >= length {}", index, ln); - } if index < ln - 1 { self.swap(index, ln - 1); + } else if index >= ln { + return None } - self.pop().unwrap() + self.pop() } fn truncate(&mut self, newlen: uint) { let oldlen = self.len(); @@ -3194,15 +3204,15 @@ mod tests { fn test_swap_remove() { let mut v = ~[1, 2, 3, 4, 5]; let mut e = v.swap_remove(0); - assert_eq!(v.len(), 4); - assert_eq!(e, 1); - assert_eq!(v[0], 5); + assert_eq!(e, Some(1)); + assert_eq!(v, ~[5, 2, 3, 4]); e = v.swap_remove(3); - assert_eq!(v.len(), 3); - assert_eq!(e, 4); - assert_eq!(v[0], 5); - assert_eq!(v[1], 2); - assert_eq!(v[2], 3); + assert_eq!(e, Some(4)); + assert_eq!(v, ~[5, 2, 3]); + + e = v.swap_remove(3); + assert_eq!(e, None); + assert_eq!(v, ~[5, 2, 3]); } #[test] diff --git a/src/libstd/vec_ng.rs b/src/libstd/vec_ng.rs index 3532e7b26a4..52d3405f8c1 100644 --- a/src/libstd/vec_ng.rs +++ b/src/libstd/vec_ng.rs @@ -18,6 +18,7 @@ use container::Container; use iter::{DoubleEndedIterator, FromIterator, Iterator}; use libc::{free, c_void}; use mem::{size_of, move_val_init}; +use num; use num::CheckedMul; use ops::Drop; use option::{None, Option, Some}; @@ -136,6 +137,12 @@ impl<T> Vec<T> { self.cap } + pub fn reserve(&mut self, capacity: uint) { + if capacity >= self.len { + self.reserve_exact(num::next_power_of_two(capacity)) + } + } + pub fn reserve_exact(&mut self, capacity: uint) { if capacity >= self.len { let size = capacity.checked_mul(&size_of::<T>()).expect("capacity overflow"); @@ -277,15 +284,14 @@ impl<T> Vec<T> { } #[inline] - pub fn swap_remove(&mut self, index: uint) -> T { + pub fn swap_remove(&mut self, index: uint) -> Option<T> { let length = self.len(); - if index >= length { - fail!("Vec::swap_remove - index {} >= length {}", index, length); - } if index < length - 1 { self.as_mut_slice().swap(index, length - 1); + } else if index >= length { + return None } - self.pop().unwrap() + self.pop() } #[inline] @@ -297,7 +303,7 @@ impl<T> Vec<T> { let len = self.len(); assert!(index <= len); // space for the new element - self.reserve_exact(len + 1); + self.reserve(len + 1); unsafe { // infallible // The spot to put the new value @@ -392,4 +398,3 @@ impl<T> Drop for MoveItems<T> { } } } - |
