]> git.lizzy.rs Git - rust.git/commitdiff
Speed up String::from_utf16
authorljedrz <ljedrz@gmail.com>
Wed, 31 Oct 2018 09:22:22 +0000 (10:22 +0100)
committerljedrz <ljedrz@gmail.com>
Wed, 31 Oct 2018 09:22:22 +0000 (10:22 +0100)
src/liballoc/string.rs

index ff3587d5d87306af60550c20f71c5d24325ba626..8690f9017c406d9eeca42f876741c1e1af3bf5fb 100644 (file)
@@ -618,7 +618,15 @@ pub fn from_utf8_lossy<'a>(v: &'a [u8]) -> Cow<'a, str> {
     /// ```
     #[stable(feature = "rust1", since = "1.0.0")]
     pub fn from_utf16(v: &[u16]) -> Result<String, FromUtf16Error> {
-        decode_utf16(v.iter().cloned()).collect::<Result<_, _>>().map_err(|_| FromUtf16Error(()))
+        let mut ret = String::with_capacity(v.len());
+        for c in decode_utf16(v.iter().cloned()) {
+            if let Ok(c) = c {
+                ret.push(c);
+            } else {
+                return Err(FromUtf16Error(()));
+            }
+        }
+        Ok(ret)
     }
 
     /// Decode a UTF-16 encoded slice `v` into a `String`, replacing