diff options
| author | Marvin Löbel <loebel.marvin@gmail.com> | 2013-03-24 07:51:18 +0100 |
|---|---|---|
| committer | Marvin Löbel <loebel.marvin@gmail.com> | 2013-03-26 14:59:17 +0100 |
| commit | b9de2b5787440bbb196fd38223ef4a6a6f196f83 (patch) | |
| tree | a724b2b66ef1aaccddae1398cdc098714326f2f6 /src/libstd | |
| parent | d74606ead60d524eb72afad2cd8b45facd6c5d40 (diff) | |
| download | rust-b9de2b5787440bbb196fd38223ef4a6a6f196f83.tar.gz rust-b9de2b5787440bbb196fd38223ef4a6a6f196f83.zip | |
Switched over a bunch of splitting funktions to non-allocating iterators
Diffstat (limited to 'src/libstd')
| -rw-r--r-- | src/libstd/base64.rs | 30 | ||||
| -rw-r--r-- | src/libstd/getopts.rs | 13 | ||||
| -rw-r--r-- | src/libstd/json.rs | 3 | ||||
| -rw-r--r-- | src/libstd/net_ip.rs | 4 | ||||
| -rw-r--r-- | src/libstd/net_url.rs | 4 |
5 files changed, 31 insertions, 23 deletions
diff --git a/src/libstd/base64.rs b/src/libstd/base64.rs index ff026324404..b11ad7052b9 100644 --- a/src/libstd/base64.rs +++ b/src/libstd/base64.rs @@ -16,12 +16,16 @@ pub trait ToBase64 { fn to_base64(&self) -> ~str; } +static CHARS: &'static[char] = &[ + 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', + 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', + 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', + 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', + '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/' +]; + impl ToBase64 for &'self [u8] { fn to_base64(&self) -> ~str { - let chars = str::chars( - ~"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" - ); - let mut s = ~""; unsafe { let len = self.len(); @@ -35,10 +39,10 @@ impl ToBase64 for &'self [u8] { (self[i + 2u] as uint); // This 24-bit number gets separated into four 6-bit numbers. - str::push_char(&mut s, chars[(n >> 18u) & 63u]); - str::push_char(&mut s, chars[(n >> 12u) & 63u]); - str::push_char(&mut s, chars[(n >> 6u) & 63u]); - str::push_char(&mut s, chars[n & 63u]); + str::push_char(&mut s, CHARS[(n >> 18u) & 63u]); + str::push_char(&mut s, CHARS[(n >> 12u) & 63u]); + str::push_char(&mut s, CHARS[(n >> 6u) & 63u]); + str::push_char(&mut s, CHARS[n & 63u]); i += 3u; } @@ -49,17 +53,17 @@ impl ToBase64 for &'self [u8] { 0 => (), 1 => { let n = (self[i] as uint) << 16u; - str::push_char(&mut s, chars[(n >> 18u) & 63u]); - str::push_char(&mut s, chars[(n >> 12u) & 63u]); + str::push_char(&mut s, CHARS[(n >> 18u) & 63u]); + str::push_char(&mut s, CHARS[(n >> 12u) & 63u]); str::push_char(&mut s, '='); str::push_char(&mut s, '='); } 2 => { let n = (self[i] as uint) << 16u | (self[i + 1u] as uint) << 8u; - str::push_char(&mut s, chars[(n >> 18u) & 63u]); - str::push_char(&mut s, chars[(n >> 12u) & 63u]); - str::push_char(&mut s, chars[(n >> 6u) & 63u]); + str::push_char(&mut s, CHARS[(n >> 18u) & 63u]); + str::push_char(&mut s, CHARS[(n >> 12u) & 63u]); + str::push_char(&mut s, CHARS[(n >> 6u) & 63u]); str::push_char(&mut s, '='); } _ => fail!(~"Algebra is broken, please alert the math police") diff --git a/src/libstd/getopts.rs b/src/libstd/getopts.rs index f837f776b96..ae783fb9b69 100644 --- a/src/libstd/getopts.rs +++ b/src/libstd/getopts.rs @@ -244,7 +244,8 @@ pub fn getopts(args: &[~str], opts: &[Opt]) -> Result { let mut i_arg = None; if cur[1] == '-' as u8 { let tail = str::slice(cur, 2, curlen).to_owned(); - let tail_eq = str::splitn_char(tail, '=', 1); + let mut tail_eq = ~[]; + for str::each_splitn_char(tail, '=', 1) |s| { tail_eq.push(s.to_owned()) } if tail_eq.len() <= 1 { names = ~[Long(tail)]; } else { @@ -627,16 +628,16 @@ pub mod groups { }; // Normalize desc to contain words seperated by one space character - let mut desc_normalized_whitespace = ~str - for desc.each_word |word| { + let mut desc_normalized_whitespace = ~""; + for str::each_word(desc) |word| { desc_normalized_whitespace.push_str(word); desc_normalized_whitespace.push_char(' '); } // FIXME: #5516 - let mut desc_rows: ~[~str] = ~[]; - for desc_normalized_whitespace.each_split_within(54) |substr| { - desc_rows.push(~substr); + let mut desc_rows = ~[]; + for str::each_split_within(desc_normalized_whitespace, 54) |substr| { + desc_rows.push(substr.to_owned()); } // FIXME: #5516 diff --git a/src/libstd/json.rs b/src/libstd/json.rs index a9b9b2977cd..f39e406bc00 100644 --- a/src/libstd/json.rs +++ b/src/libstd/json.rs @@ -806,7 +806,8 @@ impl serialize::Decoder for Decoder<'self> { } fn read_char(&self) -> char { - let v = str::chars(self.read_owned_str()); + let mut v = ~[]; + for str::each_char(self.read_owned_str()) |c| { v.push(c) } if v.len() != 1 { fail!(~"string must have one character") } v[0] } diff --git a/src/libstd/net_ip.rs b/src/libstd/net_ip.rs index 15593571b43..4d82d35cc32 100644 --- a/src/libstd/net_ip.rs +++ b/src/libstd/net_ip.rs @@ -197,7 +197,9 @@ pub mod v4 { } } pub fn parse_to_ipv4_rep(ip: &str) -> result::Result<Ipv4Rep, ~str> { - let parts = vec::map(str::split_char(ip, '.'), |s| { + let mut parts = ~[]; + for str::each_split_char(ip, '.') |s| { parts.push(s.to_owned()) } + let parts = vec::map(parts, |s| { match uint::from_str(*s) { Some(n) if n <= 255 => n, _ => 256 diff --git a/src/libstd/net_url.rs b/src/libstd/net_url.rs index 21b60584635..9caab11d643 100644 --- a/src/libstd/net_url.rs +++ b/src/libstd/net_url.rs @@ -344,8 +344,8 @@ fn userinfo_to_str(userinfo: &UserInfo) -> ~str { fn query_from_str(rawquery: &str) -> Query { let mut query: Query = ~[]; if str::len(rawquery) != 0 { - for str::split_char(rawquery, '&').each |p| { - let (k, v) = split_char_first(*p, '='); + for str::each_split_char(rawquery, '&') |p| { + let (k, v) = split_char_first(p, '='); // FIXME(#3722): unsafe only because decode_inner does (string) IO unsafe {query.push((decode_component(k), decode_component(v)));} }; |
