| @@ -74,9 +74,15 @@ struct Reservoir | |||||
| { | { | ||||
| while (! rangeToRead.isEmpty()) | while (! rangeToRead.isEmpty()) | ||||
| { | { | ||||
| const auto rangeToReadInBuffer = rangeToRead.getIntersectionWith (getBufferedRange()); | |||||
| const auto bufferedRange = getBufferedRange(); | |||||
| if (rangeToReadInBuffer.isEmpty()) | |||||
| if (bufferedRange.contains (rangeToRead.getStart())) | |||||
| { | |||||
| const auto rangeToReadInBuffer = rangeToRead.getIntersectionWith (getBufferedRange()); | |||||
| readFromReservoir (rangeToReadInBuffer); | |||||
| rangeToRead.setStart (rangeToReadInBuffer.getEnd()); | |||||
| } | |||||
| else | |||||
| { | { | ||||
| fillReservoir (rangeToRead.getStart()); | fillReservoir (rangeToRead.getStart()); | ||||
| @@ -85,12 +91,6 @@ struct Reservoir | |||||
| if (newRange.isEmpty() || ! newRange.contains (rangeToRead.getStart())) | if (newRange.isEmpty() || ! newRange.contains (rangeToRead.getStart())) | ||||
| break; | break; | ||||
| } | } | ||||
| else | |||||
| { | |||||
| readFromReservoir (rangeToReadInBuffer); | |||||
| rangeToRead.setStart (rangeToReadInBuffer.getEnd()); | |||||
| } | |||||
| } | } | ||||
| return rangeToRead; | return rangeToRead; | ||||