From 0353262cc273fc8fe1f8e0767812d9ff84fce5ba Mon Sep 17 00:00:00 2001 From: jeremy Date: Fri, 9 Dec 2022 12:10:48 +0100 Subject: [PATCH] Correct impl of begin iterators --- src/query/v2/multiframe.cpp | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/src/query/v2/multiframe.cpp b/src/query/v2/multiframe.cpp index 4829addb2..27f9607d5 100644 --- a/src/query/v2/multiframe.cpp +++ b/src/query/v2/multiframe.cpp @@ -84,12 +84,24 @@ ValidFramesReader::ValidFramesReader(MultiFrame &multiframe) : multiframe_(multi after_last_valid_frame_ = multiframe_.frames_.data() + std::distance(multiframe.frames_.begin(), it); } -ValidFramesReader::Iterator ValidFramesReader::begin() { return Iterator{&multiframe_.frames_[0]}; } +ValidFramesReader::Iterator ValidFramesReader::begin() { + if (multiframe_.frames_[0].IsValid()) { + return Iterator{&multiframe_.frames_[0]}; + } + return end(); +} + ValidFramesReader::Iterator ValidFramesReader::end() { return Iterator{after_last_valid_frame_}; } ValidFramesModifier::ValidFramesModifier(MultiFrame &multiframe) : multiframe_(multiframe) {} -ValidFramesModifier::Iterator ValidFramesModifier::begin() { return Iterator{&multiframe_.frames_[0], *this}; } +ValidFramesModifier::Iterator ValidFramesModifier::begin() { + if (multiframe_.frames_[0].IsValid()) { + return Iterator{&multiframe_.frames_[0], *this}; + } + return end(); +} + ValidFramesModifier::Iterator ValidFramesModifier::end() { return Iterator{multiframe_.frames_.data() + multiframe_.frames_.size(), *this}; } @@ -103,7 +115,12 @@ ValidFramesConsumer::~ValidFramesConsumer() noexcept { multiframe_.DefragmentValidFrames(); } -ValidFramesConsumer::Iterator ValidFramesConsumer::begin() { return Iterator{&multiframe_.frames_[0], *this}; } +ValidFramesConsumer::Iterator ValidFramesConsumer::begin() { + if (multiframe_.frames_[0].IsValid()) { + return Iterator{&multiframe_.frames_[0], *this}; + } + return end(); +} ValidFramesConsumer::Iterator ValidFramesConsumer::end() { return Iterator{multiframe_.frames_.data() + multiframe_.frames_.size(), *this};