23int Memoire::step=4096;
25static int max_sz_mem=0;
26static int min_sz_mem=0;
34 if (_instance == 0) _instance =
new Memoire;
45 for(
int i=prems; i<size; i++)
56 assert(_instance != 0);
61 assert(data[num].libre());
78 Cerr <<
"Not enough memory " << finl;
82 for(i=0; i<old_size; i++)
87 newdata[old_size]=newptr;
88 for(i=old_size; i<size; i++)
108 assert(!data[num].libre());
109 data[num].next=prems;
113#ifndef _COMPILE_AVEC_PGCC
114 if((size>4*compteur)&&(size>step))
169 for(
int i=0; i<size; i++)
171 if( !( x->
libre() ) )
172 if ( ((x->
obj()).que_suis_je()==type) &&
173 ((x->
obj()).le_nom()==nom) )
189 for(
int i=0; i<size; i++)
190 if( !( x->
libre() ) )
192 if (((x->
obj()).le_nom())==nom)
210 assert(!data[num].libre());
211 Objet_U& objet = data[num].obj();
212 const int num_obj = objet.
numero();
215 Cerr <<
"Error in Objet_U & Memoire::objet_u(int num) " << finl;
216 Cerr <<
" num = " << num << finl;
217 std::cerr <<
" data[num].o_ptr = " << &objet << std::endl;
218 Cerr <<
" data[num].o_ptr->numero() = " << num_obj << finl;
236 assert(!data[num].libre());
237 Objet_U& objet = data[num].obj();
238 const int num_obj = objet.
numero();
241 Cerr <<
"Error in const Objet_U & Memoire::objet_u(int num) " << finl;
242 Cerr <<
" num = " << num << finl;
243 std::cerr <<
" data[num].o_ptr = " << &objet << std::endl;
244 Cerr <<
" data[num].o_ptr->numero() = " << num_obj << finl;
262 assert(!data[num].libre());
263 Objet_U& objet = data[num].obj();
264 const int num_obj = objet.
numero();
267 Cerr <<
"Error in Objet_U * Memoire::objet_u(int num) " << finl;
268 Cerr <<
" num = " << num << finl;
269 std::cerr <<
" data[num].o_ptr = " << &objet << std::endl;
270 Cerr <<
" data[num].o_ptr->numero() = " << num_obj << finl;
288 assert(!data[num].libre());
289 Objet_U& objet = data[num].obj();
290 const int num_obj = objet.
numero();
293 Cerr <<
"Error in const Objet_U * Memoire::objet_u(int num) " << finl;
294 Cerr <<
" num = " << num << finl;
295 std::cerr <<
" data[num].o_ptr = " << &objet << std::endl;
296 Cerr <<
" data[num].o_ptr->numero() = " << num_obj << finl;
309 int* newnum=
new int[size];
312 Cerr <<
"Not enough memory " << finl;
315 for(i=0; i<size; i++)
320 for(i=0; i<size; i++)
328 Cerr <<
"Not enough memory " << finl;
331 for(i=0; i< size; i++)
333 newdata[newnum[i]]=data[i];
338 for(i=0; i<size; i++)
349 assert(prems <=size);
351 for(i=0; i<size; i++)
352 if(! data[i].libre()) tmp++;
353 Cerr <<
"\n There are " << size <<
" memory squares";
354 Cerr <<
"\n of which " << tmp <<
" ==(const char*)" << compteur <<
" are used" << finl;
355 for(i=0; i<size; i++)
357 Cerr << i <<
" :: " << flush;
358 if(! (data[i].libre()) )
360 const Objet_U& obj=data[i].obj();
365 Cerr <<
"TYPE :" << obj.
le_type()<< flush;
369 Cerr <<
" key: " << x << flush;
372 Cerr <<
" NAME : " << obj.
le_nom() << flush;
373 Cerr <<
" address : " << (long)(&(obj))<< flush;
374 Cerr <<
" SIZE : " << (int)(obj.
taille_memoire())<<
" octets "<< flush;
390 assert(prems <=size);
391 for(
int i=0; i<size; i++)
393 if(! (data[i].libre()) )
395 if ((data[i].obj()).numero() != i)
397 Cerr <<
"ERROR at the square " << i << finl;
418 for(i=0; i<mem.size; i++)
419 if(! mem.data[i].
libre()) tmp++;
420 os <<
"\n il y a " << mem.size <<
" cases memoires";
421 os <<
"\n dont " << tmp <<
" ==(const char*)" << compteur <<
" sont occupees" << finl;
422 for(i=0; i<mem.size; i++)
423 if(! mem.data[i].
libre())
428 os <<
"TYPE :" << obj.
le_type();
429 if(sub_type(
Nom,obj)) os <<
" NOM : " << obj.
le_nom() ;
430 os <<
" adresse : " << (long)(&(obj));
432 const ArrOfInt* intA =
dynamic_cast<const ArrOfInt*
>(&obj);
433 const ArrOfDouble* intAD =
dynamic_cast<const ArrOfDouble*
>(&obj);
436 const ArrOfInt& toto = *intA;
438 os <<
" TAILLE ArrOfInt : " << tmp<<
" octets ";
440 const IntVect* intV =
dynamic_cast<const IntVect*
>(&obj);
443 const IntVect& titi = *intV;
445 os <<
" dont : " << (tmp-tmp1) <<
" octets virtuels ";
451 const ArrOfDouble& toto = *intAD;
453 os <<
" TAILLE ArrOfDouble : " << tmp<<
" octets ";
465 const ArrOfFloat* intAF =
dynamic_cast<const ArrOfFloat*
>(&obj);
468 const ArrOfFloat& toto = *intAF;
470 os <<
" TAILLE ArrOfFloat : " << tmp<<
" octets ";
481 os <<
"Taille memoire max: " << max_sz_mem << finl;
482 os <<
"Taille memoire min: " << min_sz_mem << finl;
483 os <<
"Taille memoire occupee en Mo: " << (max_sz_mem-min_sz_mem)/1024/1024 << finl;
485 return os <<
"Occupation taille memoire totale en Mo: " << total/1024/1024 << finl;
Pointeur dans la Memoire de TRUST pour un Objet_U.
void set(Objet_U *ptr)
Affecte un Objet_U a un pointeur memoire.
Objet_U & obj()
Retourne une reference sur l'Objet_U pointe par le pointeur memoire.
int libre() const
Indique si le pointeur memoire est libre, c'est-a-dire s'il pointe sur un Objet_U non nul.
int rang(const Nom &type, const Nom &nom) const
Retourne le rang dans la memoire de l'objet de type et de nom indiques.
Objet_U & objet_u(int)
Retoune une reference sur l'Objet_U de rang num dans la memoire.
int verifie() const
Verifie le contenu de toutes les cases de la memoire.
Objet_U * objet_u_ptr(int)
Retoune un pointeur sur l'Objet_U de rang num dans la memoire.
void compacte()
Compacte la memoire Ce compactage est effectue automatiquement lorsqu'il devient necessaire.
static Memoire & Instance()
Retourne un pointeur sur l'instance de la memoire Cree un nouvel objet memoire si aucune instance n'a...
int suppr(int)
Suppression de la memoire de l'Objet_U de numero num L'Objet_U n'est pas supprime,...
Memoire()
Constructeur Initialize une zone de travail pour les Objet_U, les "double" et les "int".
int imprime() const
Imprime un etat sur la memoire sur la sortie des erreurs.
int add(Objet_U *)
Ajoute un Objet_U dans la Memoire de TRUST.
class Nom Une chaine de caractere pour nommer les objets de TRUST
classe Objet_U Cette classe est la classe de base des Objets de TRUST
virtual unsigned taille_memoire() const =0
int numero() const
Renvoie l'indice de l'objet dans Memoire::data.
virtual int change_num(const int *const)
Change le numero interne de l'Objet_U.
const char * le_type() const
Donne le nom du type de l'Objet_U.
virtual const Nom & le_nom() const
Donne le nom de l'Objet_U Methode a surcharger : renvoie "neant" dans cette implementation.
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
Classe de base des flux de sortie.
_SIZE_ size_array() const