//print all possible trees void output_all_possible_trees(int* seq, int n, int num1, int num0, vector<codeWords>& store, bool firstCode) { if((num1 + num0) == 2*n) { seq[2*n] = 0; Node *root = rebuild_tree(seq, 2*n+1); //displayTree(root, 0); //show(seq, n); codeWords temp = codeWordsFromTree(root, n, firstCode); //store.push_back(temp); addCodeWords(store, temp); return; } if(num1 >= num0 && num1 < n) { seq[num1+num0] = 1; output_all_possible_trees(seq, n, num1+1, num0, store, firstCode); } if(num0 < num1 && num1 <=n) { seq[num1+num0] = 0; output_all_possible_trees(seq, n, num1, num0+1, store, firstCode); } }
Filter* Archive::Algorithm::createFilter(Stream* stream, Analyzer* analyzer) { switch (filter_) { case kFilterTypeDict: if (analyzer) { auto& builder = analyzer->getDictBuilder(); Dict::CodeWordGeneratorFast generator; Dict::CodeWordSet code_words; generator.generateCodeWords(builder, &code_words); auto dict_filter = new Dict::Filter(stream, 0x3, 0x4, 0x6); dict_filter->addCodeWords(code_words.getCodeWords(), code_words.num1_, code_words.num2_, code_words.num3_); return dict_filter; } else { return new Dict::Filter(stream); } case kFilterTypeX86: return new X86AdvancedFilter(stream); } return nullptr; }