68 template <
typename Index,
typename GetBufferedRange,
typename ReadFromReservoir,
typename FillReservoir>
70 GetBufferedRange&& getBufferedRange,
71 ReadFromReservoir&& readFromReservoir,
72 FillReservoir&& fillReservoir)
76 const auto bufferedRange = getBufferedRange();
78 if (bufferedRange.contains (rangeToRead.
getStart()))
81 readFromReservoir (rangeToReadInBuffer);
82 rangeToRead.
setStart (rangeToReadInBuffer.getEnd());
86 fillReservoir (rangeToRead.
getStart());
88 const auto newRange = getBufferedRange();
90 if (newRange.isEmpty() || ! newRange.contains (rangeToRead.
getStart()))
constexpr ValueType getStart() const noexcept
constexpr bool isEmpty() const noexcept
constexpr Range getIntersectionWith(Range other) const noexcept
void setStart(const ValueType newStart) noexcept
static Range< Index > doBufferedRead(Range< Index > rangeToRead, GetBufferedRange &&getBufferedRange, ReadFromReservoir &&readFromReservoir, FillReservoir &&fillReservoir)