[v3] reverse_iterator typo

Benjamin Kosnik bkoz@redhat.com
Wed Dec 26 15:05:00 GMT 2001


tested x86/linux

2001-12-26  Benjamin Kosnik  <bkoz@waller.constant.com>

	* testsuite/24_iterators/insert_iterator.cc (test02): Add.
	* testsuite/24_iterators/front_insert_iterator.cc (test02): Add.
	* testsuite/24_iterators/back_insert_iterator.cc (test02): Add.
	* testsuite/24_iterators/reverse_iterator.cc (test02): Add.

	* include/bits/stl_iterator.h (reverse_iterator): Uglify member
	current to _M_current.
	(back_insert_iterator): Ulify member container to _M_container.
	(front_insert_iterator): Same.
	(insert_iterator): Same.
	
Index: include/bits/stl_iterator.h
===================================================================
RCS file: /cvs/gcc/gcc/libstdc++-v3/include/bits/stl_iterator.h,v
retrieving revision 1.16
diff -c -p -r1.16 stl_iterator.h
*** stl_iterator.h	2001/12/06 20:29:31	1.16
--- stl_iterator.h	2001/12/26 21:54:05
*************** namespace std
*** 66,79 ****
    // 24.4.1 Reverse iterators
    template<typename _Iterator>
      class reverse_iterator 
