summaryrefslogtreecommitdiffstats
path: root/buffered-reader
diff options
context:
space:
mode:
authorNeal H. Walfield <neal@pep.foundation>2019-10-30 17:53:29 +0100
committerNeal H. Walfield <neal@pep.foundation>2019-10-30 17:53:29 +0100
commit5381f8d4dc5eb98745cac74e7ad1dba5238bfadf (patch)
tree0260d51f56cb2f320e1b8b3d86c21fb2843d6010 /buffered-reader
parent001d04bfc89c3dc9ab06f703ff15cbb1c66f1dc9 (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')
-rw-r--r--buffered-reader/src/lib.rs9
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;
}