From ad518b7fb272ec6ccec7e891a3374c648fd531dd Mon Sep 17 00:00:00 2001 From: David Capello Date: Tue, 14 Jun 2016 11:14:24 -0300 Subject: [PATCH] Add SelectedFrames::reversed() function --- src/doc/selected_frames.h | 17 +++++++++++++++++ src/doc/selected_frames_tests.cpp | 6 ++++++ 2 files changed, 23 insertions(+) diff --git a/src/doc/selected_frames.h b/src/doc/selected_frames.h index c834e2195..caaa08733 100644 --- a/src/doc/selected_frames.h +++ b/src/doc/selected_frames.h @@ -97,6 +97,21 @@ namespace doc { mutable frame_t m_frame; }; + class Reversed { + public: + typedef const_reverse_iterator const_iterator; + + const_iterator begin() const { return m_selectedFrames.rbegin(); } + const_iterator end() const { return m_selectedFrames.rend(); } + + Reversed(const SelectedFrames& selectedFrames) + : m_selectedFrames(selectedFrames) { + } + + private: + const SelectedFrames& m_selectedFrames; + }; + const_iterator begin() const { return const_iterator(m_ranges.begin()); } const_iterator end() const { return const_iterator(m_ranges.end()); } const_reverse_iterator rbegin() const { return const_reverse_iterator(m_ranges.rbegin()); } @@ -114,6 +129,8 @@ namespace doc { frame_t firstFrame() const { return (!m_ranges.empty() ? m_ranges.front().fromFrame: -1); } frame_t lastFrame() const { return (!m_ranges.empty() ? m_ranges.back().toFrame: -1); } + Reversed reversed() const { return Reversed(*this); } + private: Ranges m_ranges; }; diff --git a/src/doc/selected_frames_tests.cpp b/src/doc/selected_frames_tests.cpp index 8a46af432..a579e7972 100644 --- a/src/doc/selected_frames_tests.cpp +++ b/src/doc/selected_frames_tests.cpp @@ -115,6 +115,12 @@ TEST(SelectedFrames, ReverseIterators) EXPECT_EQ(6, res[1]); EXPECT_EQ(5, res[2]); EXPECT_EQ(1, res[3]); + + std::vector res2; + for (frame_t frame : f.reversed()) + res2.push_back(frame); + + EXPECT_EQ(res, res2); } int main(int argc, char** argv)