┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src/kitemviews/kitemset.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/kitemviews/kitemset.h')
-rw-r--r--src/kitemviews/kitemset.h93
1 files changed, 85 insertions, 8 deletions
diff --git a/src/kitemviews/kitemset.h b/src/kitemviews/kitemset.h
index fd73c0e02..b8ab6864d 100644
--- a/src/kitemviews/kitemset.h
+++ b/src/kitemviews/kitemset.h
@@ -50,7 +50,7 @@ public:
class iterator
{
- iterator(const KItemRangeList::iterator &rangeIt, int offset)
+ iterator(const KItemRangeList::iterator &rangeIt, int offset = 0)
: m_rangeIt(rangeIt)
, m_offset(offset)
{
@@ -135,7 +135,7 @@ public:
class const_iterator
{
- const_iterator(KItemRangeList::const_iterator rangeIt, int offset)
+ const_iterator(KItemRangeList::const_iterator rangeIt, int offset = 0)
: m_rangeIt(rangeIt)
, m_offset(offset)
{
@@ -223,6 +223,70 @@ public:
friend class KItemSet;
};
+ class const_reverse_iterator
+ {
+ public:
+ const_reverse_iterator(KItemSet::const_iterator rangeIt)
+ : m_current(rangeIt)
+ {
+ }
+
+ const_reverse_iterator(const KItemSet::const_reverse_iterator &other)
+ : m_current(other.base())
+ {
+ }
+
+ int operator*() const
+ {
+ // analog to std::prev
+ auto t = const_iterator(m_current);
+ --t;
+ return *t;
+ }
+
+ inline bool operator==(const const_reverse_iterator &other) const
+ {
+ return m_current == other.m_current;
+ }
+
+ bool operator!=(const const_reverse_iterator &other) const
+ {
+ return !(*this == other);
+ }
+
+ const_reverse_iterator &operator++()
+ {
+ --m_current;
+ return *this;
+ }
+ const_reverse_iterator operator++(int)
+ {
+ auto tmp = *this;
+ ++(*this);
+ return tmp;
+ }
+
+ const_reverse_iterator &operator--()
+ {
+ ++m_current;
+ return *this;
+ }
+ const_reverse_iterator operator--(int)
+ {
+ auto tmp = *this;
+ --(*this);
+ return tmp;
+ }
+
+ KItemSet::const_iterator base() const
+ {
+ return m_current;
+ }
+
+ private:
+ KItemSet::const_iterator m_current;
+ };
+
iterator begin();
const_iterator begin() const;
const_iterator constBegin() const;
@@ -230,6 +294,9 @@ public:
const_iterator end() const;
const_iterator constEnd() const;
+ const_reverse_iterator rend() const;
+ const_reverse_iterator rbegin() const;
+
int first() const;
int last() const;
@@ -366,32 +433,32 @@ inline bool KItemSet::remove(int i)
inline KItemSet::iterator KItemSet::begin()
{
- return iterator(m_itemRanges.begin(), 0);
+ return iterator(m_itemRanges.begin());
}
inline KItemSet::const_iterator KItemSet::begin() const
{
- return const_iterator(m_itemRanges.begin(), 0);
+ return const_iterator(m_itemRanges.begin());
}
inline KItemSet::const_iterator KItemSet::constBegin() const
{
- return const_iterator(m_itemRanges.constBegin(), 0);
+ return const_iterator(m_itemRanges.constBegin());
}
inline KItemSet::iterator KItemSet::end()
{
- return iterator(m_itemRanges.end(), 0);
+ return iterator(m_itemRanges.end());
}
inline KItemSet::const_iterator KItemSet::end() const
{
- return const_iterator(m_itemRanges.end(), 0);
+ return const_iterator(m_itemRanges.end());
}
inline KItemSet::const_iterator KItemSet::constEnd() const
{
- return const_iterator(m_itemRanges.constEnd(), 0);
+ return const_iterator(m_itemRanges.constEnd());
}
inline int KItemSet::first() const
@@ -405,6 +472,16 @@ inline int KItemSet::last() const
return lastRange.index + lastRange.count - 1;
}
+inline KItemSet::const_reverse_iterator KItemSet::rend() const
+{
+ return KItemSet::const_reverse_iterator(constBegin());
+}
+
+inline KItemSet::const_reverse_iterator KItemSet::rbegin() const
+{
+ return KItemSet::const_reverse_iterator(constEnd());
+}
+
inline KItemSet &KItemSet::operator<<(int i)
{
insert(i);