ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/geometrie/src/mg_gestionnaire.cpp
Revision: 763
Committed: Wed Dec 2 19:55:53 2015 UTC (9 years, 5 months ago) by francois
File size: 21073 byte(s)
Log Message:
Le fichier MAGiC est maintenant versionné. LA version actuelle est 2.0. L'ancienne version est 1.0.
Tout est transparent pour l'utilisateur. Les vieilles versions sont lisibles mais les nouveaux enregistrements sont dans la version la plus récente.
Changement des conditions aux limites : ajout d'un parametre pour dire si la condition numerique est une valeur ou une formule ou un lien vers une autre entité magic.
Les parametres pour saisir sont maintenant -ccf -ccfi -ccff -ccft -ccfit -ccfft

File Contents

# User Rev Content
1 francois 283 //------------------------------------------------------------
2     //------------------------------------------------------------
3     // MAGiC
4     // Jean Christophe Cuilli�re et Vincent FRANCOIS
5     // D�partement de G�nie M�canique - UQTR
6     //------------------------------------------------------------
7     // Le projet MAGIC est un projet de recherche du d�partement
8     // de g�nie m�canique de l'Universit� du Qu�bec �
9     // Trois Rivi�res
10     // Les librairies ne peuvent �tre utilis�es sans l'accord
11     // des auteurs (contact : francois@uqtr.ca)
12     //------------------------------------------------------------
13     //------------------------------------------------------------
14     //
15     // mg_gestionnaire.cpp
16     //
17     //------------------------------------------------------------
18     //------------------------------------------------------------
19     // COPYRIGHT 2000
20     // Version du 02/03/2006 � 11H22
21     //------------------------------------------------------------
22     //------------------------------------------------------------
23    
24    
25     #include "gestionversion.h"
26    
27    
28     #include "mg_gestionnaire.h"
29    
30    
31    
32    
33 couturad 740
34    
35 francois 283 #include <fstream>
36     //#include "affiche.h"
37     //#include "message.h"
38    
39    
40     //using namespace std;
41    
42 francois 763 MG_GESTIONNAIRE::MG_GESTIONNAIRE():entiteidmax(0),ouvertsld(0),version_fichier(VERSIONFICHIER)
43 francois 283 {
44    
45    
46     }
47    
48     MG_GESTIONNAIRE::~MG_GESTIONNAIRE()
49     {
50 francois 674 supprimer_tout_fem_solution();
51 francois 283 supprimer_tout_mg_solution();
52     supprimer_tout_mg_maillage();
53     supprimer_tout_mg_geometrie();
54 francois 686 supprimer_tout_mg_arbre();
55 francois 283
56     }
57    
58     void MG_GESTIONNAIRE::recherche_bonid(MG_IDENTIFICATEUR &ident)
59     {
60     if (ident.get_id()==0)
61     {
62     entiteidmax++;
63     ident.change_id(entiteidmax);
64     }
65     else
66     {
67     if (ident.get_id()>entiteidmax) entiteidmax=ident.get_id();
68     }
69     }
70    
71     void MG_GESTIONNAIRE::recherche_bonidvisuel(MG_IDENTIFICATEUR &ident)
72     {
73     if (ident.get_id()==0)
74     {
75     entitevisuelidmax++;
76     ident.change_id(entitevisuelidmax);
77     }
78     else
79     {
80     if (ident.get_id()>entitevisuelidmax) entitevisuelidmax=ident.get_id();
81     }
82     }
83    
84 francois 686 // ENTITE MG_ARBRE
85     int MG_GESTIONNAIRE::ajouter_mg_arbre(MG_ARBRE *mgarbre)
86     {
87     recherche_bonid(*mgarbre);
88     MG_IDENTIFICATEUR *id=mgarbre;
89     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
90     if (!p.second) return FAIL;
91     std::pair<const unsigned long,MG_ARBRE*> tmp(mgarbre->get_id(),mgarbre);
92     lst_mg_arbre.insert(tmp);
93     mgarbre->change_gestionnaire(this);
94     return OK;
95     }
96 francois 283
97    
98 francois 686 MG_ARBRE* MG_GESTIONNAIRE::get_mg_arbreid(unsigned long num)
99     {
100     LISTE_MG_ARBRE::iterator i=lst_mg_arbre.find(num);
101     if (i==lst_mg_arbre.end())
102     {
103     // afficheur << INEXISTE << enderr;
104     return NULL;
105     }
106     return ((*i).second);
107     }
108    
109    
110    
111     MG_ARBRE* MG_GESTIONNAIRE::get_mg_arbre(unsigned int num)
112     {
113     if (!(num<lst_mg_arbre.size()))
114     {
115     // afficheur << INEXISTE << enderr;
116     return NULL;
117     }
118     LISTE_MG_ARBRE::iterator i=lst_mg_arbre.begin();
119     for (unsigned long j=0;j<num;j++) i++;
120     return ((*i).second);
121     }
122    
123     MG_ARBRE* MG_GESTIONNAIRE::get_premier_arbre(LISTE_MG_ARBRE::iterator &it)
124     {
125     it = lst_mg_arbre.begin();
126     if (it == lst_mg_arbre.end())
127     return NULL;
128     return it->second ;
129     }
130    
131     MG_ARBRE* MG_GESTIONNAIRE::get_suivant_arbre(LISTE_MG_ARBRE::iterator &it)
132     {
133     it++;
134     if (it==lst_mg_arbre.end())
135     return NULL;
136     return it->second;
137     }
138    
139     unsigned int MG_GESTIONNAIRE::get_nb_mg_arbre(void)
140     {
141     return lst_mg_arbre.size();
142     }
143    
144    
145     int MG_GESTIONNAIRE::supprimer_mg_arbreid(unsigned long num)
146     {
147     MG_ARBRE* mgarbre=get_mg_arbreid(num);
148     if (mgarbre==NULL)
149     {
150     // afficheur << INEXISTE2 << enderr;
151     return FAIL;
152     }
153     MG_IDENTIFICATEUR* id=mgarbre;
154     LISTE_ENTITE::iterator i=lst_entite.find(id);
155     lst_entite.erase(i);
156     LISTE_MG_ARBRE::iterator j=lst_mg_arbre.find(num);
157     lst_mg_arbre.erase(j);
158     delete mgarbre;
159     return OK;
160     }
161    
162    
163     int MG_GESTIONNAIRE::supprimer_mg_arbre(unsigned int num)
164     {
165     MG_ARBRE* mgarbre=get_mg_arbre(num);
166     if (mgarbre==NULL)
167     {
168     // afficheur << INEXISTE2 << enderr;
169     return FAIL;
170     }
171     MG_IDENTIFICATEUR* id=mgarbre;
172     LISTE_ENTITE::iterator i=lst_entite.find(id);
173     lst_entite.erase(i);
174     LISTE_MG_ARBRE::iterator j=lst_mg_arbre.find(id->get_id());
175     lst_mg_arbre.erase(j);
176     delete mgarbre;
177     return OK;
178     }
179    
180    
181     void MG_GESTIONNAIRE::supprimer_tout_mg_arbre(void)
182     {
183     while (get_nb_mg_arbre()!=0)
184     {
185     LISTE_MG_ARBRE::iterator j=lst_mg_arbre.begin();
186     MG_ARBRE* mgarbre=(*j).second;
187     MG_IDENTIFICATEUR* id=mgarbre;
188     LISTE_ENTITE::iterator i=lst_entite.find(id);
189     lst_entite.erase(i);
190     lst_mg_arbre.erase(j);
191     delete mgarbre;
192     }
193     }
194     // ENTITE MG_GEOMETRIE
195 francois 283 int MG_GESTIONNAIRE::ajouter_mg_geometrie(MG_GEOMETRIE *mggeo)
196     {
197     recherche_bonid(*mggeo);
198     MG_IDENTIFICATEUR *id=mggeo;
199     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
200     if (!p.second) return FAIL;
201     std::pair<const unsigned long,MG_GEOMETRIE*> tmp(mggeo->get_id(),mggeo);
202     lst_mg_geometrie.insert(tmp);
203     mggeo->change_gestionnaire(this);
204     return OK;
205     }
206    
207    
208     MG_GEOMETRIE* MG_GESTIONNAIRE::get_mg_geometrieid(unsigned long num)
209     {
210     LISTE_MG_GEOMETRIE::iterator i=lst_mg_geometrie.find(num);
211     if (i==lst_mg_geometrie.end())
212     {
213     // afficheur << INEXISTE << enderr;
214     return NULL;
215     }
216     return ((*i).second);
217     }
218    
219    
220    
221     MG_GEOMETRIE* MG_GESTIONNAIRE::get_mg_geometrie(unsigned int num)
222     {
223     if (!(num<lst_mg_geometrie.size()))
224     {
225     // afficheur << INEXISTE << enderr;
226     return NULL;
227     }
228     LISTE_MG_GEOMETRIE::iterator i=lst_mg_geometrie.begin();
229     for (unsigned long j=0;j<num;j++) i++;
230     return ((*i).second);
231     }
232    
233     MG_GEOMETRIE* MG_GESTIONNAIRE::get_premier_geometrie(LISTE_MG_GEOMETRIE::iterator &it)
234     {
235     it = lst_mg_geometrie.begin();
236     if (it == lst_mg_geometrie.end())
237     return NULL;
238     return it->second ;
239     }
240    
241     MG_GEOMETRIE* MG_GESTIONNAIRE::get_suivant_geometrie(LISTE_MG_GEOMETRIE::iterator &it)
242     {
243     it++;
244     if (it==lst_mg_geometrie.end())
245     return NULL;
246     return it->second;
247     }
248    
249     unsigned int MG_GESTIONNAIRE::get_nb_mg_geometrie(void)
250     {
251     return lst_mg_geometrie.size();
252     }
253    
254    
255     int MG_GESTIONNAIRE::supprimer_mg_geometrieid(unsigned long num)
256     {
257     MG_GEOMETRIE* mggeo=get_mg_geometrieid(num);
258     if (mggeo==NULL)
259     {
260     // afficheur << INEXISTE2 << enderr;
261     return FAIL;
262     }
263     MG_IDENTIFICATEUR* id=mggeo;
264     LISTE_ENTITE::iterator i=lst_entite.find(id);
265     lst_entite.erase(i);
266     LISTE_MG_GEOMETRIE::iterator j=lst_mg_geometrie.find(num);
267     lst_mg_geometrie.erase(j);
268     delete mggeo;
269     return OK;
270     }
271    
272    
273     int MG_GESTIONNAIRE::supprimer_mg_geometrie(unsigned int num)
274     {
275     MG_GEOMETRIE* mggeo=get_mg_geometrie(num);
276     if (mggeo==NULL)
277     {
278     // afficheur << INEXISTE2 << enderr;
279     return FAIL;
280     }
281     MG_IDENTIFICATEUR* id=mggeo;
282     LISTE_ENTITE::iterator i=lst_entite.find(id);
283     lst_entite.erase(i);
284     LISTE_MG_GEOMETRIE::iterator j=lst_mg_geometrie.find(id->get_id());
285     lst_mg_geometrie.erase(j);
286     delete mggeo;
287     return OK;
288     }
289    
290    
291     void MG_GESTIONNAIRE::supprimer_tout_mg_geometrie(void)
292     {
293     while (get_nb_mg_geometrie()!=0)
294     {
295     LISTE_MG_GEOMETRIE::iterator j=lst_mg_geometrie.begin();
296     MG_GEOMETRIE* mggeo=(*j).second;
297     MG_IDENTIFICATEUR* id=mggeo;
298     LISTE_ENTITE::iterator i=lst_entite.find(id);
299     lst_entite.erase(i);
300     lst_mg_geometrie.erase(j);
301     delete mggeo;
302     }
303     }
304    
305     // ENTITE MG_MAILLAGE
306    
307    
308     int MG_GESTIONNAIRE::ajouter_mg_maillage(MG_MAILLAGE *mgmai)
309     {
310     recherche_bonid(*mgmai);
311     MG_IDENTIFICATEUR *id=mgmai;
312     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
313     if (!p.second)
314     {
315     // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
316     return FAIL;
317     }
318    
319     std::pair<const unsigned long,MG_MAILLAGE*> tmp(mgmai->get_id(),mgmai);
320     lst_mg_maillage.insert(tmp);
321     mgmai->change_gestionnaire(this);
322     return OK;
323     }
324    
325    
326     MG_MAILLAGE* MG_GESTIONNAIRE::get_mg_maillageid(unsigned long num)
327     {
328     LISTE_MG_MAILLAGE::iterator i=lst_mg_maillage.find(num);
329     if (i==lst_mg_maillage.end())
330     {
331     // afficheur << INEXISTE << enderr;
332     return NULL;
333     }
334     return ((*i).second);
335     }
336    
337    
338    
339     MG_MAILLAGE* MG_GESTIONNAIRE::get_mg_maillage(unsigned int num)
340     {
341     if (!(num<lst_mg_maillage.size()))
342     {
343     // afficheur << INEXISTE << enderr;
344     return NULL;
345     }
346     LISTE_MG_MAILLAGE::iterator i=lst_mg_maillage.begin();
347     for (unsigned long j=0;j<num;j++) i++;
348     return ((*i).second);
349     }
350    
351    
352     MG_MAILLAGE* MG_GESTIONNAIRE::get_premier_mg_maillage(LISTE_MG_MAILLAGE::iterator &it)
353     {
354     it = lst_mg_maillage.begin();
355     if (it == lst_mg_maillage.end())
356     return NULL;
357     return it->second ;
358     }
359    
360     MG_MAILLAGE* MG_GESTIONNAIRE::get_suivant_mg_maillage(LISTE_MG_MAILLAGE::iterator &it)
361     {
362     it++;
363     if (it==lst_mg_maillage.end())
364     return NULL;
365     return it->second;
366     }
367    
368    
369     unsigned int MG_GESTIONNAIRE::get_nb_mg_maillage(void)
370     {
371     return lst_mg_maillage.size();
372     }
373    
374    
375     int MG_GESTIONNAIRE::supprimer_mg_maillageid(unsigned long num)
376     {
377     MG_MAILLAGE* mgmai=get_mg_maillageid(num);
378     if (mgmai==NULL)
379     {
380     // afficheur << INEXISTE2 << enderr;
381     return FAIL;
382     }
383     MG_IDENTIFICATEUR* id=mgmai;
384     LISTE_ENTITE::iterator i=lst_entite.find(id);
385     lst_entite.erase(i);
386     LISTE_MG_MAILLAGE::iterator j=lst_mg_maillage.find(num);
387     lst_mg_maillage.erase(j);
388     delete mgmai;
389     return OK;
390     }
391    
392    
393     int MG_GESTIONNAIRE::supprimer_mg_maillage(unsigned int num)
394     {
395     MG_MAILLAGE* mgmai=get_mg_maillage(num);
396     if (mgmai==NULL)
397     {
398     // afficheur << INEXISTE2 << enderr;
399     return FAIL;
400     }
401     MG_IDENTIFICATEUR* id=mgmai;
402     LISTE_ENTITE::iterator i=lst_entite.find(id);
403     lst_entite.erase(i);
404     LISTE_MG_MAILLAGE::iterator j=lst_mg_maillage.find(id->get_id());
405     lst_mg_maillage.erase(j);
406     delete mgmai;
407     return OK;
408     }
409    
410    
411     void MG_GESTIONNAIRE::supprimer_tout_mg_maillage(void)
412     {
413     while (get_nb_mg_maillage()!=0)
414     {
415     LISTE_MG_MAILLAGE::iterator j=lst_mg_maillage.begin();
416     MG_MAILLAGE* mgmai=(*j).second;
417     MG_IDENTIFICATEUR* id=mgmai;
418     LISTE_ENTITE::iterator i=lst_entite.find(id);
419     lst_entite.erase(i);
420     lst_mg_maillage.erase(j);
421     delete mgmai;
422     }
423    
424     }
425    
426    
427    
428    
429     // ENTITE FEM_MAILLAGE
430    
431    
432    
433    
434     int MG_GESTIONNAIRE::ajouter_fem_maillage(FEM_MAILLAGE *femmai)
435     {
436     recherche_bonid(*femmai);
437     MG_IDENTIFICATEUR *id=femmai;
438     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
439     if (!p.second)
440     {
441     // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
442     return FAIL;
443     }
444    
445     std::pair<const unsigned long,FEM_MAILLAGE*> tmp(femmai->get_id(),femmai);
446     lst_fem_maillage.insert(tmp);
447     femmai->change_gestionnaire(this);
448     return OK;
449     }
450    
451    
452     FEM_MAILLAGE* MG_GESTIONNAIRE::get_fem_maillageid(unsigned long num)
453     {
454     LISTE_FEM_MAILLAGE::iterator i=lst_fem_maillage.find(num);
455     if (i==lst_fem_maillage.end())
456     {
457     // afficheur << INEXISTE << enderr;
458     return NULL;
459     }
460     return ((*i).second);
461     }
462    
463    
464    
465     FEM_MAILLAGE* MG_GESTIONNAIRE::get_fem_maillage(unsigned int num)
466     {
467     if (!(num<lst_fem_maillage.size()))
468     {
469     // afficheur << INEXISTE << enderr;
470     return NULL;
471     }
472     LISTE_FEM_MAILLAGE::iterator i=lst_fem_maillage.begin();
473     for (unsigned long j=0;j<num;j++) i++;
474     return ((*i).second);
475     }
476    
477    
478    
479     unsigned int MG_GESTIONNAIRE::get_nb_fem_maillage(void)
480     {
481     return lst_fem_maillage.size();
482     }
483    
484    
485     int MG_GESTIONNAIRE::supprimer_fem_maillageid(unsigned long num)
486     {
487     FEM_MAILLAGE* femmai=get_fem_maillageid(num);
488     if (femmai==NULL)
489     {
490     // afficheur << INEXISTE2 << enderr;
491     return FAIL;
492     }
493     MG_IDENTIFICATEUR* id=femmai;
494     LISTE_ENTITE::iterator i=lst_entite.find(id);
495     lst_entite.erase(i);
496     LISTE_FEM_MAILLAGE::iterator j=lst_fem_maillage.find(num);
497     lst_fem_maillage.erase(j);
498     delete femmai;
499     return OK;
500     }
501    
502    
503     int MG_GESTIONNAIRE::supprimer_fem_maillage(unsigned int num)
504     {
505     FEM_MAILLAGE* femmai=get_fem_maillage(num);
506     if (femmai==NULL)
507     {
508     // afficheur << INEXISTE2 << enderr;
509     return FAIL;
510     }
511     MG_IDENTIFICATEUR* id=femmai;
512     LISTE_ENTITE::iterator i=lst_entite.find(id);
513     lst_entite.erase(i);
514     LISTE_FEM_MAILLAGE::iterator j=lst_fem_maillage.find(id->get_id());
515     lst_fem_maillage.erase(j);
516     delete femmai;
517     return OK;
518     }
519    
520    
521     void MG_GESTIONNAIRE::supprimer_tout_fem_maillage(void)
522     {
523     while (get_nb_fem_maillage()!=0)
524     {
525     LISTE_FEM_MAILLAGE::iterator j=lst_fem_maillage.begin();
526     FEM_MAILLAGE* femmai=(*j).second;
527     MG_IDENTIFICATEUR* id=femmai;
528     LISTE_ENTITE::iterator i=lst_entite.find(id);
529     lst_entite.erase(i);
530     lst_fem_maillage.erase(j);
531     delete femmai;
532     }
533    
534     }
535    
536     FEM_MAILLAGE* MG_GESTIONNAIRE::get_premier_fem_maillage(LISTE_FEM_MAILLAGE::iterator &it)
537     {
538     it = lst_fem_maillage.begin();
539     if (it == lst_fem_maillage.end())
540     return NULL;
541     return it->second ;
542     }
543    
544     FEM_MAILLAGE* MG_GESTIONNAIRE::get_suivant_fem_maillage(LISTE_FEM_MAILLAGE::iterator &it)
545     {
546     it++;
547     if (it==lst_fem_maillage.end())
548     return NULL;
549     return it->second;
550     }
551    
552    
553    
554    
555    
556     // ENTITE MG_SOLUTION
557    
558    
559    
560    
561    
562    
563     int MG_GESTIONNAIRE::ajouter_mg_solution(MG_SOLUTION *mgsol)
564     {
565     recherche_bonid(*mgsol);
566     MG_IDENTIFICATEUR *id=mgsol;
567     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
568     if (!p.second)
569     {
570     return FAIL;
571     }
572    
573     std::pair<const unsigned long,MG_SOLUTION*> tmp(mgsol->get_id(),mgsol);
574     lst_mg_solution.insert(tmp);
575     return OK;
576     }
577    
578    
579     MG_SOLUTION* MG_GESTIONNAIRE::get_mg_solutionid(unsigned long num)
580     {
581     LISTE_MG_SOLUTION::iterator i=lst_mg_solution.find(num);
582     if (i==lst_mg_solution.end())
583     {
584     return NULL;
585     }
586     return ((*i).second);
587     }
588    
589    
590    
591     MG_SOLUTION* MG_GESTIONNAIRE::get_mg_solution(unsigned int num)
592     {
593     if (!(num<lst_mg_solution.size()))
594     {
595     return NULL;
596     }
597     LISTE_MG_SOLUTION::iterator i=lst_mg_solution.begin();
598     for (unsigned long j=0;j<num;j++) i++;
599     return ((*i).second);
600     }
601    
602 francois 326 MG_SOLUTION* MG_GESTIONNAIRE::get_mg_solution(MG_MAILLAGE* mg,int nb_champs,char *nomfichier,char *nomsolution)
603     {
604     LISTE_MG_SOLUTION::iterator j=lst_mg_solution.begin();
605     while (j!=lst_mg_solution.end())
606     {
607    
608     MG_SOLUTION* mgsol=(*j).second;
609     if (mgsol->get_maillage()==mg)
610     if (mgsol->get_nb_champ()==nb_champs)
611     if (strcmp(mgsol->get_nom().c_str(),nomsolution)==0)
612     if (strcmp(mgsol->get_nom_fichier().c_str(),nomfichier)==0)
613     return mgsol;
614     j++;
615     }
616     return NULL;
617     }
618 francois 283
619     MG_SOLUTION* MG_GESTIONNAIRE::get_premier_mg_solution(LISTE_MG_SOLUTION::iterator &it)
620     {
621     it = lst_mg_solution.begin();
622     if (it == lst_mg_solution.end())
623     return NULL;
624     return it->second ;
625     }
626    
627     MG_SOLUTION* MG_GESTIONNAIRE::get_suivant_mg_solution(LISTE_MG_SOLUTION::iterator &it)
628     {
629     it++;
630     if (it==lst_mg_solution.end())
631     return NULL;
632     return it->second;
633     }
634    
635    
636     unsigned int MG_GESTIONNAIRE::get_nb_mg_solution(void)
637     {
638     return lst_mg_solution.size();
639     }
640    
641    
642     int MG_GESTIONNAIRE::supprimer_mg_solutionid(unsigned long num)
643     {
644     MG_SOLUTION* mgsol=get_mg_solutionid(num);
645     if (mgsol==NULL)
646     {
647     return FAIL;
648     }
649     MG_IDENTIFICATEUR* id=mgsol;
650     LISTE_ENTITE::iterator i=lst_entite.find(id);
651     lst_entite.erase(i);
652     LISTE_MG_SOLUTION::iterator j=lst_mg_solution.find(num);
653     lst_mg_solution.erase(j);
654     mgsol->efface();
655     delete mgsol;
656     return OK;
657     }
658    
659    
660     int MG_GESTIONNAIRE::supprimer_mg_solution(unsigned int num)
661     {
662     MG_SOLUTION* mgsol=get_mg_solution(num);
663     if (mgsol==NULL)
664     {
665     return FAIL;
666     }
667     MG_IDENTIFICATEUR* id=mgsol;
668     LISTE_ENTITE::iterator i=lst_entite.find(id);
669     lst_entite.erase(i);
670     LISTE_MG_SOLUTION::iterator j=lst_mg_solution.find(id->get_id());
671     lst_mg_solution.erase(j);
672     mgsol->efface();
673     delete mgsol;
674     return OK;
675     }
676    
677    
678     void MG_GESTIONNAIRE::supprimer_tout_mg_solution(void)
679     {
680     while (get_nb_mg_solution()!=0)
681     {
682     LISTE_MG_SOLUTION::iterator j=lst_mg_solution.begin();
683     MG_SOLUTION* mgsol=(*j).second;
684     MG_IDENTIFICATEUR* id=mgsol;
685     LISTE_ENTITE::iterator i=lst_entite.find(id);
686     lst_entite.erase(i);
687     lst_mg_solution.erase(j);
688     delete mgsol;
689     }
690    
691     }
692    
693    
694    
695    
696     // ENTITE FEM_SOLUTION
697    
698    
699    
700    
701    
702     int MG_GESTIONNAIRE::ajouter_fem_solution(FEM_SOLUTION *mgsol)
703     {
704     recherche_bonid(*mgsol);
705     MG_IDENTIFICATEUR *id=mgsol;
706     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
707     if (!p.second)
708     {
709     return FAIL;
710     }
711    
712     std::pair<const unsigned long,FEM_SOLUTION*> tmp(mgsol->get_id(),mgsol);
713     lst_fem_solution.insert(tmp);
714     return OK;
715     }
716    
717    
718     FEM_SOLUTION* MG_GESTIONNAIRE::get_fem_solutionid(unsigned long num)
719     {
720     LISTE_FEM_SOLUTION::iterator i=lst_fem_solution.find(num);
721     if (i==lst_fem_solution.end())
722     {
723     return NULL;
724     }
725     return ((*i).second);
726     }
727    
728    
729    
730     FEM_SOLUTION* MG_GESTIONNAIRE::get_fem_solution(unsigned int num)
731     {
732     if (!(num<lst_fem_solution.size()))
733     {
734     return NULL;
735     }
736     LISTE_FEM_SOLUTION::iterator i=lst_fem_solution.begin();
737     for (unsigned long j=0;j<num;j++) i++;
738     return ((*i).second);
739     }
740    
741    
742 francois 326 FEM_SOLUTION* MG_GESTIONNAIRE::get_fem_solution(FEM_MAILLAGE* fem,int nb_champs,char *nomfichier,char *nomsolution)
743     {
744     LISTE_FEM_SOLUTION::iterator j=lst_fem_solution.begin();
745     while (j!=lst_fem_solution.end())
746     {
747    
748     FEM_SOLUTION* mgsol=(*j).second;
749     if (mgsol->get_maillage()==fem)
750     if (mgsol->get_nb_champ()==nb_champs)
751     if (strcmp(mgsol->get_nom().c_str(),nomsolution)==0)
752     if (strcmp(mgsol->get_nom_fichier().c_str(),nomfichier)==0)
753     return mgsol;
754     j++;
755     }
756     return NULL;
757     }
758 francois 283
759 francois 326
760 francois 283 unsigned int MG_GESTIONNAIRE::get_nb_fem_solution(void)
761     {
762     return lst_fem_solution.size();
763     }
764    
765    
766     int MG_GESTIONNAIRE::supprimer_fem_solutionid(unsigned long num)
767     {
768     FEM_SOLUTION* mgsol=get_fem_solutionid(num);
769     if (mgsol==NULL)
770     {
771     return FAIL;
772     }
773     MG_IDENTIFICATEUR* id=mgsol;
774     LISTE_ENTITE::iterator i=lst_entite.find(id);
775     lst_entite.erase(i);
776     LISTE_FEM_SOLUTION::iterator j=lst_fem_solution.find(num);
777     lst_fem_solution.erase(j);
778     mgsol->efface();
779     delete mgsol;
780     return OK;
781     }
782    
783    
784     int MG_GESTIONNAIRE::supprimer_fem_solution(unsigned int num)
785     {
786     FEM_SOLUTION* mgsol=get_fem_solution(num);
787     if (mgsol==NULL)
788     {
789     return FAIL;
790     }
791     MG_IDENTIFICATEUR* id=mgsol;
792     LISTE_ENTITE::iterator i=lst_entite.find(id);
793     lst_entite.erase(i);
794     LISTE_FEM_SOLUTION::iterator j=lst_fem_solution.find(id->get_id());
795     lst_fem_solution.erase(j);
796     mgsol->efface();
797     delete mgsol;
798     return OK;
799     }
800    
801     int MG_GESTIONNAIRE::supprimer_fem_solution_du_gestionnaire(unsigned int num)
802     {
803     FEM_SOLUTION* mgsol=get_fem_solution(num);
804     if (mgsol==NULL)
805     {
806     return FAIL;
807     }
808     MG_IDENTIFICATEUR* id=mgsol;
809     LISTE_ENTITE::iterator i=lst_entite.find(id);
810     lst_entite.erase(i);
811     LISTE_FEM_SOLUTION::iterator j=lst_fem_solution.find(id->get_id());
812     lst_fem_solution.erase(j);
813     return OK;
814     }
815    
816    
817     void MG_GESTIONNAIRE::supprimer_tout_fem_solution(void)
818     {
819     while (get_nb_fem_solution()!=0)
820     {
821     LISTE_FEM_SOLUTION::iterator j=lst_fem_solution.begin();
822     FEM_SOLUTION* mgsol=(*j).second;
823     MG_IDENTIFICATEUR* id=mgsol;
824     LISTE_ENTITE::iterator i=lst_entite.find(id);
825     lst_entite.erase(i);
826     lst_fem_solution.erase(j);
827     delete mgsol;
828     }
829    
830     }
831    
832    
833     FEM_SOLUTION* MG_GESTIONNAIRE::get_premier_fem_solution(LISTE_FEM_SOLUTION::iterator &it)
834     {
835     it = lst_fem_solution.begin();
836     if (it == lst_fem_solution.end())
837     return NULL;
838     return it->second ;
839     }
840    
841     FEM_SOLUTION* MG_GESTIONNAIRE::get_suivant_fem_solution(LISTE_FEM_SOLUTION::iterator &it)
842     {
843     it++;
844     if (it==lst_fem_solution.end())
845     return NULL;
846     return it->second;
847     }
848    
849    
850    
851     // FIN DE GESTION DES ENTITES
852    
853    
854    
855     void MG_GESTIONNAIRE::enregistrer(char* chemin)
856     {
857     std::ofstream o(chemin,std::ios::out|std::ios::trunc);
858     o.precision(16);
859     o.setf(std::ios::showpoint);
860     o <<(*this) << std::endl;
861     }
862    
863     void MG_GESTIONNAIRE::enregistrer(const char* chemin)
864     {
865     std::ofstream o(chemin,std::ios::out|std::ios::trunc);
866     o.precision(16);
867     o.setf(std::ios::showpoint);
868     o << (*this) << std::endl;
869     }
870    
871 francois 763 void MG_GESTIONNAIRE::enregistrer(std::ostream& o,double version)
872 francois 283 {
873 francois 763 version_fichier=version;
874 francois 283 LISTE_ENTITE::const_iterator i;
875     o << "// Fichier MAGIC - UQTR;" << std::endl;
876     o << "//*i:" << entiteidmax << ";" << std::endl;
877 francois 763 o << "//*v:" << version_fichier << ";" << std::endl;
878 francois 283 for (i=lst_entite.begin();i!=lst_entite.end();i++)
879 francois 763 (*i)->enregistrer(o,version_fichier);
880 francois 283 o << "FIN;" << std::endl;
881     }
882    
883 francois 763 double MG_GESTIONNAIRE::get_version_fichier(void)
884     {
885     return version_fichier;
886     }
887 francois 283
888    
889     std::ostream& operator << (std::ostream& o,MG_GESTIONNAIRE& gest)
890     {
891 francois 763 gest.enregistrer(o,VERSIONFICHIER);
892 francois 283 return o;
893     }
894