diff options
author | Volker Hilsheimer <volker.hilsheimer@qt.io> | 2024-01-22 16:06:17 +0100 |
---|---|---|
committer | Volker Hilsheimer <volker.hilsheimer@qt.io> | 2024-01-29 16:06:47 +0100 |
commit | cc5251ed59ea6ecf0cc666ae5321be6de5383e90 (patch) | |
tree | ddf9eed4d3c11ad9e2aecf48e5200c0312108133 /src/corelib/kernel | |
parent | e5074cd3540e165f771aa5bfea36d09553eadc77 (diff) |
QJniArray: make reverse-iterable
Add rbeing/rend overload, relevant typedefs, and decrement operators.
As a drive-by, add noexcept to begin/end functions.
Found during header review.
Pick-to: 6.7
Task-number: QTBUG-119952
Change-Id: I32d9a7d50a1f03550944c2247516c455d4822fe7
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
Diffstat (limited to 'src/corelib/kernel')
-rw-r--r-- | src/corelib/kernel/qjniarray.h | 32 |
1 files changed, 24 insertions, 8 deletions
diff --git a/src/corelib/kernel/qjniarray.h b/src/corelib/kernel/qjniarray.h index 434d27e180..f1346a99e6 100644 --- a/src/corelib/kernel/qjniarray.h +++ b/src/corelib/kernel/qjniarray.h @@ -31,7 +31,7 @@ struct QJniArrayIterator using pointer = T *; using reference = T; // difference to container requirements using const_reference = reference; - using iterator_category = std::forward_iterator_tag; + using iterator_category = std::bidirectional_iterator_tag; friend bool operator==(const QJniArrayIterator &lhs, const QJniArrayIterator &rhs) noexcept { @@ -56,7 +56,17 @@ struct QJniArrayIterator ++that; return copy; } - + friend QJniArrayIterator &operator--(QJniArrayIterator &that) noexcept + { + --that.m_index; + return that; + } + friend QJniArrayIterator operator--(QJniArrayIterator &that, int) noexcept + { + auto copy = that; + --that; + return copy; + } void swap(QJniArrayIterator &other) noexcept { std::swap(m_index, other.m_index); @@ -178,6 +188,7 @@ public: // read-only container, so no iterator typedef using const_iterator = QJniArrayIterator<const T>; + using const_reverse_iterator = std::reverse_iterator<const_iterator>; QJniArray() = default; explicit QJniArray(jarray array) : QJniArrayBase(array) {} @@ -226,12 +237,17 @@ public: return object<jarray>(); } - const_iterator begin() const { return {0, this}; } - const_iterator constBegin() const { return begin(); } - const_iterator cbegin() const { return begin(); } - const_iterator end() const { return {size(), this}; } - const_iterator constEnd() const { return {end()}; } - const_iterator cend() const { return {end()}; } + const_iterator begin() const noexcept { return {0, this}; } + const_iterator constBegin() const noexcept { return begin(); } + const_iterator cbegin() const noexcept { return begin(); } + const_iterator end() const noexcept { return {size(), this}; } + const_iterator constEnd() const noexcept { return {end()}; } + const_iterator cend() const noexcept { return {end()}; } + + const_reverse_iterator rbegin() const noexcept { return const_reverse_iterator(end()); } + const_reverse_iterator rend() const noexcept { return const_reverse_iterator(begin()); } + const_reverse_iterator crbegin() const noexcept { return const_reverse_iterator(end()); } + const_reverse_iterator crend() const noexcept { return const_reverse_iterator(begin()); } const_reference operator[](size_type i) const { return at(i); } const_reference at(size_type i) const |