!       : public iterator<typename iterator_traits<_Iterator>::iterator_category,
! 			typename iterator_traits<_Iterator>::value_type,
! 		        typename iterator_traits<_Iterator>::difference_type,
! 		        typename iterator_traits<_Iterator>::pointer,
!                         typename iterator_traits<_Iterator>::reference>
      {
      protected:
!       _Iterator current;
  
      public:
        typedef _Iterator 				       iterator_type;
--- 66,79 ----
    // 24.4.1 Reverse iterators
    template<typename _Iterator>
      class reverse_iterator 
!     : public iterator<typename iterator_traits<_Iterator>::iterator_category,
! 		      typename iterator_traits<_Iterator>::value_type,
! 		      typename iterator_traits<_Iterator>::difference_type,
! 		      typename iterator_traits<_Iterator>::pointer,
!                       typename iterator_traits<_Iterator>::reference>
      {
      protected:
!       _Iterator _M_current;
  
      public:
        typedef _Iterator 				       iterator_type;
*************** namespace std
*** 83,107 ****
        typedef typename iterator_traits<_Iterator>::pointer     pointer;
  
      public:
!       reverse_iterator() {}
  
        explicit 
!       reverse_iterator(iterator_type __x) : current(__x) {}
  
        reverse_iterator(const reverse_iterator& __x) 
! 	: current(__x.current) { }
  
        template<typename _Iter>
          reverse_iterator(const reverse_iterator<_Iter>& __x)
! 	: current(__x.base()) {}
      
        iterator_type 
!       base() const { return current; }
  
        reference 
        operator*() const 
        {
! 	_Iterator __tmp = current;
  	return *--__tmp;
        }
  
--- 83,107 ----
        typedef typename iterator_traits<_Iterator>::pointer     pointer;
  
      public:
!       reverse_iterator() { }
  
        explicit 
!       reverse_iterator(iterator_type __x) : _M_current(__x) { }
  
        reverse_iterator(const reverse_iterator& __x) 
!       : _M_current(__x._M_current) { }
  
        template<typename _Iter>
          reverse_iterator(const reverse_iterator<_Iter>& __x)
! 	: _M_current(__x.base()) { }
      
        iterator_type 
!       base() const { return _M_current; }
  
        reference 
        operator*() const 
        {
! 	_Iterator __tmp = _M_current;
  	return *--__tmp;
        }
  
*************** namespace std
*** 111,117 ****
        reverse_iterator& 
        operator++() 
        {
! 	--current;
  	return *this;
        }
  
--- 111,117 ----
        reverse_iterator& 
        operator++() 
        {
! 	--_M_current;
  	return *this;
        }
  
*************** namespace std
*** 119,156 ****
        operator++(int) 
        {
  	reverse_iterator __tmp = *this;
! 	--current;
  	return __tmp;
        }
  
        reverse_iterator& 
        operator--() 
        {
! 	++current;
  	return *this;
        }
  
        reverse_iterator operator--(int) 
        {
  	reverse_iterator __tmp = *this;
! 	++current;
  	return __tmp;
        }
        
        reverse_iterator 
        operator+(difference_type __n) const 
!       { return reverse_iterator(current - __n); }
  
        reverse_iterator& 
        operator+=(difference_type __n) 
        {
! 	current -= __n;
  	return *this;
        }
  
        reverse_iterator 
        operator-(difference_type __n) const 
!       { return reverse_iterator(current + __n); }
  
        reverse_iterator& 
        operator-=(difference_type __n) 
--- 119,156 ----
        operator++(int) 
        {
  	reverse_iterator __tmp = *this;
! 	--_M_current;
  	return __tmp;
        }
  
        reverse_iterator& 
        operator--() 
        {
! 	++_M_current;
  	return *this;
        }
  
        reverse_iterator operator--(int) 
        {
  	reverse_iterator __tmp = *this;
! 	++_M_current;
  	return __tmp;
        }
        
        reverse_iterator 
        operator+(difference_type __n) const 
!       { return reverse_iterator(_M_current - __n); }
  
        reverse_iterator& 
        operator+=(difference_type __n) 
        {
! 	_M_current -= __n;
  	return *this;
        }
  
        reverse_iterator 
        operator-(difference_type __n) const 
!       { return reverse_iterator(_M_current + __n); }
  
        reverse_iterator& 
        operator-=(difference_type __n) 
*************** namespace std
*** 213,234 ****
  
    // 24.4.2.2.1 back_insert_iterator
    template<typename _Container>
!   class back_insert_iterator 
      : public iterator<output_iterator_tag, void, void, void, void>
      {
      protected:
!       _Container* container;
  
      public:
        typedef _Container          container_type;
        
        explicit 
!       back_insert_iterator(_Container& __x) : container(&__x) {}
  
        back_insert_iterator&
        operator=(typename _Container::const_reference __value) 
        { 
! 	container->push_back(__value);
  	return *this;
        }
  
--- 213,234 ----
  
    // 24.4.2.2.1 back_insert_iterator
    template<typename _Container>
!     class back_insert_iterator 
      : public iterator<output_iterator_tag, void, void, void, void>
      {
      protected:
!       _Container* _M_container;
  
      public:
        typedef _Container          container_type;
        
        explicit 
!       back_insert_iterator(_Container& __x) : _M_container(&__x) { }
  
        back_insert_iterator&
        operator=(typename _Container::const_reference __value) 
        { 
! 	_M_container->push_back(__value);
  	return *this;
        }
  
*************** namespace std
*** 249,268 ****
  
    template<typename _Container>
      class front_insert_iterator 
!       : public iterator<output_iterator_tag, void, void, void, void>
      {
      protected:
!       _Container* container;
  
      public:
        typedef _Container          container_type;
  
!       explicit front_insert_iterator(_Container& __x) : container(&__x) {}
  
        front_insert_iterator&
        operator=(typename _Container::const_reference __value) 
        { 
! 	container->push_front(__value);
  	return *this;
        }
  
--- 249,268 ----
  
    template<typename _Container>
      class front_insert_iterator 
!     : public iterator<output_iterator_tag, void, void, void, void>
      {
      protected:
!       _Container* _M_container;
  
      public:
        typedef _Container          container_type;
  
!       explicit front_insert_iterator(_Container& __x) : _M_container(&__x) { }
  
        front_insert_iterator&
        operator=(typename _Container::const_reference __value) 
        { 
! 	_M_container->push_front(__value);
  	return *this;
        }
  
*************** namespace std
*** 277,303 ****
      };
  
    template<typename _Container>
!   inline front_insert_iterator<_Container> front_inserter(_Container& __x) 
!   { return front_insert_iterator<_Container>(__x); }
  
    template<typename _Container>
      class insert_iterator 
!       : public iterator<output_iterator_tag, void, void, void, void>
      {
      protected:
!       _Container* container;
        typename _Container::iterator iter;
  
      public:
        typedef _Container          container_type;
        
        insert_iterator(_Container& __x, typename _Container::iterator __i) 
! 	: container(&__x), iter(__i) {}
     
        insert_iterator&
        operator=(const typename _Container::const_reference __value) 
        { 
! 	iter = container->insert(iter, __value);
  	++iter;
  	return *this;
        }
--- 277,304 ----
      };
  
    template<typename _Container>
!     inline front_insert_iterator<_Container> 
!     front_inserter(_Container& __x) 
!     { return front_insert_iterator<_Container>(__x); }
  
    template<typename _Container>
      class insert_iterator 
!     : public iterator<output_iterator_tag, void, void, void, void>
      {
      protected:
!       _Container* _M_container;
        typename _Container::iterator iter;
  
      public:
        typedef _Container          container_type;
        
        insert_iterator(_Container& __x, typename _Container::iterator __i) 
!       : _M_container(&__x), iter(__i) {}
     
        insert_iterator&
        operator=(const typename _Container::const_reference __value) 
        { 
! 	iter = _M_container->insert(iter, __value);
  	++iter;
  	return *this;
        }
*************** namespace std
*** 313,323 ****
      };
    
    template<typename _Container, typename _Iterator>
!     inline 
!     insert_iterator<_Container> inserter(_Container& __x, _Iterator __i)
      {
!       typedef typename _Container::iterator __iter;
!       return insert_iterator<_Container>(__x, __iter(__i));
      }
    
    // This iterator adapter is 'normal' in the sense that it does not
--- 314,324 ----
      };
    
    template<typename _Container, typename _Iterator>
!     inline insert_iterator<_Container> 
!     inserter(_Container& __x, _Iterator __i)
      {
!       return insert_iterator<_Container>(__x, 
! 					 typename _Container::iterator(__i));
      }
    
    // This iterator adapter is 'normal' in the sense that it does not
Index: testsuite/24_iterators/back_insert_iterator.cc
===================================================================
RCS file: /cvs/gcc/gcc/libstdc++-v3/testsuite/24_iterators/back_insert_iterator.cc,v
retrieving revision 1.1
diff -c -p -r1.1 back_insert_iterator.cc
*** back_insert_iterator.cc	2001/06/23 00:08:47	1.1
--- back_insert_iterator.cc	2001/12/26 21:54:07
*************** void test01()
*** 43,50 ****
--- 43,62 ----
    typedef test_iterator::container_type container_type;
  }
  
+ 
+ // Make sure iterator can be instantiated.
+ template class std::back_insert_iterator<std::list<int> >;
+ 
+ void test02()
+ {
+   typedef std::back_insert_iterator<std::list<int> > iterator_type;
+   std::list<int> li;
+   iterator_type it = std::back_inserter(li);
+ }
+ 
  int main() 
  { 
    test01();
+   test02();
    return 0;
  }
Index: testsuite/24_iterators/front_insert_iterator.cc
===================================================================
RCS file: /cvs/gcc/gcc/libstdc++-v3/testsuite/24_iterators/front_insert_iterator.cc,v
retrieving revision 1.1
diff -c -p -r1.1 front_insert_iterator.cc
*** front_insert_iterator.cc	2001/06/23 00:08:47	1.1
--- front_insert_iterator.cc	2001/12/26 21:54:07
*************** void test01()
*** 43,50 ****
--- 43,61 ----
    typedef test_iterator::container_type container_type;
  }
  
+ // Make sure iterator can be instantiated.
+ template class std::front_insert_iterator<std::list<int> >;
+ 
+ void test02()
+ {
+   typedef std::front_insert_iterator<std::list<int> > iterator_type;
+   std::list<int> li;
+   iterator_type it = std::front_inserter(li);
+ }
+ 
  int main() 
  { 
    test01();
+   test02();
    return 0;
  }
Index: testsuite/24_iterators/insert_iterator.cc
===================================================================
RCS file: /cvs/gcc/gcc/libstdc++-v3/testsuite/24_iterators/insert_iterator.cc,v
retrieving revision 1.1
diff -c -p -r1.1 insert_iterator.cc
*** insert_iterator.cc	2001/06/23 00:08:47	1.1
--- insert_iterator.cc	2001/12/26 21:54:08
*************** void test01()
*** 45,52 ****
--- 45,68 ----
    typedef test_iterator::container_type container_type;
  }
  
+ 
+ 
+ // Make sure iterator can be instantiated.
+ template class std::insert_iterator<std::list<int> >;
+ 
+ void test02()
+ {
+   typedef std::insert_iterator<std::list<int> > iterator_type;
+ 
+   std::list<int> li;
+   std::list<int>::iterator liit;
+   iterator_type it01(li, liit);
+   iterator_type it02 = std::inserter(li, liit);
+ }
+ 
  int main() 
  { 
    test01();
+   test02();
    return 0;
  }
Index: testsuite/24_iterators/reverse_iterator.cc
===================================================================
RCS file: /cvs/gcc/gcc/libstdc++-v3/testsuite/24_iterators/reverse_iterator.cc,v
retrieving revision 1.1
diff -c -p -r1.1 reverse_iterator.cc
*** reverse_iterator.cc	2001/06/23 00:08:47	1.1
--- reverse_iterator.cc	2001/12/26 21:54:08
*************** void test01()
*** 46,53 ****
--- 46,78 ----
    typedef test_iterator::iterator_category iteratory_category;
  }
  
+ 
+ // Make sure iterator can be instantiated.
+ template class std::reverse_iterator<int*>;
+ 
+ void test02()
+ {
+   typedef std::reverse_iterator<int*> iterator_type;
+   iterator_type it01;
+   iterator_type it02;
+ 
+   // Sanity check non-member operators and functions can be instantiated. 
+   it01 == it02;
+   it01 != it02;
+   it01 < it02;
+   it01 <= it02;
+   it01 > it02;
+   it01 >= it02;
+   it01 - it02;
+   5 + it02;
+ }
+ 
+ 
  int main() 
  { 
    test01();
+   test02();
    return 0;
  }
+ 
+ 



More information about the Gcc-patches mailing list