diff options
author | Neal H. Walfield <neal@pep.foundation> | 2019-10-30 17:53:29 +0100 |
---|---|---|
committer | Neal H. Walfield <neal@pep.foundation> | 2019-10-30 17:53:29 +0100 |
commit | 5381f8d4dc5eb98745cac74e7ad1dba5238bfadf (patch) | |
tree | 0260d51f56cb2f320e1b8b3d86c21fb2843d6010 /buffered-reader/src | |
parent | 001d04bfc89c3dc9ab06f703ff15cbb1c66f1dc9 (diff) |
buffered-reader: Avoid unnecessarily reading from the inner reader.
- If the internal buffer has some data, process that before reading
more.
Diffstat (limited to 'buffered-reader/src')
-rw-r--r-- | buffered-reader/src/lib.rs | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/buffered-reader/src/lib.rs b/buffered-reader/src/lib.rs index bf0f899f..f226198e 100644 --- a/buffered-reader/src/lib.rs +++ b/buffered-reader/src/lib.rs @@ -711,7 +711,14 @@ pub trait BufferedReader<C> : io::Read + fmt::Debug + fmt::Display { let mut total = 0; let position = 'outer: loop { let len = { - let buffer = self.data(DEFAULT_BUF_SIZE)?; + // Try self.buffer. Only if it is empty, use + // self.data. + let buffer = if self.buffer().len() == 0 { + self.data(DEFAULT_BUF_SIZE)? + } else { + self.buffer() + }; + if buffer.len() == 0 { break 'outer 0; } |