#pragma once

#include "ICompresseur.h"
#include "BitFile.h"
#include <stdio.h>

class Noeud
{
public:
	int code,lcode;
	int freq,sauve;

	int fils1,fils2;

	Noeud()
	{
		code=lcode=freq=sauve=0;
		fils1=fils2=-1;
	}
};

#define MAX 512

class Huffman : public ICompresseur
{
private:
	Noeud**stats;
	int lus,ecrits;
	int sommet;

	void compter(FILE*src);
	void afficher_stats();
	int rechercher_min();
	void genere_code(Noeud*n,int code,int lcode,int m);
	void ecrire_statistiques(FILE*dest);
	void lire_statistiques(FILE*src);
	void encoder_fichier(FILE*src,BitFile*dest);
	void decoder_fichier(BitFile*src,FILE*dest);

public:
	Huffman(void);
	~Huffman(void);
	virtual int comprimer(char*nom,FILE*source,FILE*dest)  ;
	virtual void expanser(char*nom,int taille_originale,int taille_archive,FILE*source) ;
};
