X-Git-Url: http://git.nguyen.vg/gitweb/?a=blobdiff_plain;f=libcds%2Fsrc%2Fstatic_sequence%2Fstatic_sequence_bs.cpp;h=f04325e32150c72e4e131384e15a950b714c94bf;hb=f32808a35be7a1e62830a5972473178014fa44e5;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..f04325e 100644 --- a/libcds/src/static_sequence/static_sequence_bs.cpp +++ b/libcds/src/static_sequence/static_sequence_bs.cpp @@ -1,26 +1,34 @@ #include - +using std::max; static_sequence_bs::static_sequence_bs(uint * seq, uint n, alphabet_mapper * am, static_bitsequence_builder * bmb) { sigma = 0; len = n; 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);