more fixes
authorfclaude <fclaude@3cdefd35-fc62-479d-8e8d-bae585ffb9ca>
Sun, 8 Mar 2009 07:06:57 +0000 (07:06 +0000)
committerfclaude <fclaude@3cdefd35-fc62-479d-8e8d-bae585ffb9ca>
Sun, 8 Mar 2009 07:06:57 +0000 (07:06 +0000)
git-svn-id: svn+ssh://idea.nguyen.vg/svn/sxsi/trunk/XMLTree@218 3cdefd35-fc62-479d-8e8d-bae585ffb9ca

libcds/src/static_sequence/wt_node_internal.cpp

index d2d0fa8..9dc87a2 100644 (file)
@@ -142,19 +142,22 @@ uint wt_node_internal::rank(uint symbol, uint pos, uint l, wt_coder * c) {
 
 uint wt_node_internal::select(uint symbol, uint pos, uint l, wt_coder * c) {
        bool is_set = c->is_set(symbol, l);
+       uint ret = 0;
        if(!is_set) {
                if(left_child==NULL)
                        return (uint)(-1);
                uint new_pos = left_child->select(symbol, pos, l+1,c);
                if(new_pos+1==0) return (uint)(-1);
-               return bitmap->select0(new_pos)+1;
+               ret = bitmap->select0(new_pos)+1;
        } else {
                if(right_child==NULL)
                        return (uint)(-1);
                uint new_pos = right_child->select(symbol, pos, l+1,c);
                if(new_pos+1==0) return (uint)(-1);
-               return bitmap->select1(new_pos)+1;
+               ret = bitmap->select1(new_pos)+1;
        }
+       if(ret==0) return (uint)-1;
+       return ret;
 }
 
 uint wt_node_internal::access(uint pos) {