diff options
| author | Alex Crichton <alex@alexcrichton.com> | 2014-05-10 14:19:26 -0700 |
|---|---|---|
| committer | Alex Crichton <alex@alexcrichton.com> | 2014-05-15 23:22:06 -0700 |
| commit | c36525200240b1fae7e6871790b60aec856c2147 (patch) | |
| tree | 6d96d91abda197a879a023b6b8409d80d9a47879 /src/libstd/num | |
| parent | bcab97a32eca0bec431ff3d1065f07e10c600d80 (diff) | |
| download | rust-c36525200240b1fae7e6871790b60aec856c2147.tar.gz rust-c36525200240b1fae7e6871790b60aec856c2147.zip | |
std: Delegate some integer formatting to core::fmt
In an attempt to phase out the std::num::strconv module's string formatting functionality, this commit reimplements some provided methods for formatting integers on top of format!() instead of the custom (and slower) implementation inside of num::strconv. Primarily, this deprecates int_to_str_bytes_common
Diffstat (limited to 'src/libstd/num')
| -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 | 32 | ||||
| -rw-r--r-- | src/libstd/num/strconv.rs | 2 | ||||
| -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 | 28 |
13 files changed, 28 insertions, 44 deletions
diff --git a/src/libstd/num/i16.rs b/src/libstd/num/i16.rs index d8f1c108b74..396037d0dba 100644 --- a/src/libstd/num/i16.rs +++ b/src/libstd/num/i16.rs @@ -15,7 +15,6 @@ use num::{ToStrRadix, FromStrRadix}; use num::strconv; use option::Option; use slice::ImmutableVector; -use str; pub use core::i16::{BITS, BYTES, MIN, MAX}; diff --git a/src/libstd/num/i32.rs b/src/libstd/num/i32.rs index 9cc8981fc13..5640e82d077 100644 --- a/src/libstd/num/i32.rs +++ b/src/libstd/num/i32.rs @@ -15,7 +15,6 @@ use num::{ToStrRadix, FromStrRadix}; use num::strconv; use option::Option; use slice::ImmutableVector; -use str; pub use core::i32::{BITS, BYTES, MIN, MAX}; diff --git a/src/libstd/num/i64.rs b/src/libstd/num/i64.rs index 4f7fe32cc70..40245691e34 100644 --- a/src/libstd/num/i64.rs +++ b/src/libstd/num/i64.rs @@ -15,7 +15,6 @@ use num::{ToStrRadix, FromStrRadix}; use num::strconv; use option::Option; use slice::ImmutableVector; -use str; pub use core::i64::{BITS, BYTES, MIN, MAX}; diff --git a/src/libstd/num/i8.rs b/src/libstd/num/i8.rs index bea315d8683..7ddddd893e2 100644 --- a/src/libstd/num/i8.rs +++ b/src/libstd/num/i8.rs @@ -15,7 +15,6 @@ use num::{ToStrRadix, FromStrRadix}; use num::strconv; use option::Option; use slice::ImmutableVector; -use str; pub use core::i8::{BITS, BYTES, MIN, MAX}; diff --git a/src/libstd/num/int.rs b/src/libstd/num/int.rs index d6a7fd1660b..dc4d80601b7 100644 --- a/src/libstd/num/int.rs +++ b/src/libstd/num/int.rs @@ -15,7 +15,6 @@ use num::{ToStrRadix, FromStrRadix}; use num::strconv; use option::Option; use slice::ImmutableVector; -use str; pub use core::int::{BITS, BYTES, MIN, MAX}; diff --git a/src/libstd/num/int_macros.rs b/src/libstd/num/int_macros.rs index fcdb63f5ad5..e1743b301e9 100644 --- a/src/libstd/num/int_macros.rs +++ b/src/libstd/num/int_macros.rs @@ -62,31 +62,31 @@ impl FromStrRadix for $T { /// ``` #[inline] pub fn to_str_bytes<U>(n: $T, radix: uint, f: |v: &[u8]| -> U) -> U { + use io::{Writer, Seek}; // The radix can be as low as 2, so we need at least 64 characters for a // base 2 number, and then we need another for a possible '-' character. let mut buf = [0u8, ..65]; - let mut cur = 0; - strconv::int_to_str_bytes_common(n, radix, strconv::SignNeg, |i| { - buf[cur] = i; - cur += 1; - }); - f(buf.slice(0, cur)) + let amt = { + let mut wr = ::io::BufWriter::new(buf); + if radix == 10 { + (write!(&mut wr, "{}", n)).unwrap() + } else { + (write!(&mut wr, "{}", ::fmt::radix(n, radix as u8))).unwrap() + } + wr.tell().unwrap() as uint + }; + f(buf.slice(0, amt)) } impl ToStrRadix for $T { /// Convert to a string in a given base. #[inline] fn to_str_radix(&self, radix: uint) -> ~str { - use slice::Vector; - use str::StrAllocating; - - let mut buf = ::vec::Vec::new(); - strconv::int_to_str_bytes_common(*self, radix, strconv::SignNeg, |i| { - buf.push(i); - }); - // We know we generated valid utf-8, so we don't need to go through that - // check. - unsafe { str::raw::from_utf8(buf.as_slice()).to_owned() } + if radix == 10 { + format!("{}", *self) + } else { + format!("{}", ::fmt::radix(*self, radix as u8)) + } } } diff --git a/src/libstd/num/strconv.rs b/src/libstd/num/strconv.rs index c2ec5c75fc1..c6cb57665a3 100644 --- a/src/libstd/num/strconv.rs +++ b/src/libstd/num/strconv.rs @@ -170,6 +170,7 @@ static NAN_BUF: [u8, ..3] = ['N' as u8, 'a' as u8, 'N' as u8]; * # Failure * - Fails if `radix` < 2 or `radix` > 36. */ +#[deprecated = "format!() and friends should be favored instead"] pub fn int_to_str_bytes_common<T: Int>(num: T, radix: uint, sign: SignFormat, f: |u8|) { assert!(2 <= radix && radix <= 36); @@ -258,6 +259,7 @@ pub fn int_to_str_bytes_common<T: Int>(num: T, radix: uint, sign: SignFormat, f: * - Fails if `radix` > 25 and `exp_format` is `ExpBin` due to conflict * between digit and exponent sign `'p'`. */ +#[allow(deprecated)] pub fn float_to_str_bytes_common<T:NumCast+Zero+One+Eq+Ord+Float+ Div<T,T>+Neg<T>+Rem<T,T>+Mul<T,T>>( num: T, radix: uint, negative_zero: bool, diff --git a/src/libstd/num/u16.rs b/src/libstd/num/u16.rs index 5c93ca6c36b..65ac46af5aa 100644 --- a/src/libstd/num/u16.rs +++ b/src/libstd/num/u16.rs @@ -15,7 +15,6 @@ use num::{ToStrRadix, FromStrRadix}; use num::strconv; use option::Option; use slice::ImmutableVector; -use str; pub use core::u16::{BITS, BYTES, MIN, MAX}; diff --git a/src/libstd/num/u32.rs b/src/libstd/num/u32.rs index 436eae7cd14..d549e4d0d63 100644 --- a/src/libstd/num/u32.rs +++ b/src/libstd/num/u32.rs @@ -15,7 +15,6 @@ use num::{ToStrRadix, FromStrRadix}; use num::strconv; use option::Option; use slice::ImmutableVector; -use str; pub use core::u32::{BITS, BYTES, MIN, MAX}; diff --git a/src/libstd/num/u64.rs b/src/libstd/num/u64.rs index c654d6fbe31..3773e56f4d1 100644 --- a/src/libstd/num/u64.rs +++ b/src/libstd/num/u64.rs @@ -15,7 +15,6 @@ use num::{ToStrRadix, FromStrRadix}; use num::strconv; use option::Option; use slice::ImmutableVector; -use str; pub use core::u64::{BITS, BYTES, MIN, MAX}; diff --git a/src/libstd/num/u8.rs b/src/libstd/num/u8.rs index 7051b9191be..372e38d6652 100644 --- a/src/libstd/num/u8.rs +++ b/src/libstd/num/u8.rs @@ -15,7 +15,6 @@ use num::{ToStrRadix, FromStrRadix}; use num::strconv; use option::Option; use slice::ImmutableVector; -use str; pub use core::u8::{BITS, BYTES, MIN, MAX}; diff --git a/src/libstd/num/uint.rs b/src/libstd/num/uint.rs index d1c3e96b2c9..c419276fa24 100644 --- a/src/libstd/num/uint.rs +++ b/src/libstd/num/uint.rs @@ -15,7 +15,6 @@ use num::{ToStrRadix, FromStrRadix}; use num::strconv; use option::Option; use slice::ImmutableVector; -use str; pub use core::uint::{BITS, BYTES, MIN, MAX}; diff --git a/src/libstd/num/uint_macros.rs b/src/libstd/num/uint_macros.rs index 0795238a49c..7977c647606 100644 --- a/src/libstd/num/uint_macros.rs +++ b/src/libstd/num/uint_macros.rs @@ -63,31 +63,23 @@ impl FromStrRadix for $T { /// ``` #[inline] pub fn to_str_bytes<U>(n: $T, radix: uint, f: |v: &[u8]| -> U) -> U { + use io::{Writer, Seek}; // The radix can be as low as 2, so we need at least 64 characters for a - // base 2 number. - let mut buf = [0u8, ..64]; - let mut cur = 0; - strconv::int_to_str_bytes_common(n, radix, strconv::SignNone, |i| { - buf[cur] = i; - cur += 1; - }); - f(buf.slice(0, cur)) + // base 2 number, and then we need another for a possible '-' character. + let mut buf = [0u8, ..65]; + let amt = { + let mut wr = ::io::BufWriter::new(buf); + (write!(&mut wr, "{}", ::fmt::radix(n, radix as u8))).unwrap(); + wr.tell().unwrap() as uint + }; + f(buf.slice(0, amt)) } impl ToStrRadix for $T { /// Convert to a string in a given base. #[inline] fn to_str_radix(&self, radix: uint) -> ~str { - use slice::Vector; - use str::StrAllocating; - - let mut buf = ::vec::Vec::new(); - strconv::int_to_str_bytes_common(*self, radix, strconv::SignNone, |i| { - buf.push(i); - }); - // We know we generated valid utf-8, so we don't need to go through that - // check. - unsafe { str::raw::from_utf8(buf.as_slice()).to_owned() } + format!("{}", ::fmt::radix(*self, radix as u8)) } } |
