// Huffman.cpp : Defines the entry point for the console application. // #include #include #include #include #include #include #include #include "DataSet.h" #include "HElement.h" #include "DataCharString.h" HElement * huffman_f(std::vector in){ std::vector::iterator it; HElement* t; DataSet * first; DataSet * second ; int i; if (in.size() == 1) return new HElement ((in[0])); if (in.size() == 0) return NULL; for ( i = in.size() - 1 ; i>0 ; --i){ std::sort(in.begin(), in.begin() + i + 1 ,DataSet::order_dec); second = &(in[i]); first = &(in[i - 1]); t = new HElement (false, * first, * second ); in.erase(in.begin() + i - 1); in.insert(in.begin() + i - 1 ,DataSet (0,t->getleft_p()->getcore().getfrequency() + t->getright_p()->getcore().getfrequency(),t)); } return (*(in.begin())).gett_list(); } void huffman_p (HElement * list, std::vector * vect , std::string in_s){ if (list != NULL){ if (list->isconcrete()){ DataCharString * t; t = new DataCharString (list->getcore().getcharacter(),in_s ); (*vect).push_back(*t); free(t); }else{ huffman_p (list->getleft_p(),vect, in_s + "0"); huffman_p (list->getright_p(),vect,in_s + "1"); } } } std::vector & read_data (char* file){ try { std::fstream f (file ,std::ios_base::in ); if (f.good()){ std::vector *ridden_data = new std::vector (); DataSet * t; std::vector::iterator it; for (char input = f.get(); f.good() ; input = f.get() ){ it = std::find((*ridden_data).begin(),(*ridden_data).end(), input ); if ((*ridden_data).size() == 0 || it==(*ridden_data).end()){ t = new DataSet (input,1); (*ridden_data).push_back (*t); free(t); }else{ (*it).increment_frequency(); } } return *ridden_data; }else{ std::cout << "Error reading file" << std::endl; exit(-1); } } catch ( std::ios_base::failure & e){ std::cout << "Error reading file" << std::endl; exit(-1); } }