#include <static_sequence_wvtree_noptrs.h>
-static_sequence_wvtree_noptrs::static_sequence_wvtree_noptrs(uint * symbols, uint n, static_bitsequence_builder * bmb, alphabet_mapper * am) {
+static_sequence_wvtree_noptrs::static_sequence_wvtree_noptrs(uint * symbols, uint n, static_bitsequence_builder * bmb, alphabet_mapper * am, bool deleteSymbols) {
this->n=n;
this->am=am;
am->use();
uint * new_symb = new uint[n+to_add];
for(uint i=0;i<n;i++)
new_symb[i] = symbols[i];
+
+ if (deleteSymbols)
+ {
+ delete [] symbols;
+ symbols = 0;
+ }
+
to_add = 0;
for(uint i=0;i<max_v;i++)
if(occurrences[i]==0) {
delete [] _bm[i];
}
delete [] _bm;
- for(uint i=0;i<n;i++)
- symbols[i] = am->unmap(symbols[i]);
- delete [] new_symb;
- delete [] oc;
+
+ if (!deleteSymbols)
+ for(uint i=0;i<n;i++)
+ symbols[i] = am->unmap(symbols[i]);
+
+// delete [] new_symb; // already deleted in build_level()!
+ delete [] oc;
}
static_sequence_wvtree_noptrs::static_sequence_wvtree_noptrs() {
}
void static_sequence_wvtree_noptrs::build_level(uint **bm, uint *symbols, uint level, uint length, uint offset) {
- if(level==height) return;
+ if(level==height)
+ {
+ delete [] symbols;
+ return;
+ }
uint cleft=0;
for(uint i=0;i<length;i++)
if(!is_set(symbols[i],level))
right[cright++]=symbols[i];
bitset(bm[level],offset+i);
}
+
+ delete [] symbols;
+ symbols = 0;
+
build_level(bm,left,level+1,cleft,offset);
+ left = 0; // Gets deleted in recursion.
build_level(bm,right,level+1,cright,offset+cleft);
- delete [] left;
- delete [] right;
+ right = 0; // Gets deleted in recursion.
+ //delete [] left;
+ //delete [] right;
}
uint static_sequence_wvtree_noptrs::max_value(uint *symbols, uint n) {