Tfe

Ongi etorri tfe-ren webgunera...

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;
}