BitSequenceRG::BitSequenceRG(const BitString & bs, uint _factor) { /*cout << "*****" << endl; cout << bitarray << endl; cout << _n << endl; cout << _factor << endl; */ const uint * bitarray = bs.getData(); size_t _n = bs.getLength(); if(_factor==0) exit(-1); data=new uint[_n/W+1]; for(size_t i=0;i<uint_len(_n,1);i++) data[i] = bitarray[i]; for(size_t i=uint_len(_n,1);i<_n/W+1;i++) data[i] = 0; //this->owner = true; this->n=_n; uint lgn=bits(n-1); this->factor=_factor; if (_factor==0) this->factor=lgn; else this->factor=_factor; b=32; s=b*this->factor; integers = n/W+1; BuildRank(); this->length = n; this->ones = rank1(n-1); }
pair<BitString *,uint> generateBitmap(size_t length,vector<pair<uint,uint> > &nodes ) { uint bitmap_pos = 0; BitString *bitmap = new BitString(length); size_t a,b; cst->Root(&a,&b); bitmap_pos++; // cout << "(" ; generateBitmapAux(make_pair(a,b),bitmap,bitmap_pos,nodes); bitmap->setBit(bitmap_pos); bitmap_pos++; // cout << ")"; // cout << "nodes.size() = " << nodes.size() << endl; BitString *new_bitmap = new BitString(bitmap->getData(),bitmap_pos); // for (int i = 0 ; i < nodes.size();i++) { // cout << nodes[i].first << endl; // } // cout << "=========== tree ==========" << endl; // for (int i = 0 ;i < bitmap_pos;i++) { // if (bitmap->getBit(i)) // cout << ")"; // else // cout << "("; // } // cout << endl; return make_pair(new_bitmap,bitmap_pos); }
BitSequenceRGK::BitSequenceRGK(const BitString &bs, uint _factor, uint selectsampling) { const uint *bitarray = bs.getData(); size_t _n = bs.getLength(); // cout << _factor << endl; if (_factor == 0) exit(-1); // cout << "_n/W+1=" << _n/W+1 << endl; data = new uint[_n / W + 1]; // cout << "_n/W+1=" << _n/W+1 << endl; for (size_t i = 0; i < uint_len(_n, 1); i++) data[i] = bitarray[i]; for (size_t i = uint_len(_n, 1); i < _n / W + 1; i++) data[i] = 0; //this->owner = true; this->n = _n; uint lgn = bits(n - 1); this->factor = _factor; if (_factor == 0) this->factor = lgn; else this->factor = _factor; b = 32; s = b * this->factor; integers = n / W + 1; BuildRank(); this->length = n; this->ones = rank1(n - 1); fastselect0 = true; fastselect1 = true; select1sampling = selectsampling; select0sampling = selectsampling; if (fastselect1) { // cout << "entered here" << endl; this->Stones = new uint[ones / select1sampling + 1]; Stones[0] = 0; for (size_t i = 0; i <= ones; i += select1sampling) { if (i == 0) continue; Stones[i / select1sampling] = this->select1_s(i); } } if (fastselect0) { this->Stzero = new uint[(n - ones) / select0sampling + 1]; Stzero[0] = 0; for (size_t i = 0; i <= (n - ones); i += select0sampling) { if (i == 0) continue; Stzero[i / select0sampling] = this->select0_s((i)); } } }
BitSequenceRRR::BitSequenceRRR(const BitString & bs, uint sample_rate) { build(bs.getData(),bs.getLength(),sample_rate); }