/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N S   D E   C O M P I L A T I O N  :                                                                     */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xrq/particle.M1$I' :                                                                                           */
/*                                                                                                                                   */
/*                    Jean-Francois COLONNA (LACTAMME, 1994??????????).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        F I C H I E R S   D ' I N C L U D E S   G E N E R A U X  :                                                                 */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
                                        /* Nota : les fichiers d'includes generaux :                                                 */
                                        /*                                                                                           */
                                        /*                  #include  "DEFINITIONS.I"                                                */
                                        /*                  #include  INCLUDES_BASE                                                  */
                                        /*                  #include  image_image_TRI_IMAGE_EXT                                      */
                                        /*                  #include  image_image_VECTEURS_EXT                                       */
                                        /*                                                                                           */
                                        /* ne peuvent etre references ici (malheureusement) a cause du fonctionnement de la          */
                                        /* commande '$xcc/cl$Z' qui n'explore pas recursivement les fichiers d'includes...           */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        O P T I M I S E U R   D E   C O M P I L A T I O N  :                                                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   GENERE__Fonction__OPT(Fsequence,racine,sequence)                                                                              \
                                        /* Generation automatique d'une fonction et de sa sequence d'appel...                        */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION : si la ligne d'appel de 'GENERE__Fonction__OPTIMISATION(...)' est trop         */ \
                                        /* longue, la seule solution sera de l'ecrire :                                              */ \
                                        /*                                                                                           */ \
                                        /*                       GENERE__Fonction__OPTIMISATION                                      */ \
                                        /*                           (Fsequence,racine,sequence);                                    */ \
                                        /*                                                                                           */ \
                                        /* car, en effet, l'ecrire :                                                                 */ \
                                        /*                                                                                           */ \
                                        /*                       GENERE__Fonction__OPTIMISATION(Fsequence                            */ \
                                        /*                                                     ,racine                               */ \
                                        /*                                                     ,sequence                             */ \
                                        /*                                                      );                                   */ \
                                        /*                                                                                           */ \
                                        /* introduit ensuite des espaces dans la concatenation 'f$racine$Fsequence' qui suit...      */ \
                                        /* Ceci a ete note le 20170117164626 lors de la mise au point de 'v $xi/DICO_Fonction$Z'...  */ \
                                        /*                                                                                           */ \
                                        /* Le 20170124121519, pour ramener tout sur une meme ligne afin de ne pas avoir de           */ \
                                        /* problemes d'espaces "parasites" dans les arguments, il a fallu raccourcir le nom, d'ou    */ \
                                        /* le 'GENERE__Fonction__OPT(...)'.                                                          */ \
                                        /*                                                                                           */ \
                                        /* En fait, le probleme venait de 'v $xrq/particle.M1$I 20170124134356', donc le changement  */ \
                                        /* de 'GENERE__Fonction__OPTIMISATION(...)' en 'GENERE__Fonction__OPT(...)' n'etait pas      */ \
                                        /* utile...                                                                                  */ \
DEFV(Local,DEFV(FonctionI,f$racine$Fsequence()))                                                                                        \
                                        /* Ce type de fonction est introduit dans l'espoir de reduire le temps de compilation. On    */ \
                                        /* notera que le nom genere est 'f_racine_Fsequence' a cause du fait que la longueur des     */ \
                                        /* noms autorisee par le pre-processeur est tres superieure a ce qu'autorisent la majorite   */ \
                                        /* des compilateurs ; la 'racine' est donc la pour lever certaines ambiguites qui pourraient */ \
                                        /* apparaitre dans des noms possedant une longue racine commune...                           */ \
/*-----------------------------------------------------------------------------------------------------------------------------------*/ \
     Bblock                                                                                                                             \
     INIT_ERROR;                                                                                                                        \
     /*..............................................................................................................................*/ \
     BLOC(sequence);                                                                                                                    \
                                        /* Implantation de la sequence de code argument dont le nom reel est '___sequence'. On       */ \
                                        /* notera que l'on ne peut pas simplifier ce processus de la facon suivante :                */ \
                                        /*                                                                                           */ \
                                        /*                  #define   GENERE__Fonction__OPT(sequence,racine)                      \  */ \
                                        /*                       ...                                                              \  */ \
                                        /*                       BLOC($$$sequence);                                               \  */ \
                                        /*                       ...                                                              \  */ \
                                        /*                                                                                           */ \
                                        /* car en effet, cela obligerait a declarer '___sequence' de la facon suivante :             */ \
                                        /*                                                                                           */ \
                                        /*                  =define   ___sequence                                                    */ \
                                        /*                       ...                                                                 */ \
                                        /*                                                                                           */ \
                                        /* ce qui impliquerait que presque toutes les procedures soient elles aussi declarees        */ \
                                        /* ainsi, ce que je n'ose pas tenter...                                                      */ \
     RETU_ERROR;                                                                                                                        \
     Eblock                                                                                                                             \
                                                                                                                                        \
%define   Fsequence                                                                                                                   \ \
                    Bblock                                                                                                            \ \
                    CALS(f$racine$Fsequence());                                                                                       \ \
                    Eblock                                                                                                              \
                                        /* Generation d'une sequence d'appel a la fonction 'f_racine_Fsequence()' generee ci-dessus. */ \
                                        /*                                                                                           */ \
                                        /* On notera que le 20170124134356 la definition de 'Fsequence' est passe de '$PASSE_2' a    */ \
                                        /* '$PASSE_3' car, en effet, depuis quelques jours, l'appel a 'GENERE__Fonction__OPT(...)'   */ \
                                        /* est fait a l'interieur de 'DEFV(LoF,...)', or 'LoF' ('v $xil/defi_K2$vv$DEF LoF') est     */ \
                                        /* lui-aussi defini en '$PASSE_2' ('v $xil/defi_c1$vv$DEF TypedefP'). D'ou la necessite de   */ \
                                        /* decaler la definition de 'Fsequence' a la passe suivante afin que le 'define' qui le      */ \
                                        /* realise soit bien pris en compte...                                                       */



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