X-Git-Url: http://git.nguyen.vg/gitweb/?p=SXSI%2Flibbp.git;a=blobdiff_plain;f=bp-darray.h;h=e46834fa52b528c32b7743930c7996d2e98e0e69;hp=75808f10aad27eb2ce4224ef590d032bbcd5fd82;hb=HEAD;hpb=5382b5fde5add82ebd492e97a458a824503fbd8d diff --git a/bp-darray.h b/bp-darray.h index 75808f1..e46834f 100644 --- a/bp-darray.h +++ b/bp-darray.h @@ -38,17 +38,21 @@ 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--; }