forked from boostorg/range
ticket 4572 - make_iterator_range_n
This commit is contained in:
@ -132,6 +132,12 @@ namespace boost
|
||||
make_iterator_range( ForwardTraversalIterator Begin,
|
||||
ForwardTraversalIterator End );
|
||||
|
||||
// Make an iterator_range [first, boost::next(first, n) )
|
||||
template< class ForwardTraversalIterator, class Integer >
|
||||
iterator_range< ForwardTraversalIterator >
|
||||
make_iterator_range_n( ForwardTraversalIterator first, Integer n );
|
||||
|
||||
|
||||
template< class ForwardRange >
|
||||
iterator_range< typename range_iterator<ForwardRange>::type >
|
||||
make_iterator_range( ForwardRange& r );
|
||||
|
@ -651,6 +651,13 @@ public:
|
||||
return iterator_range<IteratorT>( Begin, End );
|
||||
}
|
||||
|
||||
template<typename IteratorT, typename IntegerT>
|
||||
inline iterator_range<IteratorT>
|
||||
make_iterator_range_n(IteratorT first, IntegerT n)
|
||||
{
|
||||
return iterator_range<IteratorT>(first, boost::next(first, n));
|
||||
}
|
||||
|
||||
#ifdef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
|
||||
|
||||
template< typename Range >
|
||||
|
@ -213,7 +213,30 @@ namespace iterator_range_test_detail
|
||||
BOOST_CHECK_EQUAL_COLLECTIONS( rng.begin(), rng.end(),
|
||||
source, source + 6 );
|
||||
}
|
||||
|
||||
|
||||
void check_make_iterator_range_n()
|
||||
{
|
||||
std::vector<uint32_t> input;
|
||||
for (uint32_t i = 0; i < 10u; ++i)
|
||||
input.push_back(i);
|
||||
|
||||
boost::iterator_range<std::vector<uint32_t>::iterator> rng =
|
||||
boost::make_iterator_range_n(boost::begin(input), 8u);
|
||||
|
||||
BOOST_CHECK(rng.begin() == input.begin());
|
||||
BOOST_CHECK(rng.end() == input.begin() + 8);
|
||||
BOOST_CHECK_EQUAL(rng.size(), 8u);
|
||||
|
||||
const std::vector<uint32_t>& cinput = input;
|
||||
|
||||
boost::iterator_range<std::vector<uint32_t>::const_iterator> crng =
|
||||
boost::make_iterator_range_n(boost::begin(cinput), 8u);
|
||||
|
||||
BOOST_CHECK(crng.begin() == cinput.begin());
|
||||
BOOST_CHECK(crng.end() == cinput.begin() + 8);
|
||||
BOOST_CHECK_EQUAL(crng.size(), 8u);
|
||||
}
|
||||
|
||||
} // namespace iterator_range_test_detail
|
||||
|
||||
template<typename Pred>
|
||||
@ -234,6 +257,7 @@ boost::unit_test::test_suite* init_unit_test_suite( int argc, char* argv[] )
|
||||
test->add(BOOST_TEST_CASE(&check_iterator_range_operator<iterator_range_test_detail::greater_or_equal>));
|
||||
test->add(BOOST_TEST_CASE(&check_iterator_range_operator<iterator_range_test_detail::equal_to>));
|
||||
test->add(BOOST_TEST_CASE(&check_iterator_range_operator<iterator_range_test_detail::not_equal_to>));
|
||||
test->add(BOOST_TEST_CASE(&iterator_range_test_detail::check_make_iterator_range_n));
|
||||
|
||||
return test;
|
||||
}
|
||||
|
Reference in New Issue
Block a user