X-Git-Url: http://git.nguyen.vg/gitweb/?a=blobdiff_plain;f=libcds%2Fsrc%2Fstatic_sequence%2Fstatic_sequence.cpp;h=bd86382ad6cfb07de5a244a1dd89c74c41c51766;hb=e38bc834442d5369a523ba47d74865e48995ace4;hp=e97a1120ddcbb4a4b40a535ff82b8f024fb0c3dd;hpb=a9846746dc7a55764591fcc273fd48c6049df962;p=SXSI%2FXMLTree.git diff --git a/libcds/src/static_sequence/static_sequence.cpp b/libcds/src/static_sequence/static_sequence.cpp index e97a112..bd86382 100644 --- a/libcds/src/static_sequence/static_sequence.cpp +++ b/libcds/src/static_sequence/static_sequence.cpp @@ -20,6 +20,12 @@ */ #include +using std::max; +using std::min; +using std::cout; +using std::cin; +using std::endl; + static_sequence::static_sequence() {} static_sequence::~static_sequence() {} @@ -38,6 +44,50 @@ static_sequence * static_sequence::load(FILE * fp) { case GMR_CHUNK_HDR: return static_sequence_gmr_chunk::load(fp); case GMR_HDR: return static_sequence_gmr::load(fp); case WVTREE_NOPTRS_HDR: return static_sequence_wvtree_noptrs::load(fp); + case BS_HDR: return static_sequence_bs::load(fp); } return NULL; } + +uint static_sequence::select_next(uint c, uint i) { + return select(c,rank(c,i)+1); +} + +bool static_sequence::test(uint * seq, uint n) { + uint sigma = 0; + for(uint i=0;i0 && rank(seq[i],i-1)!=occ[seq[i]]-1) { + cout << "rank-1 failed!" << endl; + delete [] occ; + return false; + } + if(select(seq[i],occ[seq[i]])!=i) { + cout << "select failed!" << endl; + cout << "select(" << seq[i] << "," << occ[seq[i]] << ")="<