diff options
| author | Brian Anderson <banderson@mozilla.com> | 2011-08-25 14:03:23 -0700 |
|---|---|---|
| committer | Brian Anderson <banderson@mozilla.com> | 2011-08-27 15:54:44 -0700 |
| commit | faef9490ae724bce4802405f826d65988b2b7b05 (patch) | |
| tree | c4643570e9506e341b502726428def22bf0731fb | |
| parent | 15e3ae79360508dc44f428f99bb483038fb2ab1e (diff) | |
Optimize std::istr::to_estr. Issue #855
| -rw-r--r-- | src/lib/istr.rs | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/src/lib/istr.rs b/src/lib/istr.rs index bed720d8c1e..4b1f990a243 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] { |
