Old stuff/ecole_etude_fac_de_pau/nico/projet/deflater.cpp
(Deskargatu)
#include "deflater.h"
#include <string>
#include <iostream>
#include <map>
#include <vector>
Deflater::Deflater()//constructeur permettant de creer le dictionnaire grace au code ascii
{
std::string chaine;
for(int i=0;i<256;i++)
{
chaine=i;
dico[chaine]=i+1;
}
}
int Deflater::add(std::string s)//fonction pour ajouter une valeur au dictionnaire
{
dico[s] = dico.size();
return dico.size();
}
int Deflater::seek(std::string s)//fonction pour chercher si une valeur est dans le dictonnaire
{
return dico.find(s) != dico.end();
}
int Deflater::deflate()
{
std::string s;
std::string precedent;
std::vector<unsigned int> s2;
int j=0;
int longueur=1;
for(int i=0;i<memoire.length();i++) //parcourt du dictionnaire
{
longueur=0;
s=memoire[i];
precedent=s;
while(seek(s)) //si il trouve la valeur il concatene notre chaine resultat
{
precedent=s;
longueur++;
s.append(&memoire[i+longueur],1);
}
add(s);//si il ne la trouve pas il l'ajoute en fin de dictionnaire
sortie.push_back(dico[precedent]);
i=i+longueur-1;
}
for(int i=0;i<sortie.size();i++)//affichage du resultat
{
std::cout << sortie[i] << "\t";
}
std::cout << "\n";
}
void Deflater::setinput(std::string a)//permet de remplir le buffer memoire
{
memoire=a;
}