Exemple #1
0
 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);
 }
Exemple #2
0
BitRankW32Int::BitRankW32Int( uint *bitarray, uint _n, bool owner, uint _factor){
  data=bitarray;
  this->owner = owner;
  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/WW32+1;
  BuildRank();
}
BitSequenceRGK::BitSequenceRGK(Builder builder) {
    BitString &bs = *builder.bs_;
    uint _factor = builder.factor_;
    select1sampling = builder.sonesamp_;
    select0sampling = builder.szerosamp_;
    fastselect0 = builder.fastselect0_;
    fastselect1 = builder.fastselect1_;

    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);
    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));
        }
    }
}
BitSequenceRGK::BitSequenceRGK(uint *bitarray, size_t _n, uint _factor, uint selectsampling) {
    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);
    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));
        }
    }
}