New WVTree constructor
[SXSI/XMLTree.git] / libcds / src / static_sequence / static_sequence_wvtree_noptrs.h
index 23e6486..399f3c2 100644 (file)
@@ -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<int> access(uint i, uint j, uint min, uint max);
+    virtual vector<int> 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<int> &result, uint i, uint j, uint min, uint max, uint l, uint pivot, uint start, uint end);
+    void accessAll(vector<int> &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