Skip to content

Commit

Permalink
refs #16 Корректный алгоритм продвижения итератора склейки на несколь…
Browse files Browse the repository at this point in the history
…ко элементов назад.
  • Loading branch information
izvolov committed Feb 6, 2015
1 parent 81c9e91 commit 9fd5fa4
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 6 deletions.
15 changes: 9 additions & 6 deletions burst/iterator/detail/join_iterator.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -294,15 +294,18 @@ namespace burst
{
while (n > 0)
{
auto items_remaining_in_current_range = m_inner_range_index;
auto items_to_scroll_in_current_range = std::min(n, items_remaining_in_current_range);
n -= items_to_scroll_in_current_range;

m_inner_range_index -= items_to_scroll_in_current_range;
if (m_inner_range_index == 0)
{
--m_outer_range_index;
m_inner_range_index = (*m_ranges)[m_outer_range_index].size();
m_inner_range_index = (*m_ranges)[m_outer_range_index].size() - 1;
--n;
}
else
{
auto items_remaining_in_current_range = m_inner_range_index;
auto items_to_scroll_in_current_range = std::min(n, items_remaining_in_current_range);
n -= items_to_scroll_in_current_range;
m_inner_range_index -= items_to_scroll_in_current_range;
}
}
}
Expand Down
18 changes: 18 additions & 0 deletions test/iterator/join_iterator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -188,4 +188,22 @@ BOOST_AUTO_TEST_SUITE(join_iterator)
expected.rbegin(), expected.rend()
);
}

BOOST_AUTO_TEST_CASE(random_accessing_near_range_bounds_is_correct)
{
auto first = {3, 2};
auto second = {1, 0};
auto ranges = {boost::make_iterator_range(first), boost::make_iterator_range(second)};

auto joined_begin = burst::make_join_iterator(ranges);
auto joined_end = burst::make_join_iterator(ranges, burst::iterator::end_tag);

joined_begin += 2;
BOOST_CHECK_EQUAL(*joined_begin, 1);
BOOST_CHECK_EQUAL(joined_end - joined_begin, 2);

joined_begin -= 2;
BOOST_CHECK_EQUAL(*joined_begin, 3);
BOOST_CHECK_EQUAL(joined_end - joined_begin, 4);
}
BOOST_AUTO_TEST_SUITE_END()

0 comments on commit 9fd5fa4

Please sign in to comment.