From: fclaude Date: Sun, 26 Apr 2009 05:48:28 +0000 (+0000) Subject: test version X-Git-Url: http://git.nguyen.vg/gitweb/?a=commitdiff_plain;h=14640e9a1cfbbe8d6669d17d098fcabc3652cd77;p=SXSI%2FXMLTree.git test version git-svn-id: svn+ssh://idea.nguyen.vg/svn/sxsi/trunk/XMLTree@348 3cdefd35-fc62-479d-8e8d-bae585ffb9ca --- diff --git a/libcds/src/static_bitsequence/sdarray.cpp b/libcds/src/static_bitsequence/sdarray.cpp index 58b72e0..28758d3 100644 --- a/libcds/src/static_bitsequence/sdarray.cpp +++ b/libcds/src/static_bitsequence/sdarray.cpp @@ -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; diff --git a/libcds/src/static_bitsequence/sdarray.h b/libcds/src/static_bitsequence/sdarray.h index f908fbe..ef85722 100644 --- a/libcds/src/static_bitsequence/sdarray.h +++ b/libcds/src/static_bitsequence/sdarray.h @@ -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);