/*************************************************************************************************************************************/ /* */ /* T R A N S F O R M A T I O N D E B U R R O W S - W H E E L E R : */ /* */ /* */ /* Author of '$xtc/BurrowsWheeler.11$vv$c' : */ /* */ /* Jean-Francois COLONNA (LACTAMME, 20151220094427). */ /* */ /*************************************************************************************************************************************/ /*************************************************************************************************************************************/ /* */ /* D E F I N I T I O N G E N E R A L E S : */ /* */ /*************************************************************************************************************************************/ #include "INCLUDES.01.I" #include "BurrowsWheeler.11.vv.I" #define NUMERO_DU_TEST \ 62 \ /* Selecteur des chaines de test {12,22,32,...}. */ /*************************************************************************************************************************************/ /* */ /* C H O I X D E L A C H A I N E D E T E S T : */ /* */ /*************************************************************************************************************************************/ #define CONCATENE_1(argument1,argument2) \ argument1 ## _ ## argument2 #define CONCATENE_2(argument1,argument2) \ CONCATENE_1(argument1,argument2) /* On notera que l'on ne peut ecritre directement : */ /* */ /* CONCATENE_2(argument1,argument2) \ */ /* argument1 ## _ ## argument2 */ /* */ /* car cela n'assure pas la substitution de 'NUMERO_DU_TEST' par sa valeur, mais au lieu */ /* de cela, concatene la chaine "NUMERO_DU_TEST" et produit donc des symboles aberrants */ /* tels 'ChaineA_NUMERO_DU_TEST' au lieu, par exemple, de 'ChaineA_02'... */ #define CHAINE_A \ CONCATENE_2(ChaineA,NUMERO_DU_TEST) #define LONGUEUR_CHAINE_A \ strlen(CONCATENE_2(ChaineA,NUMERO_DU_TEST)) /*************************************************************************************************************************************/ /* */ /* P R O G R A M M E P R I N C I P A L : */ /* */ /*************************************************************************************************************************************/ main() { CHAR ChaineA_12[]="ABCDEFGHIJBCDEFGHIJCDEFGHIJDEFGHIJEFGHIJFGHIJGHIJHIJIJJ"; CHAR ChaineA_22[]="CDEFGHIJCDEFGABCDEFGHIJBHIJDEFGHGHIJHIJEFGHIJFGHIJIJIJJ"; /* Chaines contenant 1 "A", 2 "B", 3 "C",..., 10 "J". */ CHAR ChaineA_32[]="IX.MIXED.PIXIES.SIFT.SIXTY.PIXIE.DUST.BOXES"; CHAR ChaineA_42[]="BANANA"; CHAR ChaineA_52[]="ABRACADABRA"; CHAR ChaineA_62[]="TEXTUEL"; CHAR ChaineA_72[]="MPXGZAC"; /* Quelques autres chaines... */ TransformationDeBurrowsWheeler_InitialisationChaineATraiter(TransformationDeBurrowsWheeler_ChaineAPermuter ,CHAINE_A ,LONGUEUR_CHAINE_A ); TransformationDeBurrowsWheeler_InitialisationTransformationDirecte(TransformationDeBurrowsWheeler_ChainePermutee); TransformationDeBurrowsWheeler_TransformationDirecte(TransformationDeBurrowsWheeler_ChainePermutee ,TransformationDeBurrowsWheeler_ChaineAPermuter ); TransformationDeBurrowsWheeler_DesinitialisationsTransformationDirecte(); TransformationDeBurrowsWheeler_InitialisationTransformationInverse_02(TransformationDeBurrowsWheeler_ChaineRetablie); TransformationDeBurrowsWheeler_TransformationInverse_02(TransformationDeBurrowsWheeler_ChaineRetablie ,TransformationDeBurrowsWheeler_ChainePermutee ); TransformationDeBurrowsWheeler_Verifications(TransformationDeBurrowsWheeler_ChaineRetablie ,TransformationDeBurrowsWheeler_ChaineAPermuter ); TransformationDeBurrowsWheeler_DesinitialisationsTransformationInverse_02(TransformationDeBurrowsWheeler_ChaineRetablie ,TransformationDeBurrowsWheeler_ChainePermutee ); TransformationDeBurrowsWheeler_DesinitialisationChaineATraiter(TransformationDeBurrowsWheeler_ChaineAPermuter); }