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:
 | 
			
		||||
    typedef size_t size_type;
 | 
			
		||||
    typedef size_t difference_type;
 | 
			
		||||
    typedef T value_type;
 | 
			
		||||
    typedef value_type* pointer;
 | 
			
		||||
    typedef value_type* iterator;
 | 
			
		||||
    typedef const value_type* const_iterator;
 | 
			
		||||
    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(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(); }
 | 
			
		||||
    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())
 | 
			
		||||
    {
 | 
			
		||||
        // NB: this must be done before reserve(), because reserve()
 | 
			
		||||
 
 | 
			
		||||
@@ -27,11 +27,38 @@ class wxVector<T>
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
    typedef size_t size_type;
 | 
			
		||||
    typedef size_t difference_type;
 | 
			
		||||
    typedef T value_type;
 | 
			
		||||
    typedef value_type* pointer;
 | 
			
		||||
    typedef value_type* iterator;
 | 
			
		||||
    typedef const value_type* const_iterator;
 | 
			
		||||
    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.
 | 
			
		||||
    */
 | 
			
		||||
@@ -77,6 +104,17 @@ public:
 | 
			
		||||
    */
 | 
			
		||||
    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.
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user