From d52acbe37f69a2ebc9d161c479ed628da1cbea4e Mon Sep 17 00:00:00 2001 From: Florian Hartwig Date: Sat, 7 Oct 2017 14:49:42 +0200 Subject: [PATCH] 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. --- src/libstd/io/impls.rs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/libstd/io/impls.rs b/src/libstd/io/impls.rs index d6b41ceda4392..fe1179a3b4a18 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) -> io::Result { + buf.extend_from_slice(*self); + let len = self.len(); + *self = &self[len..]; + Ok(len) + } } #[stable(feature = "rust1", since = "1.0.0")]