// ---------------------------------------------------------------------- // // reviter.cc - Do reverse_iterator<>s take correct # of template arg's? // // History: // 19-Mar-2001 WEB Initial draft, adapted from iter8or.cc // 25-Apr-2001 WEB s//"ISOcxx\/ISOcxxSyntax.hh"/ // // ---------------------------------------------------------------------- #include "ISOcxx/ISOcxxSyntax.hh" #include // ---------------------------------------------------------------------- // Create an iterator class: // ---------------------------------------------------------------------- class int_iter : public std::ISOcxxIterator< std::bidirectional_iterator_tag // category , int // value_type , ptrdiff_t // difference_type , int * // pointer , int & // reference > { public: int_iter() : p( 0 ) {} int_iter( int_iter const & it ) : p( it.p ) {} int_iter( pointer it ) : p( it ) {} reference operator * () { return *p; } pointer & operator -> () { return p; } bool operator == ( int_iter const & rhs ) const { return p == rhs.p; } bool operator != ( int_iter const & rhs ) const { return p != rhs.p; } bool operator == ( pointer rhs ) const { return p == rhs; } bool operator != ( pointer rhs ) const { return p != rhs; } int_iter & operator ++ () { ++p; return *this; } int_iter operator ++ (int) { int_iter tmp(*this); ++p; return tmp; } int_iter & operator -- () { --p; return *this; } int_iter operator -- (int) { int_iter tmp(*this); --p; return tmp; } int_iter & operator += ( int n ) { p += n; return *this; } int_iter & operator -= ( int n ) { p -= n; return *this; } int_iter operator + ( int n ) const { int_iter tmp(*this); return tmp+=n; } int_iter operator - ( int n ) const { int_iter tmp(*this); return tmp-=n; } private: pointer p; }; // int_iter // ---------------------------------------------------------------------- // Adapt the iterator class to a reverse iterator: // ---------------------------------------------------------------------- typedef std::ISOcxxReverseIterator< int_iter > rev_int_iter; // ---------------------------------------------------------------------- // Let 'er rip: // ---------------------------------------------------------------------- int main() { int const N = 10; int c[N]; for ( rev_int_iter it( int_iter(c+N) ) ; it != rev_int_iter( int_iter(c+0) ) ; ++ it ) *it = 0; return c[0]; } // main()