mirror of
https://github.com/boostorg/range.git
synced 2025-07-29 12:27:42 +02:00
ticket 4572 - make_iterator_range_n
This commit is contained in:
@ -132,6 +132,12 @@ namespace boost
|
|||||||
make_iterator_range( ForwardTraversalIterator Begin,
|
make_iterator_range( ForwardTraversalIterator Begin,
|
||||||
ForwardTraversalIterator End );
|
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 >
|
template< class ForwardRange >
|
||||||
iterator_range< typename range_iterator<ForwardRange>::type >
|
iterator_range< typename range_iterator<ForwardRange>::type >
|
||||||
make_iterator_range( ForwardRange& r );
|
make_iterator_range( ForwardRange& r );
|
||||||
|
@ -651,6 +651,13 @@ public:
|
|||||||
return iterator_range<IteratorT>( Begin, End );
|
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
|
#ifdef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
|
||||||
|
|
||||||
template< typename Range >
|
template< typename Range >
|
||||||
|
@ -213,7 +213,30 @@ namespace iterator_range_test_detail
|
|||||||
BOOST_CHECK_EQUAL_COLLECTIONS( rng.begin(), rng.end(),
|
BOOST_CHECK_EQUAL_COLLECTIONS( rng.begin(), rng.end(),
|
||||||
source, source + 6 );
|
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
|
} // namespace iterator_range_test_detail
|
||||||
|
|
||||||
template<typename Pred>
|
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::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::equal_to>));
|
||||||
test->add(BOOST_TEST_CASE(&check_iterator_range_operator<iterator_range_test_detail::not_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;
|
return test;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user