/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P R E M I E R E   P A R T I E   D E S   D E F I N I T I O N S   D U   L A N G A G E   ' K '                                */
/*        I N D E P E N D A N T E S   D U   L A N G A G E   S O U R C E   ( ' C ' )  :                                               */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Dans ce fichier, se trouvent toutes les                                                                        */
/*                  definitions relatives a la precision et                                                                          */
/*                  qui sont independantes du langage source                                                                         */
/*                  (le 'C').                                                                                                        */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xil/defi_K1$vv$DEF' :                                                                                          */
/*                                                                                                                                   */
/*                    Jean-Francois Colonna (LACTAMME, 19920000000000).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        O P E R A T I O N S   F O N D A M E N T A L E S   D E   S E L E C T I O N  :                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   gSE11(x1)                                                                                                                     \
                    x1
#define   SE11(x1)                                                                                                                      \
                    PARE(gSE11(x1))
                                        /* En fait operations neutres...                                                             */

                                        /* Le 20050822173929, a cause de l'usage 'v $xrs/Mobius2D.11$I NEUD', la definition          */
                                        /* anterieure de 'NEUT(...)' a ete deplacee vers '$xil/defi_c3$vv$DEF'...                    */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N S   F O N D A M E N T A L E S  :                                                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   ZERO                                                                                                                          \
                    0                                                                                                                   \
                                        /* Zero...                                                                                   */

#define   k___BIT                                                                                                                       \
                    1                                                                                                                   \
                                        /* Bit...                                                                                    */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION, on ne peut pas ecrire :                                                        */ \
                                        /*                                                                                           */ \
                                        /*                  #define   k___BIT                                                     \  */ \
                                        /*                                      PARE(0x00000001)                                     */ \
                                        /*                                                                                           */ \
                                        /* a cause des utilisations qui sont faites de 'BIT' dans des tests du pre-processeur,       */ \
                                        /* via d'autres symboles...                                                                  */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION : la constante 'BIT' est pre-generee dans '$xcp/Konstantes$K'.                  */ \
                                        /*                                                                                           */ \
                                        /* Jusqu'au 20071204085830, il y avait ici :                                                 */ \
                                        /*                                                                                           */ \
                                        /*                  #define   k___BIT                                                     \  */ \
                                        /*                                      0x00000001                                           */ \
                                        /*                                                                                           */ \
                                        /* mais d'une part cela fait une hypothese implicite (MACHINE 32 bits...) et d'autre part    */ \
                                        /* cela fait des constantes {'UN','I',...} tres incombrantes. J'y renonce donc a cette date. */

#TestADef BIT                                                                                                                           \
                    k___BIT

#define   UN                                                                                                                            \
                    BIT                                                                                                                 \
                                        /* ATTENTION : on ne peut malheureusement definir 'UN'                                       */ \
                                        /* par SUCC(ZERO), car en effet la definition de la fonction                                 */ \
                                        /* 'SUCC' fait intervenir la constante 'I' qui vaut 'UN', d'ou une                           */ \
                                        /* magnifique definition circulaire ; on le definit donc par la                              */ \
                                        /* plus petite quantite d'information...                                                     */
#define   I                                                                                                                             \
                    BIT                                                                                                                 \
                                        /* Pour incrementer d'une unite. On notera la definition via 'BIT', et non via 'UN', a       */ \
                                        /* cause des tests du pre-processeur '#if...' qui utilisent des variables definies par '+I'. */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D E   L A   ' S I M P L E - P R E C I S I O N '                                                      */
/*        E T   D E   L A   ' D O U B L E - P R E C I S I O N '  :                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   SIMPLE_PRECISION                                                                                                              \
                    (ZERO+I)                                                                                                            \
                                        /* Definition du mode de fonctionnement 'float' en simple precision (on utilise '+I' et      */ \
                                        /* non pas 'ADD2' a cause de l'utilisation qui en est faite dans des '#if'). On notera       */ \
                                        /* que cette definition est aussi utilisee lors de la definition du type 'Int'.              */
