From aebb16feefcc97bff4cc4ac5cbf55c354f93d2ee Mon Sep 17 00:00:00 2001 From: Neil Groves Date: Wed, 12 May 2010 01:34:50 +0000 Subject: [PATCH] Boost.Range sliced adaptor is now compatible with VC10 even with using namespace boost::adaptors. [SVN r61923] --- include/boost/range/adaptor/sliced.hpp | 28 +++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/include/boost/range/adaptor/sliced.hpp b/include/boost/range/adaptor/sliced.hpp index eb506e0..03c6894 100755 --- a/include/boost/range/adaptor/sliced.hpp +++ b/include/boost/range/adaptor/sliced.hpp @@ -28,14 +28,26 @@ namespace boost }; template< class RandomAccessRange > - inline iterator_range< BOOST_DEDUCED_TYPENAME range_iterator::type > + class sliced_range : public boost::iterator_range< BOOST_DEDUCED_TYPENAME range_iterator::type > + { + typedef boost::iterator_range< BOOST_DEDUCED_TYPENAME range_iterator::type > base_t; + public: + template + sliced_range(Rng& rng, T t, U u) + : base_t(boost::make_iterator_range(rng, t, u - boost::size(rng))) + { + } + }; + + template< class RandomAccessRange > + inline sliced_range slice( RandomAccessRange& rng, std::size_t t, std::size_t u ) { BOOST_ASSERT( t <= u && "error in slice indices" ); BOOST_ASSERT( static_cast(boost::size(rng)) >= u && "second slice index out of bounds" ); - return boost::make_iterator_range( rng, t, u - boost::size(rng) ); + return sliced_range(rng, t, u); } template< class RandomAccessRange > @@ -46,23 +58,21 @@ namespace boost BOOST_ASSERT( static_cast(boost::size(rng)) >= u && "second slice index out of bounds" ); - return boost::make_iterator_range( rng, t, u - boost::size(rng) ); + return sliced_range(rng, t, u); } template< class RandomAccessRange > - inline iterator_range< - BOOST_DEDUCED_TYPENAME range_iterator::type > + inline sliced_range operator|( RandomAccessRange& r, const sliced& f ) { - return adaptors::slice( r, f.t, f.u ); + return sliced_range( r, f.t, f.u ); } template< class RandomAccessRange > - inline iterator_range< - BOOST_DEDUCED_TYPENAME range_iterator::type > + inline sliced_range operator|( const RandomAccessRange& r, const sliced& f ) { - return adaptors::slice( r, f.t, f.u ); + return sliced_range( r, f.t, f.u ); } } // namespace adaptors