X-Git-Url: http://git.nguyen.vg/gitweb/?a=blobdiff_plain;f=libcds%2Fsrc%2Fstatic_sequence%2Fstatic_sequence_wvtree_noptrs.h;h=170cef91f97859a7b441192f2ebed9bc91fee7b0;hb=f32808a35be7a1e62830a5972473178014fa44e5;hp=23e64865bb6c486ed44dfc58fa3e313276ec003f;hpb=52cb7bbcda67f4676335cdd4eb96d4d87ad1445d;p=SXSI%2FXMLTree.git diff --git a/libcds/src/static_sequence/static_sequence_wvtree_noptrs.h b/libcds/src/static_sequence/static_sequence_wvtree_noptrs.h index 23e6486..170cef9 100644 --- a/libcds/src/static_sequence/static_sequence_wvtree_noptrs.h +++ b/libcds/src/static_sequence/static_sequence_wvtree_noptrs.h @@ -30,7 +30,7 @@ #include #include -using namespace std; +//using namespace std; class static_sequence_wvtree_noptrs : public static_sequence { public: @@ -38,7 +38,10 @@ class static_sequence_wvtree_noptrs : public static_sequence { /** Builds a Wavelet Tree for the string * pointed by symbols assuming its length * equals n and uses bmb to build the bitsequence */ - static_sequence_wvtree_noptrs(uint * symbols, uint n, static_bitsequence_builder * bmb, alphabet_mapper * am); + static_sequence_wvtree_noptrs(uint * symbols, uint n, static_bitsequence_builder * bmb, alphabet_mapper * am, bool deleteSymbols = false); + + // symbols is an array of elements of "width" bits. + static_sequence_wvtree_noptrs(uint * symbols, uint n, unsigned width, static_bitsequence_builder * bmb, alphabet_mapper * am, bool deleteSymbols = false); /** Destroys the Wavelet Tree */ virtual ~static_sequence_wvtree_noptrs(); @@ -47,11 +50,18 @@ class static_sequence_wvtree_noptrs : public static_sequence { virtual uint select(uint symbol, uint i); virtual uint access(uint pos); virtual uint size(); + + virtual vector access(uint i, uint j, uint min, uint max); + virtual vector accessAll(uint i, uint j); + virtual uint count(uint i, uint j, uint min, uint max); virtual uint save(FILE *fp); static static_sequence_wvtree_noptrs * load(FILE *fp); protected: + void access(vector &result, uint i, uint j, uint min, uint max, uint l, uint pivot, uint start, uint end); + void accessAll(vector &result, uint i, uint j, uint l, uint pivot, uint start, uint end); + uint count(uint i, uint j, uint min, uint max, uint l, uint pivot, uint start, uint end); static_sequence_wvtree_noptrs(); @@ -68,6 +78,7 @@ class static_sequence_wvtree_noptrs : public static_sequence { /** Obtains the maximum value from the string * symbols of length n */ uint max_value(uint * symbols, uint n); + uint max_value(uint * symbols, unsigned width, uint n); /** How many bits are needed to represent val */ uint bits(uint val); @@ -81,5 +92,6 @@ class static_sequence_wvtree_noptrs : public static_sequence { /** Recursive function for building the Wavelet Tree. */ void build_level(uint **bm, uint *symbols, uint level, uint length, uint offset); + void build_level(uint **bm, uint *symbols, unsigned width, uint level, uint length, uint offset); }; #endif