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)
Exit routine for TRUST within a Kokkos region.
Base class for output streams.
Models synonym information for Objet_U objects.
static const Synonyme_info * synonyme_info_from_name(const char *synonyme_name)
Static method that returns a pointer to the Synonyme_info whose name is "synonyme_name".
static void ajouter_synonyme(const Synonyme_info &synonyme_info)
Static method called by Synonyme_info constructors to add a new synonym to the list of registered syn...
static int est_un_synonyme(const char *)
Tests whether a class synonym exists: if there is a class T whose Synonyme_info has.
static Sortie & hierarchie(Sortie &)
Writes the entire hierarchy of the considered synonym to an output stream.
static int est_un_type(const char *)
Tests whether a class of the given type exists. If a class T whose Type_info has the name nom exists,...