#include <sdarray.h>
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);
};