From: nvalimak Date: Tue, 19 May 2009 12:26:53 +0000 (+0000) Subject: New WVTree constructor X-Git-Url: http://git.nguyen.vg/gitweb/?p=SXSI%2FXMLTree.git;a=commitdiff_plain;h=5489b44ed5656cad39498675305ea9f2bd49dd07 New WVTree constructor git-svn-id: svn+ssh://idea.nguyen.vg/svn/sxsi/trunk/XMLTree@400 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 a457afd..9a4d64c 100644 --- a/libcds/src/static_sequence/static_sequence_wvtree_noptrs.cpp +++ b/libcds/src/static_sequence/static_sequence_wvtree_noptrs.cpp @@ -87,6 +87,73 @@ static_sequence_wvtree_noptrs::static_sequence_wvtree_noptrs(uint * symbols, uin delete [] oc; } +// symbols is an array of elements of "width" bits +static_sequence_wvtree_noptrs::static_sequence_wvtree_noptrs(uint * symbols, uint n, unsigned width, static_bitsequence_builder * bmb, alphabet_mapper * am, bool deleteSymbols) { + this->n=n; + this->am=am; + am->use(); + for(uint i=0;imap(get_field(symbols, width, i))); + max_v=max_value(symbols, width, n); + height=bits(max_v); + uint *occurrences=new uint[max_v+1]; + for(uint i=0;i<=max_v;i++) occurrences[i]=0; + for(uint i=0;ibuild(oc,new_n+1); + delete [] occurrences; + this->n = new_n; + uint ** _bm=new uint*[height]; + for(uint i=0;ibuild(_bm[i],new_n); + delete [] _bm[i]; + } + delete [] _bm; + + if (!deleteSymbols) + for(uint i=0;iunmap(get_field(symbols, width, i))); + +// delete [] new_symb; // already deleted in build_level()! + delete [] oc; +} + static_sequence_wvtree_noptrs::static_sequence_wvtree_noptrs() { } @@ -424,6 +491,42 @@ void static_sequence_wvtree_noptrs::build_level(uint **bm, uint *symbols, uint l //delete [] right; } +// symbols is an array of elements of "width" bits. +void static_sequence_wvtree_noptrs::build_level(uint **bm, uint *symbols, unsigned width, uint level, uint length, uint offset) { + if(level==height) + { + delete [] symbols; + return; + } + uint cleft=0; + for(uint i=0;i