Old stuff/ecole_etude_fac_de_pau/nico/bckup/inflater.cpp
(Deskargatu)
#include "inflater.h"
#include <string>
#include <iostream>
#include <map>
#include <vector>
Inflater::Inflater()//fonction qui cree un dictionnaire de pairs (compose d'un int et d'un char)
{
std::pair<unsigned int,char> element;
element.first=0;
element.second='\0';
dico.push_back(element);
for(int i=0;i<256;i++)
{
element.second= i;
dico.push_back(element);//ajoute un mot a la fin du vecteur
}
}
int Inflater::inflate()
{
unsigned int precedent = memoire[0];
std::pair<unsigned int,char> paire;
std::string portion;
std::cout << dico[ memoire[0] ].second ;
//Parcours de tout les elements
for(int i=1;i<memoire.size();i++)
{
// Si le mot est trouve
if (dico.size() > memoire[i] )
{
paire= dico[memoire[i] ];
while(paire.first != 0)
{
paire= dico[paire.first];
}
paire.first = memoire[i-1];
dico.push_back(paire);
}
// si le mot est absent
else
{
paire= dico[memoire[i-1] ];
while(paire.first != 0)
{
paire= dico[ paire.first] ;
}
paire.first = memoire[i-1];
dico.push_back(paire);
}
portion.clear();
paire = dico[ memoire[i] ];
// Creation de la portion de mot
while(paire.first != 0)
{
portion.append(&paire.second,1);
paire = dico[ paire.first] ;
}
portion.append(&paire.second,1);
reverse(portion.begin(),portion.end());
std::cout << portion;
}
std::cout << "\n";
}
void Inflater::setinput(std::vector<unsigned int> a)
{
for(int i=0;i<a.size();i++)
{
std::cout << a[i]<< "\t";
}
std::cout << "\n";
memoire=a;
}