ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/geometrie/src/mg_gestionnaire.cpp
Revision: 740
Committed: Wed Sep 30 22:24:50 2015 UTC (9 years, 7 months ago) by couturad
File size: 20829 byte(s)
Log Message:
Ajout d'assemblage dans un arbre caractéristique
Modification de la gestion des id de occ avec retro-compatibilité
script adaptable au assemblage

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     MG_GESTIONNAIRE::MG_GESTIONNAIRE():entiteidmax(0),ouvertsld(0)
43     {
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     void MG_GESTIONNAIRE::enregistrer(std::ostream& o)
872     {
873     LISTE_ENTITE::const_iterator i;
874     o << "// Fichier MAGIC - UQTR;" << std::endl;
875     o << "//*i:" << entiteidmax << ";" << std::endl;
876     for (i=lst_entite.begin();i!=lst_entite.end();i++)
877     (*i)->enregistrer(o);
878     o << "FIN;" << std::endl;
879     }
880    
881    
882    
883     std::ostream& operator << (std::ostream& o,MG_GESTIONNAIRE& gest)
884     {
885     gest.enregistrer(o);
886     return o;
887     }
888