Example #1
0
void compress(InputBuffer& input, OutputStream& output) {

	header h;

	h.fileSize = input.getSize();
	uint8* pInputBuffer = input.getBuffer();
	uint8* pOutputBuffer = new uint8[h.fileSize];

	RLE(pInputBuffer, pOutputBuffer, h.fileSize, &h.tempSize);
	BWT(pOutputBuffer, pInputBuffer, h.tempSize, &h.first);
	MTF(pInputBuffer, h.tempSize);

	optimizeIncrements(pInputBuffer, h.tempSize, h.increments);

#if 0
	float model_stats[8];
	getModelStatistics(pInputBuffer, h.tempSize, h.increments,  model_stats);

	float sum = 0;
	for (uint32 i = 0; i < 8; i++) {
		printf("model #%d: %12.2f bits (increment: %3d)\n", i, model_stats[i], h.increments[i]);
		sum += model_stats[i];
	}
	printf("%f bpb\n", sum / h.fileSize);
#endif

	writeHeader(output, h);
	ArithmeticEncoder	encoder(output);
	StructuredModel		model(h.increments);
	model.encode(encoder, pInputBuffer, h.tempSize);

	delete[] pInputBuffer;
	delete[] pOutputBuffer;
}
Example #2
0
int main(int argc, char **argv)
{
	
	char* modeDEmploie = "\nNAME : Compression\n\nSYNOPSIS : \n	./compresser [OPTIONS] nomFichier nom \n\nDESCRIPTION : 	\n	-p\n		compression package merge sans prétraitement\n\n	-r,-m,-rm\n		compression avec prétraitement rle(r) ou mtf(m) ou rle et mtf (mr)\n\nExemple : ./compresser -p nomFichier, ./compresser -r nomFichier, ./compresser -p -m nomFichier\n\n";
	if(argc < 3)
	{
		printf("%s", modeDEmploie);
	}
	else if (argc == 3)
	{
		printf("Compression sans pretraitement avec huffman\n");
		lancementSimple(argv[1], argv[2]);
		
	}
	else if (argc < 6)
	{
		if(argc==4)
		{
			char* chemin = argv[2];
			if(strcmp("-p",argv[1])==0)
			{
				printf("Lancement  avec package merge\n");	
				lancementPackageMarge(argv[2], argv[3]);				
			}
			else if (strcmp("-m",argv[1])==0)
			{
				printf("Lancement avec prétraitement mtf \n");
				FILE* src=ouvertureFichierLecture(chemin);
				FILE* resultat=ouvertureFichierEcriture("../bin/temp.txt");
				MTF(src,resultat);
				fermetureFichier(src);
				fermetureFichier(resultat);
				lancementSimple("../bin/temp.txt", argv[3]);
			}
			else if (strcmp("-r",argv[1])==0)
			{
				printf("Lancement  avec prétraitement rle\n");
				FILE* src=ouvertureFichierLecture(chemin);
				FILE* resultat=ouvertureFichierEcriture("../bin/temp.txt");
				RLE(src,resultat);
				fermetureFichier(src);
				fermetureFichier(resultat);
				lancementSimple("../bin/temp.txt", argv[3]);
			}
			else if (strcmp("-rm",argv[1])==0)
			{
				printf("Lancement  prétraitement avec rle et mtf \n");
				FILE* src=ouvertureFichierLecture(chemin);
				FILE* resultat=ouvertureFichierEcriture("../bin/temp.txt");
				comp_RLE_MTF(src,resultat);
				fermetureFichier(src);
				fermetureFichier(resultat);
				lancementSimple("../bin/temp.txt", argv[3]);
			}
			else if (strcmp("-mr",argv[1])==0)
			{
				printf("Lancement  prétraitement avec mtf et rel \n");
				FILE* src=ouvertureFichierLecture(chemin);
				FILE* resultat=ouvertureFichierEcriture("../bin/temp.txt");
				comp_MTF_RLE(src,resultat);
				fermetureFichier(src);
				fermetureFichier(resultat);
				lancementSimple("../bin/temp.txt", argv[3]);
			}
			else{printf("%s",modeDEmploie);}
		}
		else
		{
			char* chemin = argv[3];
			if (strcmp("-p",argv[1])==0)
			{
				if (strcmp("-m",argv[2])==0)
				{
					printf("Lancement avec prétraitement mtf \n");
					FILE* src=ouvertureFichierLecture(chemin);
					FILE* resultat=ouvertureFichierEcriture("../bin/temp.txt");
					MTF(src,resultat);
					fermetureFichier(src);
					fermetureFichier(resultat);
					lancementPackageMarge("../bin/temp.txt", argv[4]);
				}
				else if (strcmp("-r",argv[2])==0)
				{
					printf("Lancement  avec prétraitement rle\n");
					FILE* src=ouvertureFichierLecture(chemin);
					FILE* resultat=ouvertureFichierEcriture("../bin/temp.txt");
					RLE(src,resultat);
					fermetureFichier(src);
					fermetureFichier(resultat);
					lancementPackageMarge("../bin/temp.txt", argv[4]);
				}
				else if (strcmp("-mr",argv[2])==0)
				{
					printf("Lancement  prétraitement avec rle et mtf \n");
					FILE* src=ouvertureFichierLecture(chemin);
					FILE* resultat=ouvertureFichierEcriture("../bin/temp.txt");
					comp_RLE_MTF(src,resultat);
					fermetureFichier(src);
					fermetureFichier(resultat);
					lancementPackageMarge("../bin/temp.txt", argv[4]);
				}
				else if (strcmp("-rm",argv[2])==0)
				{
					printf("Lancement  prétraitement avec mtf et rel \n");
					FILE* src=ouvertureFichierLecture(chemin);
					FILE* resultat=ouvertureFichierEcriture("../bin/temp.txt");
					comp_MTF_RLE(src,resultat);
					fermetureFichier(src);
					fermetureFichier(resultat);
					lancementPackageMarge("../bin/temp.txt", argv[4]);
				}
				else{printf("%s",modeDEmploie);}
			}
			else{printf("%s",modeDEmploie);}
		}
	}
	else
	{
		printf("%s",modeDEmploie);
	}
	
	return 0;
}