X-Git-Url: http://git.nguyen.vg/gitweb/?a=blobdiff_plain;f=src%2Fstatic_bitsequence%2Fstatic_bitsequence_sdarray.h;h=2e739db11c92372e4174168e517220ce4268db9e;hb=f485a898fccde5f6beb9d9b31be4afe973ad627b;hp=f8944d448ac034afbcf83f5210d642798a68d987;hpb=3ce6865a802bdf540109dd37ce04c25408645b26;p=SXSI%2Flibcds.git diff --git a/src/static_bitsequence/static_bitsequence_sdarray.h b/src/static_bitsequence/static_bitsequence_sdarray.h index f8944d4..2e739db 100644 --- a/src/static_bitsequence/static_bitsequence_sdarray.h +++ b/src/static_bitsequence/static_bitsequence_sdarray.h @@ -7,22 +7,41 @@ #include class static_bitsequence_sdarray: public static_bitsequence { - public: + protected: + selects3 sd; + static_bitsequence_sdarray(); + +public: static_bitsequence_sdarray(uint * buff, uint len); - virtual ~static_bitsequence_sdarray(); + static_bitsequence_sdarray(uint * buff, uint len, uint); + ~static_bitsequence_sdarray(); + virtual uint select1(uint i); virtual uint rank1(uint i); virtual uint select_next1(uint i); - virtual uint size(); - virtual int save(FILE * fp); - static static_bitsequence_sdarray * load(FILE * fp); + inline uint select(uint i) { + if(i>ones || i==0) return -1; + if(ones) + return selects3_select(&this->sd,i); + else + return (uint)-1; + } - uint select_next1_unsafe(uint i){ - return selects3_selectnext(&sd,i); - }; - protected: - selects3 sd; - static_bitsequence_sdarray(); + inline uint rank(uint i) { + if(i>=len) return -1; + if(ones) + return selects3_rank(&this->sd, i); + else + return 0; + } + + inline uint select_next(uint i) { + return selects3_selectnext(&this->sd,i); + } + + uint size(); + int save(FILE * fp); + static static_bitsequence_sdarray * load(FILE * fp); };