Bug fix
authorfclaude <fclaude@3cdefd35-fc62-479d-8e8d-bae585ffb9ca>
Sun, 8 Mar 2009 02:26:20 +0000 (02:26 +0000)
committerfclaude <fclaude@3cdefd35-fc62-479d-8e8d-bae585ffb9ca>
Sun, 8 Mar 2009 02:26:20 +0000 (02:26 +0000)
git-svn-id: svn+ssh://idea.nguyen.vg/svn/sxsi/trunk/XMLTree@212 3cdefd35-fc62-479d-8e8d-bae585ffb9ca

libcds/src/static_bitsequence/static_bitsequence_brw32.cpp
libcds/src/static_bitsequence/static_bitsequence_brw32.h
libcds/src/static_bitsequence/static_bitsequence_rrr02.cpp

index 2ca4eed..f671a72 100644 (file)
@@ -238,6 +238,7 @@ uint static_bitsequence_brw32::select1(uint x) {
   // then sequential search using popcount over a int
   // then sequential search using popcount over a char
   // then sequential search bit a bit
+  if(x>ones) return (uint)(-1);
 
   //binary search over first level rank structure
   uint l=0, r=n/s;
@@ -299,6 +300,7 @@ uint static_bitsequence_brw32::select0(uint x) {
   // then sequential search using popcount over a int
   // then sequential search using popcount over a char
   // then sequential search bit a bit
+  if(x>n-ones) return (uint)(-1);
 
   //binary search over first level rank structure
   if(x==0) return 0;
index 64fcf1b..af95a4a 100644 (file)
@@ -46,6 +46,7 @@
 class static_bitsequence_brw32 : public static_bitsequence {
 private:
        uint *data;
+uint n;
   //bool owner;
        uint n,integers;
   uint factor,b,s;
index aee722e..47a382e 100644 (file)
@@ -162,8 +162,8 @@ uint static_bitsequence_rrr02::rank1(uint i) {
 }
 
 uint static_bitsequence_rrr02::select0(uint i) {
-       if(i==0) return -1;
-       if(i>len-ones) return len;
+       if(i==0) return (uint)-1;
+       if(i>len-ones) return (uint)-1;
        // Search over partial sums
        uint start=0;
        uint end=C_sampling_len-1;
@@ -219,7 +219,7 @@ uint static_bitsequence_rrr02::select0(uint i) {
 
 uint static_bitsequence_rrr02::select1(uint i) {
        if(i==0) return -1;
-       if(i>ones) return len;
+       if(i>ones) return -1;
        // Search over partial sums
        uint start=0;
        uint end=C_sampling_len-1;