Boost.Range brought back some of the const overloads that were over-zealously removed.

[SVN r61495]
This commit is contained in:
Neil Groves
2010-04-22 22:43:57 +00:00
parent 1dea353fa3
commit adc4b5db3b
16 changed files with 552 additions and 22 deletions

View File

@ -27,24 +27,43 @@ namespace boost
std::size_t u;
};
template< class RandomAccessRange >
inline iterator_range< BOOST_DEDUCED_TYPENAME range_iterator<RandomAccessRange>::type >
slice( RandomAccessRange& rng, std::size_t t, std::size_t u )
{
BOOST_ASSERT( t <= u && "error in slice indices" );
template< class RandomAccessRange >
inline iterator_range< BOOST_DEDUCED_TYPENAME range_iterator<RandomAccessRange>::type >
slice( RandomAccessRange& rng, std::size_t t, std::size_t u )
{
BOOST_ASSERT( t <= u && "error in slice indices" );
BOOST_ASSERT( static_cast<std::size_t>(boost::size(rng)) >= u &&
"second slice index out of bounds" );
"second slice index out of bounds" );
return boost::make_iterator_range( rng, t, u - boost::size(rng) );
}
template< class RandomAccessRange >
inline iterator_range< BOOST_DEDUCED_TYPENAME range_iterator<const RandomAccessRange>::type >
slice( const RandomAccessRange& rng, std::size_t t, std::size_t u )
{
BOOST_ASSERT( t <= u && "error in slice indices" );
BOOST_ASSERT( static_cast<std::size_t>(boost::size(rng)) >= u &&
"second slice index out of bounds" );
return boost::make_iterator_range( rng, t, u - boost::size(rng) );
}
}
template< class RandomAccessRange >
inline iterator_range<
BOOST_DEDUCED_TYPENAME range_iterator<RandomAccessRange>::type >
operator|( RandomAccessRange& r, const sliced& f )
{
return adaptors::slice( r, f.t, f.u );
}
template< class RandomAccessRange >
inline iterator_range<
BOOST_DEDUCED_TYPENAME range_iterator<RandomAccessRange>::type >
operator|( RandomAccessRange& r, const sliced& f )
{
return adaptors::slice( r, f.t, f.u );
}
template< class RandomAccessRange >
inline iterator_range<
BOOST_DEDUCED_TYPENAME range_iterator<const RandomAccessRange>::type >
operator|( const RandomAccessRange& r, const sliced& f )
{
return adaptors::slice( r, f.t, f.u );
}
} // namespace adaptors
} // namespace boost