about summary refs log tree commit diff
path: root/src/libstd
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2014-02-24 22:17:02 -0800
committerbors <bors@rust-lang.org>2014-02-24 22:17:02 -0800
commit4243cad56bbd266872770218873900da22fed5ea (patch)
treee6641cd309453d27c829fdca475650b797b3ad48 /src/libstd
parent043c9721791731bbf7b9d8be354a65ed25b9a6d9 (diff)
parent7d85546721cf954606a2fe25a63e9fb9e8a256ad (diff)
downloadrust-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.rs1
-rw-r--r--src/libstd/io/net/ip.rs1
-rw-r--r--src/libstd/num/f32.rs1
-rw-r--r--src/libstd/num/f64.rs1
-rw-r--r--src/libstd/num/i16.rs1
-rw-r--r--src/libstd/num/i32.rs1
-rw-r--r--src/libstd/num/i64.rs1
-rw-r--r--src/libstd/num/i8.rs1
-rw-r--r--src/libstd/num/int.rs1
-rw-r--r--src/libstd/num/int_macros.rs3
-rw-r--r--src/libstd/num/u16.rs1
-rw-r--r--src/libstd/num/u32.rs1
-rw-r--r--src/libstd/num/u64.rs1
-rw-r--r--src/libstd/num/u8.rs1
-rw-r--r--src/libstd/num/uint.rs1
-rw-r--r--src/libstd/num/uint_macros.rs1
-rw-r--r--src/libstd/prelude.rs4
-rw-r--r--src/libstd/rand/reseeding.rs1
-rw-r--r--src/libstd/str.rs1
-rw-r--r--src/libstd/vec.rs50
-rw-r--r--src/libstd/vec_ng.rs19
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> {
         }
     }
 }
-