forked from boostorg/iterator
Made filter_iterator bidirectional.
[SVN r1288]
This commit is contained in:
@@ -23,7 +23,7 @@ namespace boost
|
||||
typedef iterator_tag<
|
||||
typename access_category<Iterator>::type
|
||||
, typename minimum_category<
|
||||
forward_traversal_tag
|
||||
bidirectional_traversal_tag
|
||||
, typename traversal_category<Iterator>::type
|
||||
>::type
|
||||
> type;
|
||||
@@ -80,6 +80,11 @@ namespace boost
|
||||
satisfy_predicate();
|
||||
}
|
||||
|
||||
void decrement()
|
||||
{
|
||||
while(!this->m_predicate(*--(this->base_reference()))){};
|
||||
}
|
||||
|
||||
void satisfy_predicate()
|
||||
{
|
||||
while (this->base() != this->m_end && !this->m_predicate(*this->base()))
|
||||
|
@@ -40,15 +40,13 @@ int main()
|
||||
|
||||
typedef boost::filter_iterator<one_or_four, dummyT*> filter_iter;
|
||||
|
||||
boost::forward_iterator_test(
|
||||
boost::bidirectional_readable_iterator_test(
|
||||
filter_iter(one_or_four(), array, array+N)
|
||||
, dummyT(1), dummyT(4));
|
||||
|
||||
// Filter iterators can't be bidirectional, since we didn't choose
|
||||
// to store the beginning of the range.
|
||||
BOOST_STATIC_ASSERT((
|
||||
!boost::detail::is_tag<
|
||||
boost::bidirectional_traversal_tag
|
||||
boost::random_access_traversal_tag
|
||||
, boost::traversal_category<filter_iter>::type
|
||||
>::value
|
||||
));
|
||||
@@ -60,15 +58,15 @@ int main()
|
||||
// is broken ;-(
|
||||
std::deque<dummyT> array2;
|
||||
std::copy(array+0, array+N, std::back_inserter(array2));
|
||||
boost::forward_iterator_test(
|
||||
boost::bidirectional_readable_iterator_test(
|
||||
boost::make_filter_iterator(one_or_four(), array2.begin(), array2.end()),
|
||||
dummyT(1), dummyT(4));
|
||||
|
||||
boost::forward_iterator_test(
|
||||
boost::bidirectional_readable_iterator_test(
|
||||
boost::make_filter_iterator(one_or_four(), array2.begin(), array2.end()),
|
||||
dummyT(1), dummyT(4));
|
||||
|
||||
boost::forward_iterator_test(
|
||||
boost::bidirectional_readable_iterator_test(
|
||||
boost::make_filter_iterator(
|
||||
one_or_four()
|
||||
, boost::make_reverse_iterator(array2.end())
|
||||
@@ -76,11 +74,11 @@ int main()
|
||||
),
|
||||
dummyT(4), dummyT(1));
|
||||
|
||||
boost::forward_iterator_test(
|
||||
boost::bidirectional_readable_iterator_test(
|
||||
filter_iter(array+0, array+N),
|
||||
dummyT(1), dummyT(4));
|
||||
|
||||
boost::forward_iterator_test(
|
||||
boost::bidirectional_readable_iterator_test(
|
||||
filter_iter(one_or_four(), array, array + N),
|
||||
dummyT(1), dummyT(4));
|
||||
|
||||
|
Reference in New Issue
Block a user