#define   DOUBLE_PRECISION                                                                                                              \
                    (SIMPLE_PRECISION+I)                                                                                                \
                                        /* Definition du mode de fonctionnement 'float' en double precision (on utilise '+I' et      */ \
                                        /* non pas 'ADD2' a cause de l'utilisation qui en est faite dans des '#if'). On notera       */ \
                                        /* que cette definition est aussi utilisee lors de la definition du type 'Int'.              */

                                        /* ATTENTION, avant le 1995032700, on definissait 'PRECISION_DU_Int' dans le fichier         */
                                        /* '$xil/defi_c1$vv$DEF'. Or malheureusement dans '$xcc/cpp$Z', lors de la '$PASSE_1' des    */
                                        /* fichiers demandant la derivation formelle d'ordre N (voir par exemple '$xtKg'), on        */
                                        /* fait :                                                                                    */
                                        /*                                                                                           */
                                        /*                  set       choix_cK="$choix_cK ""-Dinclure_DEFINIT_K_DEF"                 */
                                        /*                                                                                           */
                                        /* ce qui provoque la non prise en compte des fichiers 'inclure_DEFINIT_c_DEF'. Or de plus   */
                                        /* dans '$xil/defi_K2$vv$DEF', il y a des instructions '$PASSE_1' conditionnelles qui        */
                                        /* utilisent 'PRECISION_DU_Int'. Donc si 'PRECISION_DU_Int' est defini dans un fichier       */
                                        /* de type 'inclure_DEFINIT_c_DEF', on aura le message :                                     */
                                        /*                                                                                           */
                                        /*                  ...: undef symbol PRECISION_DU_Int in preprocessor if                    */
                                        /*                                                                                           */
                                        /* d'ou le transfert de la definition de 'PRECISION_DU_Int' dans '$xil/defi_K1$vv$DEF'...    */

#if       (         (! defined(SYSTEME_CRAY2_UNICOS))                                                                                   \
          &&        (! defined(SYSTEME_CRAYC98_UNICOS))                                                                                 \
          &&        (! defined(SYSTEME_CRAYC916_UNICOS))                                                                                \
          &&        (! defined(SYSTEME_CRAYYMP1_UNICOS))                                                                                \
          &&        (! defined(SYSTEME_CRAYYMP2_UNICOS))                                                                                \
          &&        (! defined(SYSTEME_CRAYYMP4_UNICOS))                                                                                \
           )

#         if        (SYSTEME_32_64_BITS==SYSTEME_32_BITS)
#                   define    PRECISION_DU_Int                                                                                          \
                                        SIMPLE_PRECISION                                                                                \
                                        /* Definition du type entier sur les machines normales...                                    */ \
                                        /*                                                                                           */ \
                                        /* On notera que jusqu'au 1995072400, date de la reinstallation du systeme sur '$LACT28',    */ \
                                        /* 'SYSTEME_SGIND?08_IRIX_CC', 'SYSTEME_SGIND?24_IRIX_CC' et 'SYSTEME_SGIND?GA_IRIX_CC'      */ \
                                        /* etaient definis ici en 'DOUBLE_PRECISION' en ce qui concerne 'PRECISION_DU_Int'. Ceci     */ \
                                        /* etait destine a definir automatiquement 'imageU' comme un tableau "entier non signe long" */ \
                                        /* afin d'assurer la compatbilite de 'IGdisplay(...)' avec la fonction 'lrectwrite(...)'     */ \
                                        /* dans '$xiidG/fonction$FON'. Malheureusement, cela creait des fichiers "bootstrappables"   */ \
                                        /* (tels '$xbg/fonction$c') incompatibles avec la nouvelle version de '$LACT28'. Un nouveau  */ \
                                        /* type ('LPositive') a donc ete introduit pour compenser le retour de la definition de      */ \
                                        /* 'PRECISION_DU_Int' avec 'SIMPLE_PRECISION' pour ces SYSTEMEs...                           */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION, il convient de modifier correlativement la definition de 'INTE(...)' qui est   */ \
                                        /* faite dans '$xil/defi_K2$vv$DEF'.                                                         */
