From 7a0cd6793e33a04187c2a6eafa6eaf8aea32b938 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?kleines=20Filmr=C3=B6llchen?= Date: Sun, 3 Apr 2022 17:41:21 +0200 Subject: [PATCH] AK: Add non-const iterator for CircularQueue --- AK/CircularQueue.h | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/AK/CircularQueue.h b/AK/CircularQueue.h index d4ab79d9b3f..979989aa2fd 100644 --- a/AK/CircularQueue.h +++ b/AK/CircularQueue.h @@ -64,6 +64,7 @@ public: } const T& at(size_t index) const { return elements()[(m_head + index) % Capacity]; } + T& at(size_t index) { return elements()[(m_head + index) % Capacity]; } const T& first() const { return at(0); } const T& last() const { return at(size() - 1); } @@ -90,9 +91,34 @@ public: size_t m_index { 0 }; }; + class Iterator { + public: + bool operator!=(Iterator const& other) { return m_index != other.m_index; } + Iterator& operator++() + { + ++m_index; + return *this; + } + + T& operator*() const { return m_queue.at(m_index); } + + private: + friend class CircularQueue; + Iterator(CircularQueue& queue, size_t const index) + : m_queue(queue) + , m_index(index) + { + } + CircularQueue& m_queue; + size_t m_index { 0 }; + }; + ConstIterator begin() const { return ConstIterator(*this, 0); } ConstIterator end() const { return ConstIterator(*this, size()); } + Iterator begin() { return Iterator(*this, 0); } + Iterator end() { return Iterator(*this, size()); } + size_t head_index() const { return m_head; } protected: