From 8de5ebbe8cc8452977c662c8a82c672abc38da62 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Paolacci?= Date: Sun, 15 Dec 2013 18:57:25 +0100 Subject: [PATCH] std::io: Faster BufferedReader:read_byte. Replace Reader's default implementation to take benefit of that particular fixed size / very small reads situation. Brings a 2x perf improvement on a lightweight wc-like test app (300 iterations, `/usr/share/dict/web2', MBA laptop). --- src/libstd/io/buffered.rs | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/libstd/io/buffered.rs b/src/libstd/io/buffered.rs index 95c313dd282b5..91bc9cbd1e779 100644 --- a/src/libstd/io/buffered.rs +++ b/src/libstd/io/buffered.rs @@ -129,6 +129,17 @@ impl Reader for BufferedReader { Some(nread) } + fn read_byte(&mut self) -> Option { + if self.pos == self.cap { + if self.fill().len() == 0 { + return None; + } + } + let c = self.buf[self.pos]; + self.pos += 1; + Some(c) + } + fn eof(&mut self) -> bool { self.pos == self.cap && self.inner.eof() }