#         Aif       (SYSTEME_32_64_BITS==SYSTEME_32_BITS)
#                   if        (SYSTEME_32_64_BITS==SYSTEME_64_BITS)
#                             define    PRECISION_DU_Int                                                                                \
                                                  DOUBLE_PRECISION                                                                      \
                                        /* Introduit le 20100317125446 (un peu tardivement, suite a 'v $Fmachines 20091215105448').  */ \
                                        /*                                                                                           */ \
                                        /* Cela n'a pas ete aussi simple qu'il y parait. En effet, il a fallu introduire un nouveau  */ \
                                        /* type de fonction 'FonctionIB' (soit 'vrai_Int_de_base') pour 'print_defaut(...)' et pour  */ \
                                        /* 'BCommande(...)' par exemple. Puis sur '$CMAP28' (pour laquelle est faite cette extension */ \
                                        /* afin de pouvoir faire de grosses allocations memoire (plus de 2Go pour les fractales      */ \
                                        /* utilisant la "fausse multiplication" ('v $ximcd/operator$FON 20091119084209')),           */ \
                                        /* il fallu compiler en premier tout '$xb', PUIS '$xcp/Konstantes$K' (et non pas avant       */ \
                                        /* comme c'est le cas habituellement) puisqu'en fait toutes les fonctions entieres de        */ \
                                        /* '$xbg' (par exemple 'FconversionL(...)') changeaient de type en passant de 'FonctionI'    */ \
                                        /* a 'FonctionIB'...                                                                         */ \
                                        /*                                                                                           */ \
                                        /* Une difficulte est venue du fait que la constante 'NBITMO' est pre-generee dans la        */ \
                                        /* commande 'v $xcp/Konstantes$K NBITMO' or cette commande ne pouvait etre compilee          */ \
                                        /* qu'apres que '$xb' ait ete compilee (a cause de '$xbg/fonction$K' principalement)         */ \
                                        /* d'ou un probleme avec '$xiii/conversion$FON' qui reference 'NBITMO' via la constante      */ \
                                        /* 'BLANC_int'. Alors '$xbii/conversion$K' ne pouvait etre correct qu'apres recompilation    */ \
                                        /* de '$xcp/Konstantes$K'...                                                                 */ \
                                        /*                                                                                           */ \
                                        /* Le 20100317171325, je reviens provisoirement a 'SIMPLE_PRECISION' a cause de problemes    */ \
                                        /* avec les operations sur bits (et les decalages), la generation des masques et des         */ \
                                        /* infinis.                                                                                  */ \
                                        /*                                                                                           */ \
                                        /* Le 20100318094738, je fais de nouvelles experiences avec 'DOUBLE_PRECISION' en notant     */ \
                                        /* qu'il est essentiel de detruire la variable 'v $Foptions PRE_GENERATION' ce qui permet    */ \
                                        /* a 'v $xcc/cpp$Z PRE_GENERATION' de ne pas utiliser les services de 'v $xcp/Konstantes$K'  */ \
                                        /* (cela se fait dans le fichier '$Doptimiseurs/.optimise1$Y'...) et ainsi de pouvoir        */ \
                                        /* compiler '$xbg/fonction$K' avec les definitions 64 bits. En consequence de quoi on        */ \
                                        /* fera dans l'ordre :                                                                       */ \
                                        /*                                                                                           */ \
                                        /*                  unset               PRE_GENERATION      ($Doptimiseurs/.optimise1$Y)     */ \
                                        /*                                                                                           */ \
                                        /*                  $xb/GENERE$Z        $NEXIST                                              */ \
                                        /*                                                                                           */ \
                                        /*                  xcp                                                                      */ \
                                        /*                  CL                  Konstantes                                           */ \
                                        /*                                                                                           */ \
                                        /* et ensuite, il convient de revenir a une situation normale, par exemple avec 'OPTIMISE'   */ \
                                        /* pour repositionner 'PRE_GENERATION' et faire donc :                                       */ \
                                        /*                                                                                           */ \
                                        /*                  OPTIMISE                                                                 */ \
                                        /*                                                                                           */ \
                                        /*                  $xb/GENERE$Z        $NEXIST                                              */ \
                                        /*                                                                                           */ \
                                        /* et tout devrait etre bon...                                                               */
