// Copyright Neil Groves 2010. Use, modification and // distribution is subject to 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) // // // For more information, see http://www.boost.org/libs/range/ // #ifndef BOOST_RANGE_COUNTING_RANGE_HPP_INCLUDED #define BOOST_RANGE_COUNTING_RANGE_HPP_INCLUDED #include #if BOOST_MSVC >= 1400 #pragma warning(push) #pragma warning(disable : 4244) #endif #include #include #include #include namespace boost { template inline iterator_range > counting_range(Value first, Value last) { typedef counting_iterator counting_iterator_t; typedef iterator_range result_t; return result_t(counting_iterator_t(first), counting_iterator_t(last)); } template inline iterator_range< counting_iterator< BOOST_DEDUCED_TYPENAME range_iterator::type > > counting_range(const Range& rng) { typedef counting_iterator< BOOST_DEDUCED_TYPENAME range_iterator::type > counting_iterator_t; typedef iterator_range result_t; return result_t(counting_iterator_t(boost::begin(rng)), counting_iterator_t(boost::end(rng))); } template inline iterator_range< counting_iterator< BOOST_DEDUCED_TYPENAME range_iterator::type > > counting_range(Range& rng) { typedef counting_iterator< BOOST_DEDUCED_TYPENAME range_iterator::type > counting_iterator_t; typedef iterator_range result_t; return result_t(counting_iterator_t(boost::begin(rng)), counting_iterator_t(boost::end(rng))); } } // namespace boost #if BOOST_MSVC >= 1400 #pragma warning(pop) #endif #endif // include guard