summaryrefslogtreecommitdiffstats
path: root/src/corelib/kernel
diff options
context:
space:
mode:
authorVolker Hilsheimer <volker.hilsheimer@qt.io>2024-01-22 16:06:17 +0100
committerVolker Hilsheimer <volker.hilsheimer@qt.io>2024-01-29 16:06:47 +0100
commitcc5251ed59ea6ecf0cc666ae5321be6de5383e90 (patch)
treeddf9eed4d3c11ad9e2aecf48e5200c0312108133 /src/corelib/kernel
parente5074cd3540e165f771aa5bfea36d09553eadc77 (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.h32
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