2 #include <static_bitsequence_sdarray.h>
4 static_bitsequence_sdarray::static_bitsequence_sdarray(uint * buff, uint len) {
5 uint * tmp_seq = new uint[uint_len(len,1)+1];
7 for(uint i=0;i<uint_len(len,1)+1;i++)
9 for(uint i=0;i<len;i++)
11 __setbit(tmp_seq,i,1);
15 selects3_construct(&sd,len,tmp_seq);
22 static_bitsequence_sdarray::static_bitsequence_sdarray(uint * buff, uint len, uint ones_) {
26 selects3_construct(&sd,len,buff);
31 static_bitsequence_sdarray::static_bitsequence_sdarray() {make___selecttbl();}
33 static_bitsequence_sdarray::~static_bitsequence_sdarray() {
39 uint static_bitsequence_sdarray::size() {
40 return sizeof(static_bitsequence_sdarray)+(ones?(sd.size + sd.sd0->size + sd.sd1->size):0);
44 int static_bitsequence_sdarray::save(FILE * fp) {
45 uint wr = SDARRAY_HDR;
46 wr = fwrite(&wr,sizeof(uint),1,fp);
47 wr += fwrite(&len,sizeof(uint),1,fp);
48 wr += fwrite(&ones,sizeof(uint),1,fp);
49 if(wr!=3 || (ones?(selects3_save(&sd,fp)):false))
55 static_bitsequence_sdarray * static_bitsequence_sdarray::load(FILE * fp) {
57 if(fread(&id,sizeof(uint),1,fp)!=1) return NULL;
58 if(id!=SDARRAY_HDR) return NULL;
59 static_bitsequence_sdarray * ret = new static_bitsequence_sdarray();
60 id = fread(&ret->len,sizeof(uint),1,fp);
61 id += fread(&ret->ones,sizeof(uint),1,fp);
62 if(ret->ones && selects3_load(&ret->sd,fp)) {
69 uint static_bitsequence_sdarray::select1(uint i) { return this->select(i); }
70 uint static_bitsequence_sdarray::rank1(uint i) { return this->rank(i); }
71 uint static_bitsequence_sdarray::select_next1(uint i) { return this->select_next(i); }