From faef9490ae724bce4802405f826d65988b2b7b05 Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Thu, 25 Aug 2011 14:03:23 -0700 Subject: [PATCH] Optimize std::istr::to_estr. Issue #855 --- src/lib/istr.rs | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/lib/istr.rs b/src/lib/istr.rs index bed720d8c1e5..4b1f990a243c 100644 --- a/src/lib/istr.rs +++ b/src/lib/istr.rs @@ -16,11 +16,15 @@ fn from_estr(s: &str) -> istr { } fn to_estr(s: &istr) -> str { - let s2 = ""; - for u in s { - str::push_byte(s2, u); - } - ret s2; + if byte_len(s) == 0u { ret "" }; + let v: [u8] = unsafe::reinterpret_cast(s); + let vlen = vec::len(v); + assert vlen > 0u; + vec::unsafe::set_len(v, vlen - 1u); + let res = str::unsafe_from_bytes(v); + vec::unsafe::set_len(v, vlen); + unsafe::leak(v); + ret res; } fn from_estrs(ss: &[str]) -> [istr] {