mirror of
https://github.com/boostorg/iterator.git
synced 2025-07-19 07:32:08 +02:00
This change excludes boost:: and boost::detail:: namespaces from ADL for unqualified function calls (e.g. algorithms). This reduces the possibility of name clashes with other libraries and user's code. One of the effects should be fixing test failures on gcc 4.2 and 4.4 due to clashed with Boost.TypeTraits. Also some of the functions marked with inline keyword.
82 lines
2.6 KiB
C++
82 lines
2.6 KiB
C++
// (C) Copyright Jeremy Siek 1999.
|
|
// Distributed under the Boost Software License, Version 1.0. (See
|
|
// accompanying file LICENSE_1_0.txt or copy at
|
|
// http://www.boost.org/LICENSE_1_0.txt)
|
|
|
|
#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 {
|
|
namespace iterators {
|
|
#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 std::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 += 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; }
|
|
inline bool operator<=(const self& x) const { return _i <= x._i; }
|
|
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;
|
|
};
|
|
|
|
template <class IntT>
|
|
inline int_iterator<IntT>
|
|
operator+(IntT n, int_iterator<IntT> t) { t += n; return t; }
|
|
|
|
#ifndef BOOST_NO_OPERATORS_IN_NAMESPACE
|
|
} /* namespace iterators */
|
|
|
|
using iterators::int_iterator;
|
|
|
|
} /* namespace boost */
|
|
#endif
|
|
|
|
#ifdef BOOST_NO_OPERATORS_IN_NAMESPACE
|
|
namespace boost {
|
|
using ::int_iterator;
|
|
namespace iterators {
|
|
using ::int_iterator;
|
|
}}
|
|
#endif
|
|
|
|
|
|
#endif /* BOOST_INT_ITERATOR_H */
|