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