16#include <Synonyme_info.h>
37int Synonyme_info::nb_classes=0;
38int Synonyme_info::les_synonymes_memsize=0;
42static inline int strcmp_uppercase(
const char *n1,
const char *n2)
49 c1 = (
unsigned char) ::toupper(n1[i]);
50 c2 = (
unsigned char) ::toupper(n2[i]);
54 while ((delta == 0) && (c1 != 0) && (c2 != 0));
61 retirer_synonyme(
nom());
62 if ((nb_classes==0) && (les_synonymes_memsize!=0))
64 delete [] les_synonymes;
65 les_synonymes_memsize=0;
78int Synonyme_info::search_synonyme_info_name(
const char *nom,
int& index)
83 int imax = nb_classes;
87 int milieu = (imin + imax) / 2;
88 int comparaison = strcmp_uppercase(
nom, les_synonymes[milieu]->n);
118 n(un_nom),org(org_name)
120 if((un_nom == 0)||(org_name==0))
122 Cerr <<
"Synonyme_info::Synonyme_info(const char* nom,Objet_U* (*f)()...)\n";
123 Cerr <<
" Error : nom==0" << finl;
135void Synonyme_info::retirer_synonyme(
const char* nom)
139 int existe_deja = search_synonyme_info_name(
nom, index);
142 Cerr<<
"A synonym is suppressed whereas it doesn't exist !!!!!"<<finl;
148 for (
int i = index; i < nb_classes-1; i++)
149 les_synonymes[i] = les_synonymes[i+1];
162 if (les_synonymes_memsize <= nb_classes + 1)
164 static const int INCREMENT = 512;
166 les_synonymes_memsize += INCREMENT;
168 for (
int i = 0; i < nb_classes; i++)
169 nouveau[i] = les_synonymes[i];
170 delete[] les_synonymes;
171 les_synonymes = nouveau;
179 Cerr<<
" The synonym "<<synonyme_info.n<<
" exists as a class which is forbidden !!!!"<<finl;
182 existe_deja = search_synonyme_info_name(synonyme_info.n, index);
185 Cerr<<
" Synonym "<<synonyme_info.n<<
" already exists, which is forbidden!!!!"<<finl;
191 for (
int i = nb_classes; i > index; i--)
192 les_synonymes[i] = les_synonymes[i-1];
193 les_synonymes[index] = &synonyme_info;
206 os <<
"There is " << nb_classes <<
" synomyms:" << finl;
209 os << les_synonymes[i]->nom() <<
" <=> "<< les_synonymes[i]->org_name_()<<finl;
210 return os << finl<<flush;
224 return (synonyme != 0);
236 if (synonyme_name != 0)
239 if (search_synonyme_info_name(synonyme_name, index))
240 synonyme_info = les_synonymes[index];
242 return synonyme_info;
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
Classe de base des flux de sortie.
modelise une information de synonyme pour les Objet_U
static const Synonyme_info * synonyme_info_from_name(const char *synonyme_name)
Methode statique qui renvoie un pointeur vers le Synonyme_info dont le nom est "synonyme_name".
static void ajouter_synonyme(const Synonyme_info &synonyme_info)
Methode statique appelee par les constructeurs de Synonyme_info pour ajouter un nouveau synonyme a la...
static int est_un_synonyme(const char *)
Test d'existence d'une classe du synonyme indique si il existe une classe T dont le Synonyme_info a.
static Sortie & hierarchie(Sortie &)
Ecriture de toute la hierarchie du synonyme considere sur un flux de sortie.
static int est_un_type(const char *)
Test d'existence d'une classe du type indique si il existe une classe T dont le Type_info a.