#                   Aif       (SYSTEME_32_64_BITS==SYSTEME_64_BITS)
#                             message   "ATTENTION : la precision des entiers (32/64 bits) n'a pas ete definie."
#                   Eif       (SYSTEME_32_64_BITS==SYSTEME_64_BITS)
#         Eif       (SYSTEME_32_64_BITS==SYSTEME_32_BITS)

#Aif      (         (! defined(SYSTEME_CRAY2_UNICOS))                                                                                   \
          &&        (! defined(SYSTEME_CRAYC98_UNICOS))                                                                                 \
          &&        (! defined(SYSTEME_CRAYC916_UNICOS))                                                                                \
          &&        (! defined(SYSTEME_CRAYYMP1_UNICOS))                                                                                \
          &&        (! defined(SYSTEME_CRAYYMP2_UNICOS))                                                                                \
          &&        (! defined(SYSTEME_CRAYYMP4_UNICOS))                                                                                \
           )
#         define    PRECISION_DU_Int                                                                                                    \
                              DOUBLE_PRECISION                                                                                          \
                                        /* Version CRAY2/UNICOS,                                                                     */ \
                                        /* version CRAYC98/UNICOS,                                                                   */ \
                                        /* version CRAYC916/UNICOS,                                                                  */ \
                                        /* version CRAYYMP1/UNICOS,                                                                  */ \
                                        /* version CRAYYMP2/UNICOS,                                                                  */ \
                                        /* version CRAYYMP4/UNICOS.                                                                  */ \
                                        /*                                                                                           */ \
                                        /* On notera que jusqu'au 1995072400, date de la reinstallation du systeme sur '$LACT28',    */ \
                                        /* 'SYSTEME_SGIND?08_IRIX_CC', 'SYSTEME_SGIND?24_IRIX_CC' et 'SYSTEME_SGIND?GA_IRIX_CC'      */ \
                                        /* etaient definis ici en 'DOUBLE_PRECISION' en ce qui concerne 'PRECISION_DU_Int'. Ceci     */ \
                                        /* etait destine a definir automatiquement 'imageU' comme un tableau "entier non signe long" */ \
                                        /* afin d'assurer la compatbilite de 'IGdisplay(...)' avec la fonction 'lrectwrite(...)'     */ \
                                        /* dans '$xiidG/fonction$FON'. Malheureusement, cela creait des fichiers "bootstrappables"   */ \
                                        /* (tels '$xbg/fonction$c') incompatibles avec la nouvelle version de '$LACT28'. Un nouveau  */ \
                                        /* type ('LPositive') a donc ete introduit pour compenser le retour de la definition de      */ \
                                        /* 'PRECISION_DU_Int' avec 'SIMPLE_PRECISION' pour ces SYSTEMEs...                           */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION, il convient de modifier correlativement la definition de 'INTE(...)' qui est   */ \
                                        /* faite dans '$xil/defi_K2$vv$DEF'.                                                         */
#Eif      (         (! defined(SYSTEME_CRAY2_UNICOS))                                                                                   \
          &&        (! defined(SYSTEME_CRAYC98_UNICOS))                                                                                 \
          &&        (! defined(SYSTEME_CRAYC916_UNICOS))                                                                                \
          &&        (! defined(SYSTEME_CRAYYMP1_UNICOS))                                                                                \
          &&        (! defined(SYSTEME_CRAYYMP2_UNICOS))                                                                                \
          &&        (! defined(SYSTEME_CRAYYMP4_UNICOS))                                                                                \
           )

#if       (         (defined(SYSTEME_CRAY2_UNICOS))                                                                                     \
          ||        (defined(SYSTEME_CRAYC98_UNICOS))                                                                                   \
          ||        (defined(SYSTEME_CRAYC916_UNICOS))                                                                                  \
          ||        (defined(SYSTEME_CRAYYMP1_UNICOS))                                                                                  \
          ||        (defined(SYSTEME_CRAYYMP2_UNICOS))                                                                                  \
          ||        (defined(SYSTEME_CRAYYMP4_UNICOS))                                                                                  \
           )
