Made filter_iterator bidirectional.

[SVN r1288]
This commit is contained in:
Thomas Witt
2003-05-29 17:11:11 +00:00
parent 8da33f502f
commit 0bada0a914
2 changed files with 13 additions and 10 deletions

View File

@@ -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()))

View File

@@ -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));