mirror of
				https://github.com/boostorg/iterator.git
				synced 2025-10-31 00:11:38 +01:00 
			
		
		
		
	
		
			
	
	
		
			69 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
		
		
			
		
	
	
			69 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
|   | //  (C) Copyright Jeremy Siek 1999. Permission to copy, use, modify,
 | ||
|  | //  sell and distribute this software is granted provided this
 | ||
|  | //  copyright notice appears in all copies. This software is provided
 | ||
|  | //  "as is" without express or implied warranty, and with no claim as
 | ||
|  | //  to its suitability for any purpose.
 | ||
|  | 
 | ||
|  | #ifndef BOOST_INT_ITERATOR_H
 | ||
|  | #define BOOST_INT_ITERATOR_H
 | ||
|  | 
 | ||
|  | #include <boost/iterator.hpp>
 | ||
|  | #if !defined BOOST_MSVC
 | ||
|  | #include <boost/operators.hpp>
 | ||
|  | #endif
 | ||
|  | #include <iostream>
 | ||
|  | //using namespace std;
 | ||
|  | 
 | ||
|  | #ifndef BOOST_NO_OPERATORS_IN_NAMESPACE
 | ||
|  | namespace boost { | ||
|  | #endif
 | ||
|  | 
 | ||
|  | // this should use random_access_iterator_helper but I've had
 | ||
|  | // VC++ portablility problems with that. -JGS
 | ||
|  | template <class IntT> | ||
|  | class int_iterator | ||
|  | { | ||
|  |   typedef int_iterator self; | ||
|  | public: | ||
|  |   typedef std::random_access_iterator_tag iterator_category; | ||
|  |   typedef IntT value_type; | ||
|  |   typedef IntT& reference; | ||
|  |   typedef IntT* pointer; | ||
|  |   typedef ptrdiff_t difference_type; | ||
|  | 
 | ||
|  |   inline int_iterator() : _i(0) { } | ||
|  |   inline int_iterator(IntT i) : _i(i) { } | ||
|  |   inline int_iterator(const self& x) : _i(x._i) { } | ||
|  |   inline self& operator=(const self& x) { _i = x._i; return *this; } | ||
|  |   inline IntT operator*() { return _i; } | ||
|  |   inline IntT operator[](IntT n) { return _i + n; } | ||
|  |   inline self& operator++() { ++_i; return *this; } | ||
|  |   inline self operator++(int) { self t = *this; ++_i; return t; } | ||
|  |   inline self& operator+=(IntT n) { _i += n; return *this; } | ||
|  |   inline self operator+(IntT n) { self t = *this; t._i += n; return t; } | ||
|  |   inline self& operator--() { --_i; return *this; } | ||
|  |   inline self operator--(int) { self t = *this; --_i; return t; } | ||
|  |   inline self& operator-=(IntT n) { _i -= n; return *this; } | ||
|  |   inline IntT operator-(const self& x) const { return _i - x._i; } | ||
|  |   inline bool operator==(const self& x) const { return _i == x._i; } | ||
|  |   // vc++ had a problem finding != in random_access_iterator_helper
 | ||
|  |   // need to look into this... for now implementing everything here -JGS
 | ||
|  |   inline bool operator!=(const self& x) const { return _i != x._i; } | ||
|  |   inline bool operator<(const self& x) const { return _i < x._i; } | ||
|  | protected: | ||
|  |   IntT _i; | ||
|  | }; | ||
|  | 
 | ||
|  | #ifndef BOOST_NO_OPERATORS_IN_NAMESPACE
 | ||
|  | } /* namespace boost */ | ||
|  | #endif
 | ||
|  | 
 | ||
|  | #ifdef BOOST_NO_OPERATORS_IN_NAMESPACE
 | ||
|  | namespace boost { | ||
|  |   using ::int_iterator; | ||
|  | } | ||
|  | #endif
 | ||
|  | 
 | ||
|  | 
 | ||
|  | #endif /* BOOST_INT_ITERATOR_H */
 |