sl@0: // (C) Copyright David Abrahams and Jeremy Siek 2000-2001. sl@0: // Distributed under the Boost Software License, Version 1.0. (See sl@0: // accompanying file LICENSE_1_0.txt or copy at sl@0: // http://www.boost.org/LICENSE_1_0.txt) sl@0: // sl@0: // Revision History: sl@0: // 04 Jan 2001 Factored counting_iterator stuff into sl@0: // boost/counting_iterator.hpp (David Abrahams) sl@0: sl@0: #ifndef BOOST_INTEGER_RANGE_HPP_ sl@0: #define BOOST_INTEGER_RANGE_HPP_ sl@0: sl@0: #include sl@0: #include sl@0: #include sl@0: sl@0: namespace boost { sl@0: sl@0: //============================================================================= sl@0: // Counting Iterator and Integer Range Class sl@0: sl@0: template sl@0: struct integer_range { sl@0: typedef counting_iterator iterator; sl@0: sl@0: typedef iterator const_iterator; sl@0: typedef IntegerType value_type; sl@0: typedef std::ptrdiff_t difference_type; sl@0: typedef IntegerType reference; sl@0: typedef IntegerType const_reference; sl@0: typedef const IntegerType* pointer; sl@0: typedef const IntegerType* const_pointer; sl@0: typedef IntegerType size_type; sl@0: sl@0: integer_range(IntegerType start, IntegerType finish) sl@0: : m_start(start), m_finish(finish) { } sl@0: sl@0: iterator begin() const { return iterator(m_start); } sl@0: iterator end() const { return iterator(m_finish); } sl@0: size_type size() const { return m_finish - m_start; } sl@0: bool empty() const { return m_finish == m_start; } sl@0: void swap(integer_range& x) { sl@0: std::swap(m_start, x.m_start); sl@0: std::swap(m_finish, x.m_finish); sl@0: } sl@0: protected: sl@0: IntegerType m_start, m_finish; sl@0: }; sl@0: sl@0: template sl@0: inline integer_range sl@0: make_integer_range(IntegerType first, IntegerType last) sl@0: { sl@0: return integer_range(first, last); sl@0: } sl@0: sl@0: } // namespace boost sl@0: sl@0: #endif // BOOST_INTEGER_RANGE_HPP_