| 408 | } |
| 409 | |
| 410 | std::optional<SeriesSample> SeriesReader::sampleAtOrAfterTime(Timestamp t) const { |
| 411 | const auto index = indexAtOrAfterTime(t); |
| 412 | return index.has_value() ? sampleAt(*index) : std::nullopt; |
| 413 | } |
| 414 | |
| 415 | SeriesCursor SeriesReader::samples(Range<Timestamp> time_range) const { |
| 416 | // The cursor raises its own lower bound to the retention floor, so logically- |