From: nvalimak Date: Mon, 20 Apr 2009 11:25:47 +0000 (+0000) Subject: Fixed construction space X-Git-Url: http://git.nguyen.vg/gitweb/?a=commitdiff_plain;h=2fddecca0a706b36afd5f0ee932f20c93ff3d692;p=SXSI%2FXMLTree.git Fixed construction space git-svn-id: svn+ssh://idea.nguyen.vg/svn/sxsi/trunk/XMLTree@330 3cdefd35-fc62-479d-8e8d-bae585ffb9ca --- diff --git a/libcds/src/static_sequence/static_sequence_wvtree_noptrs.cpp b/libcds/src/static_sequence/static_sequence_wvtree_noptrs.cpp index c1c114b..daa5433 100644 --- a/libcds/src/static_sequence/static_sequence_wvtree_noptrs.cpp +++ b/libcds/src/static_sequence/static_sequence_wvtree_noptrs.cpp @@ -21,7 +21,7 @@ #include -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(); @@ -39,6 +39,13 @@ static_sequence_wvtree_noptrs::static_sequence_wvtree_noptrs(uint * symbols, uin uint * new_symb = new uint[n+to_add]; for(uint i=0;iunmap(symbols[i]); - delete [] new_symb; - delete [] oc; + + if (!deleteSymbols) + for(uint i=0;iunmap(symbols[i]); + +// delete [] new_symb; // already deleted in build_level()! + delete [] oc; } static_sequence_wvtree_noptrs::static_sequence_wvtree_noptrs() { @@ -398,10 +408,16 @@ void static_sequence_wvtree_noptrs::build_level(uint **bm, uint *symbols, uint l 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) { diff --git a/libcds/src/static_sequence/static_sequence_wvtree_noptrs.h b/libcds/src/static_sequence/static_sequence_wvtree_noptrs.h index a293965..3f7a977 100644 --- a/libcds/src/static_sequence/static_sequence_wvtree_noptrs.h +++ b/libcds/src/static_sequence/static_sequence_wvtree_noptrs.h @@ -38,7 +38,7 @@ 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); /** Destroys the Wavelet Tree */ virtual ~static_sequence_wvtree_noptrs();