// (C) Copyright David Abrahams and Jeremy Siek 2000-2001. // 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) // // Revision History: // 04 Jan 2001 Factored counting_iterator stuff into // boost/counting_iterator.hpp (David Abrahams) #ifndef BOOST_INTEGER_RANGE_HPP_ #define BOOST_INTEGER_RANGE_HPP_ #include #include #include namespace boost { //============================================================================= // Counting Iterator and Integer Range Class template struct integer_range { typedef counting_iterator iterator; typedef iterator const_iterator; typedef IntegerType value_type; typedef std::ptrdiff_t difference_type; typedef IntegerType reference; typedef IntegerType const_reference; typedef const IntegerType* pointer; typedef const IntegerType* const_pointer; typedef IntegerType size_type; integer_range(IntegerType start, IntegerType finish) : m_start(start), m_finish(finish) { } iterator begin() const { return iterator(m_start); } iterator end() const { return iterator(m_finish); } size_type size() const { return m_finish - m_start; } bool empty() const { return m_finish == m_start; } void swap(integer_range& x) { std::swap(m_start, x.m_start); std::swap(m_finish, x.m_finish); } protected: IntegerType m_start, m_finish; }; template inline integer_range make_integer_range(IntegerType first, IntegerType last) { return integer_range(first, last); } } // namespace boost #endif // BOOST_INTEGER_RANGE_HPP_