Skip to content

Commit 507d8ca

Browse files
committed
Remove allocations in impl Display for Ipv6Addr
1 parent 55a4e05 commit 507d8ca

File tree

1 file changed

+11
-11
lines changed

1 file changed

+11
-11
lines changed

src/libstd/net/ip.rs

+11-11
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,6 @@
1313
be stable",
1414
issue = "27709")]
1515

16-
use prelude::v1::*;
17-
1816
use cmp::Ordering;
1917
use fmt;
2018
use hash;
@@ -446,17 +444,19 @@ impl fmt::Display for Ipv6Addr {
446444
let (zeros_at, zeros_len) = find_zero_slice(&self.segments());
447445

448446
if zeros_len > 1 {
449-
fn fmt_subslice(segments: &[u16]) -> String {
450-
segments
451-
.iter()
452-
.map(|&seg| format!("{:x}", seg))
453-
.collect::<Vec<String>>()
454-
.join(":")
447+
fn fmt_subslice(segments: &[u16], fmt: &mut fmt::Formatter) -> fmt::Result {
448+
if !segments.is_empty() {
449+
try!(write!(fmt, "{:x}", segments[0]));
450+
for &seg in &segments[1..] {
451+
try!(write!(fmt, ":{:x}", seg));
452+
}
453+
}
454+
Ok(())
455455
}
456456

457-
write!(fmt, "{}::{}",
458-
fmt_subslice(&self.segments()[..zeros_at]),
459-
fmt_subslice(&self.segments()[zeros_at + zeros_len..]))
457+
try!(fmt_subslice(&self.segments()[..zeros_at], fmt));
458+
try!(fmt.write_str("::"));
459+
fmt_subslice(&self.segments()[zeros_at + zeros_len..], fmt)
460460
} else {
461461
let &[a, b, c, d, e, f, g, h] = &self.segments();
462462
write!(fmt, "{:x}:{:x}:{:x}:{:x}:{:x}:{:x}:{:x}:{:x}",

0 commit comments

Comments
 (0)