X-Git-Url: http://git.nguyen.vg/gitweb/?a=blobdiff_plain;f=libcds%2Fsrc%2Fstatic_sequence%2Fstatic_sequence_gmr_chunk.h;fp=libcds%2Fsrc%2Fstatic_sequence%2Fstatic_sequence_gmr_chunk.h;h=a06b635699ba40754685b90095532a548b0e3c00;hb=450ba3c9c74665094fb8f6821d6cc92d2bf23011;hp=0000000000000000000000000000000000000000;hpb=ac626dacdd094e0dc9fbc3302fec0020cf97942c;p=SXSI%2FXMLTree.git diff --git a/libcds/src/static_sequence/static_sequence_gmr_chunk.h b/libcds/src/static_sequence/static_sequence_gmr_chunk.h new file mode 100644 index 0000000..a06b635 --- /dev/null +++ b/libcds/src/static_sequence/static_sequence_gmr_chunk.h @@ -0,0 +1,48 @@ + +#ifndef _STATIC_SEQUENCE_GMR_CHUNK_H +#define _STATIC_SEQUENCE_GMR_CHUNK_H + +#include +#include +#include +#include +#include +#include + +using namespace std; + +/** Implementation of the Chunk of Golynski et al's rank/select + * data structure [1]. + * + * [1] A. Golynski and I. Munro and S. Rao. + * Rank/select operations on large alphabets: a tool for text indexing. + * SODA 06. + * + * @author Francisco Claude + */ +class static_sequence_gmr_chunk: public static_sequence { + public: + /** Builds the structures needed for the chunk */ + static_sequence_gmr_chunk(uint * sequence, uint chunk_length, static_bitsequence_builder *bmb, static_permutation_builder *pmb); + + /** Destroy the chunk */ + ~static_sequence_gmr_chunk(); + + virtual uint access(uint j); + virtual uint select(uint i, uint j); + virtual uint rank(uint i, uint j); + virtual uint size(); + virtual uint save(FILE *fp); + static_sequence_gmr_chunk * load(FILE *fp); + + protected: + /** Bitmap */ + static_bitsequence * X; + /** Permutation */ + static_permutation permutation; + /** Size of the alphabet */ + uint sigma; + /** Length of the chunk */ + uint chunk_length; +}; +#endif