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