/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C O M P R E S S I O N   D ' U N E   C H A I N E  :                                                                         */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xtc/Compression.11$vv$I' :                                                                                     */
/*                                                                                                                                   */
/*                    Jean-Francois Colonna (LACTAMME, 20151224094722).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   G E N E R A L E S  :                                                                                 */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
int       Compression_EditerCompressionBits=VRAI;
                                        /* Indicateurs de controle des editions...                                                   */

#include  "BurrowsWheeler.11.vv.I"

#define   CodageDeHuffman_FIN_DE_CHAINE                                                                                                 \
                    0                                                                                                                   \
                                        /* Afin de ne pas prevoir de caractere de fin de chaine...                                   */
#include  "RunLengthEncoding.11.vv.I"

#include  "HuffmanCoding.01.vv.I"

#define   Compression_INDEXN                                                                                                            \
                    NombreVersIndex(Compression_LongueurDeToutesLesChaines)
int       Compression_LongueurDeToutesLesChaines;

CHAR      *Compression_ChaineACompresser;
CHAR      *Compression_ChaineDEcompressee;

/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I N I T I A L I S A T I O N   D E   L A   C H A I N E   A   T R A I T E R  :                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   Compression_InitialisationChaineATraiter(ChaineR,ChaineA,LongueurChaineA)                                                     \
                    {                                                                                                                   \
                    int       IndexCaractere;                                                                                           \
                                                                                                                                        \
                    Compression_LongueurDeToutesLesChaines = LongueurChaineA;                                                           \
                                        /* ATTENTION : en toute generalite dans 'ChaineA' les 256 codes possibles peuvent            */ \
                                        /* etre presents et donc 'strlen(...)' ne peut pas fonctionner systematiquement. C'est       */ \
                                        /* pourquoi un pramatre de longueur 'LongueurChaineA' doit apparaitre explicitement...       */ \
                                                                                                                                        \
                    ChaineR = malloc(Compression_LongueurDeToutesLesChaines);                                                           \
                                                                                                                                        \
                    for       (IndexCaractere=INDEX0 ; IndexCaractere <= Compression_INDEXN ; IndexCaractere++)                         \
                              {                                                                                                         \
                              ACCES_CHAINE(ChaineR,IndexCaractere) = ChaineA[IndexCaractere];                                           \
                              }                                                                                                         \
                    }

#define   Compression_DesinitialisationChaineATraiter(ChaineA)                                                                          \
                    {                                                                                                                   \
                    free(ChaineA);                                                                                                      \
                    }

/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        V E R I F I C A T I O N   D U   P R O C E S S U S   C O M P L E T  :                                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
void      Compression_Verifications(CHAR *ChaineA1,CHAR *ChaineA2)
          {
          int       IndexCaractere;

          for       (IndexCaractere=INDEX0 ; IndexCaractere <= Compression_INDEXN ; IndexCaractere++)
                    {
                    if        (ACCES_CHAINE(ChaineA1,IndexCaractere) != ACCES_CHAINE(ChaineA2,IndexCaractere))
                              {
                              fprintf(stderr
                                     ,"ERREUR(Compression) : chaine retablie ('0x%02x') # chaine a traiter ('0x%02x').\n"
                                     ,ACCES_CHAINE(ChaineA1,IndexCaractere)
                                     ,ACCES_CHAINE(ChaineA2,IndexCaractere)
                                      );
                              }
                    else
                              {
                              }
                    }
          }



Copyright © Jean-François Colonna, 2021-2023.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / École polytechnique, Institut Polytechnique de Paris, 2021-2023.