#         define    PRECISION_DU_Float                                                                                                  \
                              SIMPLE_PRECISION                                                                                          \
                                        /* Version CRAY2/UNICOS,                                                                     */ \
                                        /* version CRAYC98/UNICOS,                                                                   */ \
                                        /* version CRAYC916/UNICOS,                                                                  */ \
                                        /* version CRAYYMP1/UNICOS,                                                                  */ \
                                        /* version CRAYYMP2/UNICOS,                                                                  */ \
                                        /* version CRAYYMP4/UNICOS.                                                                  */
#Aif      (         (defined(SYSTEME_CRAY2_UNICOS))                                                                                     \
          ||        (defined(SYSTEME_CRAYC98_UNICOS))                                                                                   \
          ||        (defined(SYSTEME_CRAYC916_UNICOS))                                                                                  \
          ||        (defined(SYSTEME_CRAYYMP1_UNICOS))                                                                                  \
          ||        (defined(SYSTEME_CRAYYMP2_UNICOS))                                                                                  \
          ||        (defined(SYSTEME_CRAYYMP4_UNICOS))                                                                                  \
           )
#         define    PRECISION_DU_Float                                                                                                  \
                              DOUBLE_PRECISION                                                                                          \
                                        /* Valeur par defaut...                                                                      */
#Eif      (         (defined(SYSTEME_CRAY2_UNICOS))                                                                                     \
          ||        (defined(SYSTEME_CRAYC98_UNICOS))                                                                                   \
          ||        (defined(SYSTEME_CRAYC916_UNICOS))                                                                                  \
          ||        (defined(SYSTEME_CRAYYMP1_UNICOS))                                                                                  \
          ||        (defined(SYSTEME_CRAYYMP2_UNICOS))                                                                                  \
          ||        (defined(SYSTEME_CRAYYMP4_UNICOS))                                                                                  \
           )

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        N U M E R O   D E   L A   V E R S I O N   D E   ' D E F V '   E T   D E   ' C A S T '  :                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
                                        /* ATTENTION : les 'VERSION_01' et 'VERSION_02' n'ont plus d'interet, mais les definitions   */
                                        /* qui suivent sont conservees uniquement pour des raisons de compatibilite...               */

#nodefine DEFV_CAST_VERSION_01                                                                                                          \
                                        /* ATTENTION : la 'VERSION_01' ne permet pas d'utiliser 'DEFV' et 'CAST' en tant que         */ \
                                        /* fonction avec des arguments, c'est-a-dire : DEFV et CAST...                               */
#nodefine DEFV_CAST_VERSION_02                                                                                                          \
                                        /* La 'VERSION_02' quant a elle, permet de les utiliser comme des fonctions, c'est-a-dire    */ \
                                        /* sous la forme DEFV(...) et CAST(...).                                                     */
#define   DEFV_CAST_VERSION_03                                                                                                          \
                                        /* La 'VERSION_03' quant a elle, permet de les utiliser comme des fonctions, c'est-a-dire    */ \
                                        /* sous la forme DEFV(...) et CAST(...), et plus generales que la 'VERSION_02'...            */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        " P S E U D O - C O N C A T E N A T I O N "   D E   " S O U S - T Y P E S "  :                                             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

#ifdef    DEFV_CAST_VERSION_01
#    message   "La version 'DEFV_CAST_VERSION_01' n'est plus disponible."
#Aifdef   DEFV_CAST_VERSION_01
#Eifdef   DEFV_CAST_VERSION_01

#ifdef    DEFV_CAST_VERSION_02
#    message   "La version 'DEFV_CAST_VERSION_02' n'est plus disponible."
#Aifdef   DEFV_CAST_VERSION_02
#Eifdef   DEFV_CAST_VERSION_02

