Ejemplo n.º 1
0
//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);
    }
}
Ejemplo n.º 2
0
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;
}