projects
/
SXSI
/
XMLTree.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Backport changes from the grammar branch
[SXSI/XMLTree.git]
/
libcds
/
src
/
static_bitsequence
/
static_bitsequence.cpp
diff --git
a/libcds/src/static_bitsequence/static_bitsequence.cpp
b/libcds/src/static_bitsequence/static_bitsequence.cpp
index
7813d8c
..
ad07b84
100644
(file)
--- a/
libcds/src/static_bitsequence/static_bitsequence.cpp
+++ b/
libcds/src/static_bitsequence/static_bitsequence.cpp
@@
-26,8
+26,9
@@
uint static_bitsequence::rank0(uint i) {
}
uint static_bitsequence::rank1(uint i) {
}
uint static_bitsequence::rank1(uint i) {
- if(i>=len) return ones;
- if(ones==0) return -1;
+ if(i>=len) return (uint)-1;
+ if(ones==0) return 0;
+ if(ones==len) return i+1;
uint ini = 1;
uint fin = ones;
while(ini<fin) {
uint ini = 1;
uint fin = ones;
while(ini<fin) {
@@
-44,8
+45,9
@@
uint static_bitsequence::rank1(uint i) {
}
uint static_bitsequence::select0(uint i) {
}
uint static_bitsequence::select0(uint i) {
- if(i>len-ones) return
len
;
+ if(i>len-ones) return
-1
;
if(i==0) return -1;
if(i==0) return -1;
+ if(ones==0) return i-1;
uint ini = 0;
uint fin = len-1;
while(ini<fin) {
uint ini = 0;
uint fin = len-1;
while(ini<fin) {
@@
-60,8
+62,9
@@
uint static_bitsequence::select0(uint i) {
}
uint static_bitsequence::select1(uint i) {
}
uint static_bitsequence::select1(uint i) {
- if(i>ones) return len;
- if(i==0) return 0;
+ if(i>ones) return -1;
+ if(i==0) return -1;
+ if(ones==len) return i-1;
uint ini = 0;
uint fin = len-1;
while(ini<fin) {
uint ini = 0;
uint fin = len-1;
while(ini<fin) {
@@
-75,6
+78,14
@@
uint static_bitsequence::select1(uint i) {
return ini;
}
return ini;
}
+uint static_bitsequence::select_next1(uint i) {
+ return select1(rank1(i)+1);
+}
+
+uint static_bitsequence::select_next0(uint i) {
+ return select0(rank0(i)+1);
+}
+
bool static_bitsequence::access(uint i) {
return (rank1(i)-(i!=0?rank1(i-1):0))>0;
}
bool static_bitsequence::access(uint i) {
return (rank1(i)-(i!=0?rank1(i-1):0))>0;
}
@@
-99,6
+110,7
@@
static_bitsequence * static_bitsequence::load(FILE * fp) {
case RRR02_HDR: return static_bitsequence_rrr02::load(fp);
case BRW32_HDR: return static_bitsequence_brw32::load(fp);
case RRR02_LIGHT_HDR: return static_bitsequence_rrr02_light::load(fp);
case RRR02_HDR: return static_bitsequence_rrr02::load(fp);
case BRW32_HDR: return static_bitsequence_brw32::load(fp);
case RRR02_LIGHT_HDR: return static_bitsequence_rrr02_light::load(fp);
+ case SDARRAY_HDR: return static_bitsequence_sdarray::load(fp);
}
return NULL;
}
}
return NULL;
}