From 890b1368035b2723944894e2b0ec51139c8b2e91 Mon Sep 17 00:00:00 2001 From: nvalimak Date: Tue, 19 May 2009 10:49:03 +0000 Subject: [PATCH] Code clean up. git-svn-id: svn+ssh://idea.nguyen.vg/svn/sxsi/trunk/XMLTree@398 3cdefd35-fc62-479d-8e8d-bae585ffb9ca --- .../src/static_sequence/wt_node_internal.cpp | 44 +++++-------------- libcds/src/static_sequence/wt_node_leaf.cpp | 5 +++ 2 files changed, 17 insertions(+), 32 deletions(-) diff --git a/libcds/src/static_sequence/wt_node_internal.cpp b/libcds/src/static_sequence/wt_node_internal.cpp index ca21c73..0232a73 100644 --- a/libcds/src/static_sequence/wt_node_internal.cpp +++ b/libcds/src/static_sequence/wt_node_internal.cpp @@ -207,42 +207,22 @@ uint wt_node_internal::access(uint pos) { // Returns the value at given position and its rank uint wt_node_internal::access(uint pos, uint &rank) { - // p is the internal node we are pointing our finger at each step - wt_node_internal *p = this; - - while(1) + bool is_set = bitmap->access(pos); + if(!is_set) { - bool is_set = p->bitmap->access(pos); -// cout << "is_set = " << is_set << ", pos = " << pos << ", rank0 = " << bitmap->rank0(pos) << ", rank1 = " << bitmap->rank1(pos) << endl; - if(!is_set) - { - // recurse left - pos = p->bitmap->rank0(pos)-1; - wt_node_internal *tmp = dynamic_cast(p->left_child); - if (tmp == NULL) - { - // it's a leaf - rank = pos+1; - return p->left_child->access(0); - } - p = tmp; // new internal node - } - else - { - // recurse right - pos = p->bitmap->rank1(pos)-1; - wt_node_internal *tmp = dynamic_cast(p->right_child); - if (tmp == NULL) - { - // it's a leaf - rank = pos+1; - return p->right_child->access(0); - } - p = tmp; // new internal node - } + // recurse left + pos = bitmap->rank0(pos)-1; + return left_child->access(pos, rank); + } + else + { + // recurse right + pos = bitmap->rank1(pos)-1; + return right_child->access(pos, rank); } } + void wt_node_internal::access(vector &result, uint i, uint j, uint min, uint max, uint l, uint pivot) { uint symbol = pivot | (1 << l); diff --git a/libcds/src/static_sequence/wt_node_leaf.cpp b/libcds/src/static_sequence/wt_node_leaf.cpp index 6c036fd..9d15193 100644 --- a/libcds/src/static_sequence/wt_node_leaf.cpp +++ b/libcds/src/static_sequence/wt_node_leaf.cpp @@ -57,6 +57,11 @@ uint wt_node_leaf::access(uint pos) { return symbol; } +uint wt_node_leaf::access(uint pos, uint &rank) { + rank = pos+1; + return symbol; +} + void wt_node_leaf::access(vector &result, uint i, uint j, uint min, uint max, uint l, uint pivot) { // std::cout << "At l = " << l << ", [" << i << ", " << j << "], [" << min << ", " << max << "], symbol = " << symbol << std::endl; -- 2.17.1