test version
authorfclaude <fclaude@3cdefd35-fc62-479d-8e8d-bae585ffb9ca>
Sun, 26 Apr 2009 05:48:28 +0000 (05:48 +0000)
committerfclaude <fclaude@3cdefd35-fc62-479d-8e8d-bae585ffb9ca>
Sun, 26 Apr 2009 05:48:28 +0000 (05:48 +0000)
git-svn-id: svn+ssh://idea.nguyen.vg/svn/sxsi/trunk/XMLTree@348 3cdefd35-fc62-479d-8e8d-bae585ffb9ca

libcds/src/static_bitsequence/sdarray.cpp
libcds/src/static_bitsequence/sdarray.h

index 58b72e0..28758d3 100644 (file)
@@ -649,6 +649,9 @@ int selects3_construct(selects3 *select, int n, uint *buf) {
   return 0;
 }
 
+selects3 * lasts3=NULL;
+int lasti=0;
+int lasts=0;
 
 int selects3_select(selects3 *select, int i) {
   int d,x;
@@ -663,16 +666,22 @@ int selects3_select(selects3 *select, int i) {
   if (i == 0) return -1;
 
   d = select->d;
-
-  x = selectd2_select(select->sd1,i,1) - (i-1);
-  x <<= d;
+       if(lasts3==select && lasti==i) {
+               while(!__getbit2(select->sd1->buf,++lasti));
+       } 
+       else {
+         lasts = selectd2_select(select->sd1,i,1);
+       }
+       lasti = i;
+       lasts3 = select;
+  x = (lasts-(i-1)) << d;
   x += __getbits(select->low,(i-1)*d,d);
   return x;
-
 }
 
 
 int selects3_selectnext(selects3 *select, int i) {
+       return selects3_select(select,selects3_rank(select,i)+1);
   int d,x,w,y;
   int r,j;
   int z,ii;
index f908fbe..ef85722 100644 (file)
@@ -26,7 +26,6 @@ typedef struct {
   uint *low;
   selectd2 *sd0,*sd1;
        uint hi_len, low_len;
-
 } selects3;
 
 int selects3_construct(selects3 *select, int n, uint *buf);