]> git.saurik.com Git - wxWidgets.git/commitdiff
Add wxVector<>::const_reverse_iterator.
authorVadim Zeitlin <vadim@wxwidgets.org>
Wed, 8 May 2013 11:21:32 +0000 (11:21 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Wed, 8 May 2013 11:21:32 +0000 (11:21 +0000)
Provide this type too for compatibility with std::vector<>.

Closes #15192.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@73947 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

docs/changes.txt
include/wx/vector.h

index c8f9466d1143e5f52fd564ff4de3544c9b8af569..11fb2bf55cb00d6256e788eb5454ca321dcc9a6d 100644 (file)
@@ -590,6 +590,7 @@ All:
 - Add wx[F]File{Input,Output}Stream::GetFile() (troelsk).
 - Add wxSocketBase::GetSocket() (Laurent Poujoulat).
 - Add IEEE 754 single/double precision support to wxDataStream classes (net147).
+- Add wxVector<>::const_reverse_iterator (troelsk).
 - Add Nepali translation (Him Prasad Gautam).
 
 All (GUI):
index b56b42e52daa3f4259c8a04dd693cbd45284e74d..e33f523d1c87445fc472d5789a999972fe25b222 100644 (file)
@@ -139,9 +139,11 @@ public:
     typedef size_t difference_type;
     typedef T value_type;
     typedef value_type* pointer;
+    typedef const value_type* const_pointer;
     typedef value_type* iterator;
     typedef const value_type* const_iterator;
     typedef value_type& reference;
+    typedef const value_type& const_reference;
 
     class reverse_iterator
     {
@@ -183,6 +185,51 @@ public:
 
     private:
         value_type *m_ptr;
+
+        friend class const_reverse_iterator;
+    };
+
+    class const_reverse_iterator
+    {
+    public:
+        const_reverse_iterator() : m_ptr(NULL) { }
+        wxEXPLICIT const_reverse_iterator(const_iterator it) : m_ptr(it) { }
+        const_reverse_iterator(const reverse_iterator& it) : m_ptr(it.m_ptr) { }
+        const_reverse_iterator(const const_reverse_iterator& it) : m_ptr(it.m_ptr) { }
+
+        const_reference operator*() const { return *m_ptr; }
+        const_pointer operator->() const { return m_ptr; }
+
+        const_iterator base() const { return m_ptr; }
+
+        const_reverse_iterator& operator++()
+            { --m_ptr; return *this; }
+        const_reverse_iterator operator++(int)
+            { const_reverse_iterator tmp = *this; --m_ptr; return tmp; }
+        const_reverse_iterator& operator--()
+            { ++m_ptr; return *this; }
+        const_reverse_iterator operator--(int)
+            { const_reverse_iterator tmp = *this; ++m_ptr; return tmp; }
+
+        const_reverse_iterator operator+(difference_type n) const
+            { return const_reverse_iterator(m_ptr - n); }
+        const_reverse_iterator& operator+=(difference_type n)
+            { m_ptr -= n; return *this; }
+        const_reverse_iterator operator-(difference_type n) const
+            { return const_reverse_iterator(m_ptr + n); }
+        const_reverse_iterator& operator-=(difference_type n)
+            { m_ptr += n; return *this; }
+
+        const_reference operator[](difference_type n) const
+            { return *(*this + n); }
+
+        bool operator ==(const const_reverse_iterator& it) const
+            { return m_ptr == it.m_ptr; }
+        bool operator !=(const const_reverse_iterator& it) const
+            { return m_ptr != it.m_ptr; }
+
+    protected:
+        const value_type *m_ptr;
     };
 
     wxVector() : m_size(0), m_capacity(0), m_values(NULL) {}
@@ -353,6 +400,9 @@ public:
     reverse_iterator rbegin() { return reverse_iterator(end() - 1); }
     reverse_iterator rend() { return reverse_iterator(begin() - 1); }
 
+    const_reverse_iterator rbegin() const { return const_reverse_iterator(end() - 1); }
+    const_reverse_iterator rend() const { return const_reverse_iterator(begin() - 1); }
+
     iterator insert(iterator it, const value_type& v = value_type())
     {
         // NB: this must be done before reserve(), because reserve()