[GIT] ppl/ppl(sparse_matrices): CO_Tree: don' t use an iterator in move_data_from().

Module: ppl/ppl Branch: sparse_matrices Commit: 55e47337b37778041bfaabfdec99d572f58499cb URL: http://www.cs.unipr.it/git/gitweb.cgi?p=ppl/ppl.git;a=commit;h=55e47337b3777...
Author: Marco Poletti poletti.marco@gmail.com Date: Sun Aug 8 08:55:58 2010 +0200
CO_Tree: don't use an iterator in move_data_from().
---
src/CO_Tree.cc | 19 +++++++++++-------- 1 files changed, 11 insertions(+), 8 deletions(-)
diff --git a/src/CO_Tree.cc b/src/CO_Tree.cc index 57fb757..b7fad8f 100644 --- a/src/CO_Tree.cc +++ b/src/CO_Tree.cc @@ -201,10 +201,10 @@ PPL::CO_Tree::move_data_from(CO_Tree& tree) { return;
tree_iterator root(*this); - iterator itr = tree.before_begin(); - itr.get_next_value();
- PPL_ASSERT(itr->first != unused_index); + dimension_type source_index = 1; + while (tree.indexes[source_index] == unused_index) + ++source_index;
// This is static and with static allocation, to improve performance. static std::pair<dimension_type,char> stack[5*CHAR_BIT*sizeof(dimension_type)]; @@ -261,11 +261,14 @@ PPL::CO_Tree::move_data_from(CO_Tree& tree) { } else { if (top_n == 1) { PPL_ASSERT(root->first == unused_index); - PPL_ASSERT(itr->first != unused_index); - root->first = itr->first; - itr->first = unused_index; - move_data_element(root->second, itr->second); - itr.get_next_value(); + PPL_ASSERT(tree.indexes[source_index] != unused_index); + root->first = tree.indexes[source_index]; + tree.indexes[source_index] = unused_index; + move_data_element(root->second, tree.data[source_index]); + PPL_ASSERT(source_index <= tree.reserved_size); + ++source_index; + while (tree.indexes[source_index] == unused_index) + ++source_index; --stack_first_empty; } else { PPL_ASSERT(stack_first_empty + 3 < sizeof(stack)/sizeof(stack[0]));
participants (1)
-
Marco Poletti