Added reverse iterator to wxVector<T>
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@55654 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
		@@ -117,11 +117,55 @@ private:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
    typedef size_t size_type;
 | 
					    typedef size_t size_type;
 | 
				
			||||||
 | 
					    typedef size_t difference_type;
 | 
				
			||||||
    typedef T value_type;
 | 
					    typedef T value_type;
 | 
				
			||||||
 | 
					    typedef value_type* pointer;
 | 
				
			||||||
    typedef value_type* iterator;
 | 
					    typedef value_type* iterator;
 | 
				
			||||||
    typedef const value_type* const_iterator;
 | 
					    typedef const value_type* const_iterator;
 | 
				
			||||||
    typedef value_type& reference;
 | 
					    typedef value_type& reference;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    class reverse_iterator
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					    public:
 | 
				
			||||||
 | 
					        reverse_iterator() : m_ptr(NULL) { }
 | 
				
			||||||
 | 
					        wxEXPLICIT reverse_iterator(iterator it) : m_ptr(it) { }
 | 
				
			||||||
 | 
					        reverse_iterator(const reverse_iterator& it) : m_ptr(it.m_ptr) { }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        reference operator*() const { return *m_ptr; }
 | 
				
			||||||
 | 
					        pointer operator->() const { return m_ptr; }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        iterator base() const { return m_ptr; }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        reverse_iterator& operator++() 
 | 
				
			||||||
 | 
					                { --m_ptr; return *this; }
 | 
				
			||||||
 | 
					        reverse_iterator operator++(int)
 | 
				
			||||||
 | 
					                { reverse_iterator tmp = *this; --m_ptr; return tmp; }
 | 
				
			||||||
 | 
					        reverse_iterator& operator--() 
 | 
				
			||||||
 | 
					                { ++m_ptr; return *this; }
 | 
				
			||||||
 | 
					        reverse_iterator operator--(int) 
 | 
				
			||||||
 | 
					                { reverse_iterator tmp = *this; ++m_ptr; return tmp; }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        reverse_iterator operator+(difference_type n) const
 | 
				
			||||||
 | 
					                { return reverse_iterator(m_ptr - n); }
 | 
				
			||||||
 | 
					        reverse_iterator& operator+=(difference_type n)
 | 
				
			||||||
 | 
					                { return m_ptr -= n; return *this; }
 | 
				
			||||||
 | 
					        reverse_iterator operator-(difference_type n) const
 | 
				
			||||||
 | 
					                { return reverse_iterator(m_ptr + n); }
 | 
				
			||||||
 | 
					        reverse_iterator& operator-=(difference_type n)
 | 
				
			||||||
 | 
					                { return m_ptr += n; return *this; }
 | 
				
			||||||
 | 
					                
 | 
				
			||||||
 | 
					        reference operator[](difference_type n) const
 | 
				
			||||||
 | 
					                { return *(*this + n); }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        bool operator ==(const reverse_iterator& it) const 
 | 
				
			||||||
 | 
					                { return m_ptr == it.m_ptr; }
 | 
				
			||||||
 | 
					        bool operator !=(const reverse_iterator& it) const
 | 
				
			||||||
 | 
					                { return m_ptr != it.m_ptr; }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					    private:
 | 
				
			||||||
 | 
					        value_type *m_ptr;
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    wxVector() : m_size(0), m_capacity(0), m_values(NULL) {}
 | 
					    wxVector() : m_size(0), m_capacity(0), m_values(NULL) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    wxVector(const wxVector& c) : m_size(0), m_capacity(0), m_values(NULL)
 | 
					    wxVector(const wxVector& c) : m_size(0), m_capacity(0), m_values(NULL)
 | 
				
			||||||
@@ -235,6 +279,9 @@ public:
 | 
				
			|||||||
    const_iterator end() const { return m_values + size(); }
 | 
					    const_iterator end() const { return m_values + size(); }
 | 
				
			||||||
    iterator end() { return m_values + size(); }
 | 
					    iterator end() { return m_values + size(); }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    reverse_iterator rbegin() { return reverse_iterator(end() - 1); }
 | 
				
			||||||
 | 
					    reverse_iterator rend() { return reverse_iterator(begin() - 1); }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    iterator insert(iterator it, const value_type& v = value_type())
 | 
					    iterator insert(iterator it, const value_type& v = value_type())
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        // NB: this must be done before reserve(), because reserve()
 | 
					        // NB: this must be done before reserve(), because reserve()
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -27,11 +27,38 @@ class wxVector<T>
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
    typedef size_t size_type;
 | 
					    typedef size_t size_type;
 | 
				
			||||||
 | 
					    typedef size_t difference_type;
 | 
				
			||||||
    typedef T value_type;
 | 
					    typedef T value_type;
 | 
				
			||||||
 | 
					    typedef value_type* pointer;
 | 
				
			||||||
    typedef value_type* iterator;
 | 
					    typedef value_type* iterator;
 | 
				
			||||||
    typedef const value_type* const_iterator;
 | 
					    typedef const value_type* const_iterator;
 | 
				
			||||||
    typedef value_type& reference;
 | 
					    typedef value_type& reference;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					        Reverse iterator interface
 | 
				
			||||||
 | 
					    */
 | 
				
			||||||
 | 
					    class reverse_iterator
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					    public:
 | 
				
			||||||
 | 
					        reverse_iterator();
 | 
				
			||||||
 | 
					        explicit reverse_iterator(iterator it);
 | 
				
			||||||
 | 
					        reverse_iterator(const reverse_iterator& it);
 | 
				
			||||||
 | 
					        reference operator*() const;
 | 
				
			||||||
 | 
					        pointer operator->() const;
 | 
				
			||||||
 | 
					        iterator base() const;
 | 
				
			||||||
 | 
					        reverse_iterator& operator++();
 | 
				
			||||||
 | 
					        reverse_iterator operator++(int);
 | 
				
			||||||
 | 
					        reverse_iterator& operator--();
 | 
				
			||||||
 | 
					        reverse_iterator operator--(int);
 | 
				
			||||||
 | 
					        reverse_iterator operator+(difference_type n) const;
 | 
				
			||||||
 | 
					        reverse_iterator& operator+=(difference_type n);
 | 
				
			||||||
 | 
					        reverse_iterator operator-(difference_type n) const;
 | 
				
			||||||
 | 
					        reverse_iterator& operator-=(difference_type n);
 | 
				
			||||||
 | 
					        reference operator[](difference_type n) const;
 | 
				
			||||||
 | 
					        bool operator ==(const reverse_iterator& it) const;
 | 
				
			||||||
 | 
					        bool operator !=(const reverse_iterator& it) const;
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
        Constructor.
 | 
					        Constructor.
 | 
				
			||||||
    */
 | 
					    */
 | 
				
			||||||
@@ -77,6 +104,17 @@ public:
 | 
				
			|||||||
    */
 | 
					    */
 | 
				
			||||||
    iterator begin();
 | 
					    iterator begin();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					        Return reverse iterator to end of the vector.
 | 
				
			||||||
 | 
					    */
 | 
				
			||||||
 | 
					    reverse_iterator rbegin();
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					        Return reverse iterator to beginning of the vector.
 | 
				
			||||||
 | 
					    */
 | 
				
			||||||
 | 
					    reverse_iterator rend();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
        Returns vector's current capacity, i.e. how much memory is allocated.
 | 
					        Returns vector's current capacity, i.e. how much memory is allocated.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user