// Boost.Range library // // Copyright Neil Groves 2008. Use, modification and // distribution is subject to the Boost Software Licence, 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::type> > counting_range(const Range& rng) { typedef counting_iterator::type> counting_iterator_t; typedef iterator_range result_t; return boost::empty(rng) ? result_t() : result_t( counting_iterator_t(*boost::begin(rng)), counting_iterator_t(*boost::prior(boost::end(rng)))); } template inline iterator_range::type> > counting_range(Range& rng) { typedef counting_iterator::type> counting_iterator_t; typedef iterator_range result_t; return boost::empty(rng) ? result_t() : result_t( counting_iterator_t(*boost::begin(rng)), counting_iterator_t(*boost::prior(boost::end(rng)))); } } // namespace boost #if BOOST_MSVC >= 1400 #pragma warning(pop) #endif #endif // include guard