#ifdef    DEFV_CAST_VERSION_03
#    define    CONC(type1,type2)                                                                                                        \
                         type1(type2                                                                                                    \
                                        /* Permet de concatener par exemple deux "sous-types" (par exemple 'int' et 'short')...      */
#Aifdef   DEFV_CAST_VERSION_03
#Eifdef   DEFV_CAST_VERSION_03

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D ' U N E   V A R I A B L E   D E   T Y P E   Q U E L C O N Q U E  :                                 */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

#ifdef    DEFV_CAST_VERSION_01
#    message   "La version 'DEFV_CAST_VERSION_01' n'est plus disponible."
#Aifdef   DEFV_CAST_VERSION_01
#Eifdef   DEFV_CAST_VERSION_01

#ifdef    DEFV_CAST_VERSION_02
#    message   "La version 'DEFV_CAST_VERSION_02' n'est plus disponible."
#Aifdef   DEFV_CAST_VERSION_02
#Eifdef   DEFV_CAST_VERSION_02

#ifdef    DEFV_CAST_VERSION_03
#    define    DEFV(type,variable)                                                                                                      \
                         type(variable)                                                                                                 \
                                        /* Permet de definir une variable, avec son initialisation (par 'INIT') si celle-ci          */ \
                                        /* est fournie en argument...                                                                */
#Aifdef   DEFV_CAST_VERSION_03
#Eifdef   DEFV_CAST_VERSION_03

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D U   M O D E   D E   G E S T I O N   D E S   F O R M A T S   D ' I M A G E S  :                     */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        ATTENTION :                                                                                                                */
/*                                                                                                                                   */
/*                    Lors du passage de la 'VERSION_01' a                                                                           */
/*                  a la 'VERSION_02' on fera tres attention                                                                         */
/*                  au programme '$xcp/Konstantes$K' d'optimisation                                                                  */
/*                  des constantes "complexes" : en effet, il faut                                                                   */
/*                  avant toute autre compilation, le recompiler                                                                     */
/*                  lui-meme sous 'VERSION_02' afin qu'il ne definisse                                                               */
/*                  pas ces memes constantes (telle 'dimX',...).                                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        "debut_pour_cpp_z"            (debut du choix par '$xcc/cpp$Z' de 'GESTION_DU_FORMAT_DES_IMAGES_VERSION_0X')               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#nodefine GESTION_DU_FORMAT_DES_IMAGES_VERSION_01                                                                                       \
                                        /* Cette facon de gerer le format des images est statique : les dimensions 'dimX', 'dimY'    */ \
                                        /* et 'dimZ' sont fixees a la compilation...                                                 */

#if       (         (defined(LACT28))                                                                                                   \
           )
                                        /* ATTENTION, le 19970227180746, '$LACT29' a ete supprimee de cette liste ; en effet, la     */
                                        /* gestion 'GESTION_DU_FORMAT_DES_IMAGES_VERSION_03' demande beaucoup plus de memoire et     */
                                        /* limite la taille maximale des images. Or les gains en temps qu'elle apporte sont faibles  */
                                        /* ('v $xt/$Fnota'), d'ou son retour en 'GESTION_DU_FORMAT_DES_IMAGES_VERSION_02'...         */
                                        /*                                                                                           */
                                        /* On notera  que '$LACT28' reste en mode 'GESTION_DU_FORMAT_DES_IMAGES_VERSION_03' afin     */
                                        /* de pouvoir tester ce mode...                                                              */
#    nodefine  GESTION_DU_FORMAT_DES_IMAGES_VERSION_02                                                                                  \
                                        /* Cette facon de gerer le format des images est dynamique : les dimensions 'dimX', 'dimY'   */ \
                                        /* et 'dimZ' peuvent etre modifiees a l'execution, l'allocation memoire etant dynamique.     */
#    define    GESTION_DU_FORMAT_DES_IMAGES_VERSION_03                                                                                  \
                                        /* Cette facon de gerer le format des images est dynamique : les dimensions 'dimX', 'dimY'   */ \
                                        /* et 'dimZ' peuvent etre modifiees a l'execution, l'allocation memoire etant statique.      */ \
                                        /* Cette methode a ete introduite le 19970218090000, suite a des tests effectues sur         */ \
                                        /* '$LACT29' ('v $Dbugs/SGO200A1$D/IRIX$D/CC$D/performan.02$c' ou l'on voit que l'acces a un */ \
                                        /* tableau 'T' est 10 fois plus rapide s'il est accede par :                                 */ \
                                        /*                                                                                           */ \
                                        /*                  T[index]                                                                 */ \
                                        /*                                                                                           */ \
                                        /* que par :                                                                                 */ \
                                        /*                                                                                           */ \
                                        /*                  (*T)+index                                                               */ \
                                        /*                                                                                           */
