X-Git-Url: http://git.nguyen.vg/gitweb/?a=blobdiff_plain;f=libcds%2Fsrc%2Fstatic_sequence%2Fstatic_sequence_bs.cpp;h=83f18c753987541cf6c1ea50b45a47a93e139b28;hb=1c40b498ddd6d66b09aff3a22b9f7ddd845250dc;hp=3a4aaa24dd3ff3ca2a59a9fc7245ed86492fd1be;hpb=935f20b93a3db7cd2f9f39573d4ab434fcc4356a;p=SXSI%2FXMLTree.git diff --git a/libcds/src/static_sequence/static_sequence_bs.cpp b/libcds/src/static_sequence/static_sequence_bs.cpp index 3a4aaa2..83f18c7 100644 --- a/libcds/src/static_sequence/static_sequence_bs.cpp +++ b/libcds/src/static_sequence/static_sequence_bs.cpp @@ -7,20 +7,28 @@ static_sequence_bs::static_sequence_bs(uint * seq, uint n, alphabet_mapper * am, this->am = am; am->use(); for(uint i=0;imap(seq[i])); - bitmaps = new static_bitsequence*[++sigma]; - uint ** bm = new uint*[sigma]; + sigma++; + uint * occ = new uint[sigma+1]; + for(uint i=0;i<=sigma;i++) occ[i] = 0; + for(uint i=0;imap(seq[i])+1]++; + for(uint i=1;imap(seq[i])]++]=i; + bitmaps = new static_bitsequence*[sigma]; + uint * bm = new uint[uint_len(n,1)]; + uint pp=0; for(uint i=0;ibuild(bm,len); } - for(uint i=0;imap(seq[i])],i); - for(uint i=0;ibuild(bm[i],len); - for(uint i=0;imap(c)>=sigma) return (uint)-1; return bitmaps[am->map(c)]->rank1(i); } - +/* uint static_sequence_bs::select(uint c, uint i) { if(am->map(c)>=sigma) return (uint)-1; return bitmaps[am->map(c)]->select1(i); @@ -54,7 +62,15 @@ uint static_sequence_bs::select_next(uint c, uint i) { if(am->map(c)>=sigma) return (uint)-1; return bitmaps[am->map(c)]->select_next1(i); } - +*/ +uint static_sequence_bs::select(uint c, uint i) { + if(c>=sigma) return (uint)-1; + return bitmaps[c]->select1(i); +} +uint static_sequence_bs::select_next(uint c, uint i) { + if(c>=sigma) return (uint)-1; + return bitmaps[c]->select_next1(i); +} uint static_sequence_bs::access(uint i) { for(uint j=0;jaccess(i)) return am->unmap(j);