diff options
| author | Simon Sapin <simon.sapin@exyr.org> | 2015-12-05 00:44:16 +0100 |
|---|---|---|
| committer | Simon Sapin <simon.sapin@exyr.org> | 2015-12-05 10:09:34 +0100 |
| commit | 507d8caf6de6d38d5cef80b9d129ae3856da3583 (patch) | |
| tree | dc760bbf6ac9ccea3e86be14f8c130c8116ab677 /src/libstd/net | |
| parent | 55a4e050921a8f72cff28b0ab6e58376382daf32 (diff) | |
| download | rust-507d8caf6de6d38d5cef80b9d129ae3856da3583.tar.gz rust-507d8caf6de6d38d5cef80b9d129ae3856da3583.zip | |
Remove allocations in `impl Display for Ipv6Addr`
Diffstat (limited to 'src/libstd/net')
| -rw-r--r-- | src/libstd/net/ip.rs | 22 |
1 files changed, 11 insertions, 11 deletions
diff --git a/src/libstd/net/ip.rs b/src/libstd/net/ip.rs index c657a7aa0bd..c643c069971 100644 --- a/src/libstd/net/ip.rs +++ b/src/libstd/net/ip.rs @@ -13,8 +13,6 @@ be stable", issue = "27709")] -use prelude::v1::*; - use cmp::Ordering; use fmt; use hash; @@ -446,17 +444,19 @@ impl fmt::Display for Ipv6Addr { let (zeros_at, zeros_len) = find_zero_slice(&self.segments()); if zeros_len > 1 { - fn fmt_subslice(segments: &[u16]) -> String { - segments - .iter() - .map(|&seg| format!("{:x}", seg)) - .collect::<Vec<String>>() - .join(":") + fn fmt_subslice(segments: &[u16], fmt: &mut fmt::Formatter) -> fmt::Result { + if !segments.is_empty() { + try!(write!(fmt, "{:x}", segments[0])); + for &seg in &segments[1..] { + try!(write!(fmt, ":{:x}", seg)); + } + } + Ok(()) } - write!(fmt, "{}::{}", - fmt_subslice(&self.segments()[..zeros_at]), - fmt_subslice(&self.segments()[zeros_at + zeros_len..])) + try!(fmt_subslice(&self.segments()[..zeros_at], fmt)); + try!(fmt.write_str("::")); + fmt_subslice(&self.segments()[zeros_at + zeros_len..], fmt) } else { let &[a, b, c, d, e, f, g, h] = &self.segments(); write!(fmt, "{:x}:{:x}:{:x}:{:x}:{:x}:{:x}:{:x}:{:x}", |
