/*************************************************************************************************************************************/
/* */
/* O P E R A T I O N S A R I T H M E T I Q U E S S U R D E S F I C H I E R S */
/* A V E C A L L O C A T I O N D Y N A M I Q U E D E L A M E M O I R E : */
/* */
/* */
/* Author of '$xrv/ARITHMET.1d$I' : */
/* */
/* Jean-Francois COLONNA (LACTAMME, 20060214124411). */
/* */
/*************************************************************************************************************************************/
/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N E T R E C U P E R A T I O N D E S F I C H I E R S : */
/* */
/*************************************************************************************************************************************/
#include xrv/ARITHMET.1g.I"
#define iALLOCATION_MEMOIRE_D_UN_FICHIER(liste_des_valeurs) \
Bblock \
MdTb1(liste_des_valeurs,nombre_maximal_d_elements_dans_le_fichier,Float,ADRESSE_NON_ENCORE_DEFINIE); \
Eblock \
/* Allocation memoire d'un fichier (introduit le 20060218102935). */
#define iGENERATION_D_UN_FICHIER(liste_des_valeurs,valeur_initiale) \
Bblock \
Test(IFEQ(liste_des_valeurs,ADRESSE_NON_ENCORE_DEFINIE)) \
Bblock \
iALLOCATION_MEMOIRE_D_UN_FICHIER(liste_des_valeurs); \
/* Allocation dynamique de 'liste_des_valeurs' lorsque 'lTRANSFORMAT_01(...)' n'a pas eu */ \
/* lieu sur ce fichier... */ \
\
gINITIALISATION_LISTE(liste_des_valeurs \
,valeur_initiale \
,PREMIER_ELEMENT_D_UN_FICHIER \
,nombre_maximal_d_elements_dans_le_fichier \
); \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
Eblock \
/* Initialisation d'un fichier... */
#define lGENERATION_D_UN_FICHIER(liste_des_valeurs,valeur_initiale) \
Bblock \
FdTb1(liste_des_valeurs,nombre_maximal_d_elements_dans_le_fichier,Float,ADRESSE_NON_ENCORE_DEFINIE); \
/* Liberation de la memoire 'liste_des_valeurs'... */ \
Eblock \
/* Liberation d'un fichier (introduit le 20080226150500 car, en effet, manquait a cette */ \
/* date...). */
#define lTRANSFORMAT_0d(fichier_des_valeurs,liste_des_valeurs,valeur_par_defaut) \
/* Le 20060215110928 le nom 'lTRANSFORMAT_01(...)' est devenu 'lTRANSFORMAT_0d(...)'... */ \
Bblock \
glTRANSFORMAT_01(fichier_des_valeurs \
,liste_des_valeurs \
,valeur_par_defaut \
,BLOC( \
Bblock \
EGAL(nombre_maximal_d_elements_dans_le_fichier \
,MAX2(liste_des_valeurs`____nombre_d_elements \
,nombre_d_elements \
) \
); \
/* Le 20240930163259, l'initialisation : */ \
/* */ \
/* EGAL(nombre_maximal_d_elements_dans_le_fichier,nombre_d_elements); */ \
/* */ \
/* a ete remplace par quelque chose specifique a chaque fichier... */ \
iALLOCATION_MEMOIRE_D_UN_FICHIER(liste_des_valeurs); \
/* Allocation dynamique de la memoire du fichier 'liste_des_valeurs'... */ \
Eblock \
) \
); \
Eblock \
/* Recuperation d'un fichier contenant une liste. ATTENTION, le 19980317091800, le */ \
/* parametre : */ \
/* */ \
/* LE_NOM_DU_FICHIER_N_EST_PAS_CONVERTISSABLE_EN_UNE_VALEUR_NUMERIQUE */ \
/* */ \
/* est devenu : */ \
/* */ \
/* LE_NOM_DU_FICHIER_EST_CONVERTISSABLE_EN_UNE_VALEUR_NUMERIQUE */ \
/* */ \
/* car cela permet, par exemple, d'incrementer tous les elements d'un fichier d'une valeur */ \
/* constante... */ \
/* */ \
/* Je rappelle le 20170111102500 que si le nom du fichier est une "bonne" valeur numerique, */ \
/* c'est elle qui l'emporte, meme si il existe un fichier portant ce nom. Cela ne peut */ \
/* evidemment se produire que si ce dernier fichier est designe de facon relative (et donc */ \
/* dans '$CWD'). Pour forcer l'acces a ce fichier (et donc ne pas utiliser la valeur */ \
/* numerique correspondant a son nom), il suffit d'absolutiser ce nom, qui alors ne */ \
/* ressemblera plus a une "bonne" valeur numerique... */