X-Git-Url: http://git.nguyen.vg/gitweb/?p=SXSI%2Flibbp.git;a=blobdiff_plain;f=bp-darray.h;h=e46834fa52b528c32b7743930c7996d2e98e0e69;hp=4224dbafce4287a3fa27031d8360822197b2fa96;hb=HEAD;hpb=9614bef67d59eaa2413e2b06e5587c6caec57840 diff --git a/bp-darray.h b/bp-darray.h index 4224dba..e46834f 100644 --- a/bp-darray.h +++ b/bp-darray.h @@ -37,17 +37,22 @@ darray * bp_darray_construct(int n, pb *buf,int opt); void bp_darray_free(darray *da); int bp_darray_select(darray *da, int i,int f); -static int bp_darray_rank(darray *da, int i) + +static inline int bp_darray_rank(darray *da, int i) { int r,j,i_rr, i_rrr; + int offset; pb *p; + byte *buff; i_rr = i >> logRR; i_rrr = i >> logRRR; r = da->rl[i>>logR] + da->rm[i_rr]; j = (i_rrr) & (RR/RRR-1); + offset = i_rr << (logRR-logRRR); + buff = &(da->rs[offset-1]); while (j > 0) { - r += da->rs[((i_rr)<<(logRR-logRRR))+j-1]; + r += buff[j]; j--; }