about summary refs log tree commit diff
path: root/src/libstd/io
diff options
context:
space:
mode:
authorFlorian Hartwig <florian.j.hartwig@gmail.com>2017-10-07 14:49:42 +0200
committerFlorian Hartwig <florian.j.hartwig@gmail.com>2017-10-07 22:19:51 +0200
commitd52acbe37f69a2ebc9d161c479ed628da1cbea4e (patch)
tree5dbb5d11f611f09996dc5aea8294247f7d63ebc8 /src/libstd/io
parentb67f4283b3d04ef8e0504503123001cf642ec325 (diff)
downloadrust-d52acbe37f69a2ebc9d161c479ed628da1cbea4e.tar.gz
rust-d52acbe37f69a2ebc9d161c479ed628da1cbea4e.zip
Add read_to_end implementation to &[u8]'s Read impl
The default impl for read_to_end does a bunch of bookkeeping
that isn't necessary for slices and is about 4 times slower
on my machine.
Diffstat (limited to 'src/libstd/io')
-rw-r--r--src/libstd/io/impls.rs8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/libstd/io/impls.rs b/src/libstd/io/impls.rs
index d6b41ceda43..fe1179a3b4a 100644
--- a/src/libstd/io/impls.rs
+++ b/src/libstd/io/impls.rs
@@ -206,6 +206,14 @@ impl<'a> Read for &'a [u8] {
         *self = b;
         Ok(())
     }
+
+    #[inline]
+    fn read_to_end(&mut self, buf: &mut Vec<u8>) -> io::Result<usize> {
+        buf.extend_from_slice(*self);
+        let len = self.len();
+        *self = &self[len..];
+        Ok(len)
+    }
 }
 
 #[stable(feature = "rust1", since = "1.0.0")]