#Aif      (         (defined(LACT28))                                                                                                   \
           )
#    define    GESTION_DU_FORMAT_DES_IMAGES_VERSION_02                                                                                  \
                                        /* Cette facon de gerer le format des images est dynamique : les dimensions 'dimX', 'dimY'   */ \
                                        /* et 'dimZ' peuvent etre modifiees a l'execution, l'allocation memoire etant dynamique.     */
#    nodefine  GESTION_DU_FORMAT_DES_IMAGES_VERSION_03                                                                                  \
                                        /* Cette facon de gerer le format des images est dynamique : les dimensions 'dimX', 'dimY'   */ \
                                        /* et 'dimZ' peuvent etre modifiees a l'execution, l'allocation memoire etant statique.      */ \
                                        /* Cette methode a ete introduite le 19970218090000, suite a des tests effectues sur         */ \
                                        /* '$LACT29' ('v $Dbugs/SGO200A1$D/IRIX$D/CC$D/performan.02$c' ou l'on voit que l'acces a un */ \
                                        /* tableau 'T' est 10 fois plus rapide s'il est accede par :                                 */ \
                                        /*                                                                                           */ \
                                        /*                  T[index]                                                                 */ \
                                        /*                                                                                           */ \
                                        /* que par :                                                                                 */ \
                                        /*                                                                                           */ \
                                        /*                  (*T)+index                                                               */ \
                                        /*                                                                                           */
#Eif      (         (defined(LACT28))                                                                                                   \
           )

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        "fin_pour_cpp_z"              (fin du choix par '$xcc/cpp$Z' de 'GESTION_DU_FORMAT_DES_IMAGES_VERSION_0X')                 */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D E   L ' E X I S T E N C E   D ' I M A G E S   " S T A T I Q U E S "  :                             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

#if       (         (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_01))                                                                  \
           )
#Aif      (         (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_01))                                                                  \
           )
#Eif      (         (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_01))                                                                  \
           )

#if       (         (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_02))                                                                  \
           )
                                        /* On notera que ces definitions sont faites ici et non pas dans '$xiii/Images$DEF' a cause  */
                                        /* de '$xig/fonct$vv$DEF'...                                                                 */

#    nodefine  GESTION_DES_IMAGES_STATIQUES_VERSION_01                                                                                  \
                                        /* Cette version admet l'existence d'images statiques dont la taille est bloquee au maximum  */ \
                                        /* possible, soit 'K___dimX', 'K___dimY' et 'K___dimZ'.                                      */
#    define    GESTION_DES_IMAGES_STATIQUES_VERSION_02                                                                                  \
                                        /* Cette version n'admet plus l'existence d'images statiques ; elle les transforme en images */ \
                                        /* dynamiques apres ques les dimensions reelles aient ete definies. Cela est fait dans la    */ \
                                        /* procedure 'GET_ARGUMENTSi(...)', ce qui implique donc maintenant son emploi generalise    */ \
                                        /* dans tous les programmes calculant des images...                                          */

                                        /* On notera que ces definitions sont faites ici et non pas dans '$xiii/Images$DEF' a cause  */
                                        /* de '$xig/fonct$vv$DEF'...                                                                 */
#Aif      (         (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_02))                                                                  \
           )
#Eif      (         (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_02))                                                                  \
           )

#if       (         (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_03))                                                                  \
           )
#    define    GESTION_DES_IMAGES_STATIQUES_VERSION_01                                                                                  \
                                        /* Cette version admet l'existence d'images statiques dont la taille est bloquee au maximum  */ \
                                        /* possible, soit 'K___dimX', 'K___dimY' et 'K___dimZ'.                                      */
#Aif      (         (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_03))                                                                  \
           )
#Eif      (         (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_03))                                                                  \
           )



Copyright © Jean-François Colonna, 2019-2021.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / Ecole Polytechnique, 2019-2021.