ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/geometrie/src/mg_gestionnaire.cpp
Revision: 944
Committed: Tue Jun 12 15:51:19 2018 UTC (6 years, 11 months ago) by couturad
File size: 27409 byte(s)
Log Message:
Correction des bugs detectes par Cppcheck

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 couturad 906 #include "mg_cg_modele.h"
30 francois 283
31    
32    
33    
34 couturad 740
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 couturad 919 supprimer_tout_fem_maillage();
54 couturad 906 supprimer_tout_mgcg_modele();
55 francois 283 supprimer_tout_mg_geometrie();
56 couturad 919 supprimer_tout_mg_construction();
57 couturad 906 supprimer_tout_mg_arbre();
58 francois 793 }
59 francois 283
60 francois 793 void MG_GESTIONNAIRE::vide(void)
61     {
62     supprimer_tout_fem_solution();
63     supprimer_tout_mg_solution();
64     supprimer_tout_mg_maillage();
65 couturad 919 supprimer_tout_fem_maillage();
66 couturad 906 supprimer_tout_mgcg_modele();
67 francois 793 supprimer_tout_mg_geometrie();
68 couturad 919 supprimer_tout_mg_construction();
69 couturad 906 supprimer_tout_mg_arbre();
70 francois 793 entiteidmax=1;
71 francois 283 }
72    
73     void MG_GESTIONNAIRE::recherche_bonid(MG_IDENTIFICATEUR &ident)
74     {
75     if (ident.get_id()==0)
76     {
77     entiteidmax++;
78     ident.change_id(entiteidmax);
79     }
80     else
81     {
82     if (ident.get_id()>entiteidmax) entiteidmax=ident.get_id();
83     }
84     }
85    
86     void MG_GESTIONNAIRE::recherche_bonidvisuel(MG_IDENTIFICATEUR &ident)
87     {
88     if (ident.get_id()==0)
89     {
90     entitevisuelidmax++;
91     ident.change_id(entitevisuelidmax);
92     }
93     else
94     {
95     if (ident.get_id()>entitevisuelidmax) entitevisuelidmax=ident.get_id();
96     }
97     }
98    
99 couturad 906 // ENTITE MG_CG_MODELE
100    
101     int MG_GESTIONNAIRE::ajouter_mgcg_modele(MG_CG_MODELE* mgcg_modele)
102     {
103     recherche_bonid(*mgcg_modele);
104     MG_IDENTIFICATEUR *id=mgcg_modele;
105     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
106     if (!p.second) return FAIL;
107     std::pair<const unsigned long,MG_CG_MODELE*> tmp(mgcg_modele->get_id(),mgcg_modele);
108     lst_mgcg_modele.insert(tmp);
109     mgcg_modele->change_mg_gestionnaire(this);
110     return OK;
111     }
112    
113     MG_CG_MODELE* MG_GESTIONNAIRE::get_mgcg_modeleid(long unsigned int num)
114     {
115     LISTE_MGCG_MODELE::iterator i=lst_mgcg_modele.find(num);
116     if (i==lst_mgcg_modele.end())
117     {
118     return NULL;
119     }
120     return ((*i).second);
121     }
122    
123     MG_CG_MODELE* MG_GESTIONNAIRE::get_mgcg_modele(unsigned int num)
124     {
125     if (!(num<lst_mgcg_modele.size()))
126     {
127     return NULL;
128     }
129     LISTE_MGCG_MODELE::iterator i=lst_mgcg_modele.begin();
130     for (unsigned long j=0;j<num;j++) i++;
131     return ((*i).second);
132     }
133    
134     unsigned int MG_GESTIONNAIRE::get_nb_mgcg_modele(void)
135     {
136     return lst_mgcg_modele.size();
137     }
138    
139     MG_CG_MODELE* MG_GESTIONNAIRE::get_premier_mgcg_modele(LISTE_MGCG_MODELE::iterator& it)
140     {
141     it = lst_mgcg_modele.begin();
142     if (it == lst_mgcg_modele.end())
143     return NULL;
144     return it->second ;
145     }
146    
147     MG_CG_MODELE* MG_GESTIONNAIRE::get_suivant_mgcg_modele(LISTE_MGCG_MODELE::iterator& it)
148     {
149     it++;
150     if (it==lst_mgcg_modele.end())
151     return NULL;
152     return it->second;
153     }
154    
155     int MG_GESTIONNAIRE::supprimer_mgcg_modele(unsigned int num)
156     {
157     MG_CG_MODELE* mgcg_modele=get_mgcg_modele(num);
158     if (mgcg_modele==NULL)
159     {
160     return FAIL;
161     }
162     MG_IDENTIFICATEUR* id=mgcg_modele;
163     LISTE_ENTITE::iterator i=lst_entite.find(id);
164     lst_entite.erase(i);
165     LISTE_MGCG_MODELE::iterator j=lst_mgcg_modele.find(id->get_id());
166     lst_mgcg_modele.erase(j);
167     delete mgcg_modele;
168     return OK;
169     }
170    
171     int MG_GESTIONNAIRE::supprimer_mgcg_modeleid(long unsigned int num)
172     {
173     MG_CG_MODELE* mgcg_modele=get_mgcg_modeleid(num);
174     if (mgcg_modele==NULL)
175     {
176     return FAIL;
177     }
178     MG_IDENTIFICATEUR* id=mgcg_modele;
179     LISTE_ENTITE::iterator i=lst_entite.find(id);
180     lst_entite.erase(i);
181     LISTE_MGCG_MODELE::iterator j=lst_mgcg_modele.find(num);
182     lst_mgcg_modele.erase(j);
183     delete mgcg_modele;
184     return OK;
185     }
186    
187     void MG_GESTIONNAIRE::supprimer_tout_mgcg_modele(void)
188     {
189     while (get_nb_mgcg_modele()!=0)
190     {
191     LISTE_MGCG_MODELE::iterator j=lst_mgcg_modele.begin();
192     MG_CG_MODELE* mgcg_modele=(*j).second;
193     MG_IDENTIFICATEUR* id=mgcg_modele;
194     LISTE_ENTITE::iterator i=lst_entite.find(id);
195     lst_entite.erase(i);
196     lst_mgcg_modele.erase(j);
197     delete mgcg_modele;
198     }
199     }
200    
201    
202     // FIN ENTITE MG_CG_MODELE
203    
204    
205    
206    
207 francois 686 // ENTITE MG_ARBRE
208     int MG_GESTIONNAIRE::ajouter_mg_arbre(MG_ARBRE *mgarbre)
209     {
210     recherche_bonid(*mgarbre);
211     MG_IDENTIFICATEUR *id=mgarbre;
212     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
213     if (!p.second) return FAIL;
214     std::pair<const unsigned long,MG_ARBRE*> tmp(mgarbre->get_id(),mgarbre);
215     lst_mg_arbre.insert(tmp);
216     mgarbre->change_gestionnaire(this);
217     return OK;
218     }
219 francois 283
220    
221 francois 686 MG_ARBRE* MG_GESTIONNAIRE::get_mg_arbreid(unsigned long num)
222     {
223     LISTE_MG_ARBRE::iterator i=lst_mg_arbre.find(num);
224     if (i==lst_mg_arbre.end())
225     {
226     // afficheur << INEXISTE << enderr;
227     return NULL;
228     }
229     return ((*i).second);
230     }
231    
232    
233    
234     MG_ARBRE* MG_GESTIONNAIRE::get_mg_arbre(unsigned int num)
235     {
236     if (!(num<lst_mg_arbre.size()))
237     {
238     // afficheur << INEXISTE << enderr;
239     return NULL;
240     }
241     LISTE_MG_ARBRE::iterator i=lst_mg_arbre.begin();
242     for (unsigned long j=0;j<num;j++) i++;
243     return ((*i).second);
244     }
245    
246     MG_ARBRE* MG_GESTIONNAIRE::get_premier_arbre(LISTE_MG_ARBRE::iterator &it)
247     {
248     it = lst_mg_arbre.begin();
249     if (it == lst_mg_arbre.end())
250     return NULL;
251     return it->second ;
252     }
253    
254     MG_ARBRE* MG_GESTIONNAIRE::get_suivant_arbre(LISTE_MG_ARBRE::iterator &it)
255     {
256     it++;
257     if (it==lst_mg_arbre.end())
258     return NULL;
259     return it->second;
260     }
261    
262     unsigned int MG_GESTIONNAIRE::get_nb_mg_arbre(void)
263     {
264     return lst_mg_arbre.size();
265     }
266    
267    
268     int MG_GESTIONNAIRE::supprimer_mg_arbreid(unsigned long num)
269     {
270     MG_ARBRE* mgarbre=get_mg_arbreid(num);
271     if (mgarbre==NULL)
272     {
273     // afficheur << INEXISTE2 << enderr;
274     return FAIL;
275     }
276     MG_IDENTIFICATEUR* id=mgarbre;
277     LISTE_ENTITE::iterator i=lst_entite.find(id);
278     lst_entite.erase(i);
279     LISTE_MG_ARBRE::iterator j=lst_mg_arbre.find(num);
280     lst_mg_arbre.erase(j);
281     delete mgarbre;
282     return OK;
283     }
284    
285    
286     int MG_GESTIONNAIRE::supprimer_mg_arbre(unsigned int num)
287     {
288     MG_ARBRE* mgarbre=get_mg_arbre(num);
289     if (mgarbre==NULL)
290     {
291     // afficheur << INEXISTE2 << enderr;
292     return FAIL;
293     }
294     MG_IDENTIFICATEUR* id=mgarbre;
295     LISTE_ENTITE::iterator i=lst_entite.find(id);
296     lst_entite.erase(i);
297     LISTE_MG_ARBRE::iterator j=lst_mg_arbre.find(id->get_id());
298     lst_mg_arbre.erase(j);
299     delete mgarbre;
300     return OK;
301     }
302    
303    
304     void MG_GESTIONNAIRE::supprimer_tout_mg_arbre(void)
305     {
306     while (get_nb_mg_arbre()!=0)
307     {
308     LISTE_MG_ARBRE::iterator j=lst_mg_arbre.begin();
309     MG_ARBRE* mgarbre=(*j).second;
310     MG_IDENTIFICATEUR* id=mgarbre;
311     LISTE_ENTITE::iterator i=lst_entite.find(id);
312     lst_entite.erase(i);
313     lst_mg_arbre.erase(j);
314     delete mgarbre;
315     }
316     }
317     // ENTITE MG_GEOMETRIE
318 francois 283 int MG_GESTIONNAIRE::ajouter_mg_geometrie(MG_GEOMETRIE *mggeo)
319     {
320     recherche_bonid(*mggeo);
321     MG_IDENTIFICATEUR *id=mggeo;
322     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
323     if (!p.second) return FAIL;
324     std::pair<const unsigned long,MG_GEOMETRIE*> tmp(mggeo->get_id(),mggeo);
325     lst_mg_geometrie.insert(tmp);
326     mggeo->change_gestionnaire(this);
327     return OK;
328     }
329    
330    
331     MG_GEOMETRIE* MG_GESTIONNAIRE::get_mg_geometrieid(unsigned long num)
332     {
333     LISTE_MG_GEOMETRIE::iterator i=lst_mg_geometrie.find(num);
334     if (i==lst_mg_geometrie.end())
335     {
336     // afficheur << INEXISTE << enderr;
337     return NULL;
338     }
339     return ((*i).second);
340     }
341    
342    
343    
344     MG_GEOMETRIE* MG_GESTIONNAIRE::get_mg_geometrie(unsigned int num)
345     {
346     if (!(num<lst_mg_geometrie.size()))
347     {
348     // afficheur << INEXISTE << enderr;
349     return NULL;
350     }
351     LISTE_MG_GEOMETRIE::iterator i=lst_mg_geometrie.begin();
352     for (unsigned long j=0;j<num;j++) i++;
353     return ((*i).second);
354     }
355    
356     MG_GEOMETRIE* MG_GESTIONNAIRE::get_premier_geometrie(LISTE_MG_GEOMETRIE::iterator &it)
357     {
358     it = lst_mg_geometrie.begin();
359     if (it == lst_mg_geometrie.end())
360     return NULL;
361     return it->second ;
362     }
363    
364     MG_GEOMETRIE* MG_GESTIONNAIRE::get_suivant_geometrie(LISTE_MG_GEOMETRIE::iterator &it)
365     {
366     it++;
367     if (it==lst_mg_geometrie.end())
368     return NULL;
369     return it->second;
370     }
371    
372     unsigned int MG_GESTIONNAIRE::get_nb_mg_geometrie(void)
373     {
374     return lst_mg_geometrie.size();
375     }
376    
377    
378     int MG_GESTIONNAIRE::supprimer_mg_geometrieid(unsigned long num)
379     {
380     MG_GEOMETRIE* mggeo=get_mg_geometrieid(num);
381     if (mggeo==NULL)
382     {
383     // afficheur << INEXISTE2 << enderr;
384     return FAIL;
385     }
386     MG_IDENTIFICATEUR* id=mggeo;
387     LISTE_ENTITE::iterator i=lst_entite.find(id);
388     lst_entite.erase(i);
389     LISTE_MG_GEOMETRIE::iterator j=lst_mg_geometrie.find(num);
390     lst_mg_geometrie.erase(j);
391     delete mggeo;
392     return OK;
393     }
394    
395    
396     int MG_GESTIONNAIRE::supprimer_mg_geometrie(unsigned int num)
397     {
398     MG_GEOMETRIE* mggeo=get_mg_geometrie(num);
399     if (mggeo==NULL)
400     {
401     // afficheur << INEXISTE2 << enderr;
402     return FAIL;
403     }
404     MG_IDENTIFICATEUR* id=mggeo;
405     LISTE_ENTITE::iterator i=lst_entite.find(id);
406     lst_entite.erase(i);
407     LISTE_MG_GEOMETRIE::iterator j=lst_mg_geometrie.find(id->get_id());
408     lst_mg_geometrie.erase(j);
409     delete mggeo;
410     return OK;
411     }
412    
413    
414     void MG_GESTIONNAIRE::supprimer_tout_mg_geometrie(void)
415     {
416     while (get_nb_mg_geometrie()!=0)
417     {
418     LISTE_MG_GEOMETRIE::iterator j=lst_mg_geometrie.begin();
419     MG_GEOMETRIE* mggeo=(*j).second;
420     MG_IDENTIFICATEUR* id=mggeo;
421     LISTE_ENTITE::iterator i=lst_entite.find(id);
422     lst_entite.erase(i);
423     lst_mg_geometrie.erase(j);
424     delete mggeo;
425     }
426     }
427    
428 couturad 919 //ENTITE CONSTRUTION
429    
430     int MG_GESTIONNAIRE::ajouter_mg_construction(MG_GEOMETRIE *construction)
431     {
432     recherche_bonid(*construction);
433     MG_IDENTIFICATEUR *id=construction;
434     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
435     if (!p.second) return FAIL;
436     std::pair<const unsigned long,MG_GEOMETRIE*> tmp(construction->get_id(),construction);
437     lst_mg_construction.insert(tmp);
438     construction->change_gestionnaire(this);
439     return OK;
440     }
441    
442    
443     MG_GEOMETRIE* MG_GESTIONNAIRE::get_mg_constructionid(unsigned long num)
444     {
445     LISTE_MG_CONSTRUCTION::iterator i=lst_mg_construction.find(num);
446     if (i==lst_mg_construction.end())
447     {
448     // afficheur << INEXISTE << enderr;
449     return NULL;
450     }
451     return ((*i).second);
452     }
453    
454    
455    
456     MG_GEOMETRIE* MG_GESTIONNAIRE::get_mg_construction(unsigned int num)
457     {
458     if (!(num<lst_mg_construction.size()))
459     {
460     // afficheur << INEXISTE << enderr;
461     return NULL;
462     }
463     LISTE_MG_CONSTRUCTION::iterator i=lst_mg_construction.begin();
464     for (unsigned long j=0;j<num;j++) i++;
465     return ((*i).second);
466     }
467    
468     MG_GEOMETRIE* MG_GESTIONNAIRE::get_premier_construction(LISTE_MG_CONSTRUCTION::iterator &it)
469     {
470     it = lst_mg_construction.begin();
471     if (it == lst_mg_construction.end())
472     return NULL;
473     return it->second ;
474     }
475    
476     MG_GEOMETRIE* MG_GESTIONNAIRE::get_suivant_construction(LISTE_MG_CONSTRUCTION::iterator &it)
477     {
478     it++;
479     if (it==lst_mg_construction.end())
480     return NULL;
481     return it->second;
482     }
483    
484     unsigned int MG_GESTIONNAIRE::get_nb_mg_construction(void)
485     {
486     return lst_mg_construction.size();
487     }
488    
489    
490     int MG_GESTIONNAIRE::supprimer_mg_constructionid(unsigned long num)
491     {
492     MG_GEOMETRIE* construction=get_mg_constructionid(num);
493     if (construction==NULL)
494     {
495     // afficheur << INEXISTE2 << enderr;
496     return FAIL;
497     }
498     MG_IDENTIFICATEUR* id=construction;
499     LISTE_ENTITE::iterator i=lst_entite.find(id);
500     lst_entite.erase(i);
501     LISTE_MG_CONSTRUCTION::iterator j=lst_mg_construction.find(num);
502 couturad 944 lst_mg_construction.erase(j);
503 couturad 919 delete construction;
504     return OK;
505     }
506    
507    
508     int MG_GESTIONNAIRE::supprimer_mg_construction(unsigned int num)
509     {
510     MG_GEOMETRIE* construction=get_mg_construction(num);
511     if (construction==NULL)
512     {
513     // afficheur << INEXISTE2 << enderr;
514     return FAIL;
515     }
516     MG_IDENTIFICATEUR* id=construction;
517     LISTE_ENTITE::iterator i=lst_entite.find(id);
518     lst_entite.erase(i);
519     LISTE_MG_CONSTRUCTION::iterator j=lst_mg_construction.find(id->get_id());
520     lst_mg_construction.erase(j);
521     delete construction;
522     return OK;
523     }
524    
525    
526     void MG_GESTIONNAIRE::supprimer_tout_mg_construction(void)
527     {
528     while (get_nb_mg_construction()!=0)
529     {
530     LISTE_MG_CONSTRUCTION::iterator j=lst_mg_construction.begin();
531     MG_GEOMETRIE* construction=(*j).second;
532     MG_IDENTIFICATEUR* id=construction;
533     LISTE_ENTITE::iterator i=lst_entite.find(id);
534     lst_entite.erase(i);
535     lst_mg_construction.erase(j);
536     delete construction;
537     }
538     }
539    
540 francois 283 // ENTITE MG_MAILLAGE
541    
542    
543     int MG_GESTIONNAIRE::ajouter_mg_maillage(MG_MAILLAGE *mgmai)
544     {
545     recherche_bonid(*mgmai);
546     MG_IDENTIFICATEUR *id=mgmai;
547     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
548     if (!p.second)
549     {
550     // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
551     return FAIL;
552     }
553    
554     std::pair<const unsigned long,MG_MAILLAGE*> tmp(mgmai->get_id(),mgmai);
555     lst_mg_maillage.insert(tmp);
556     mgmai->change_gestionnaire(this);
557     return OK;
558     }
559    
560    
561     MG_MAILLAGE* MG_GESTIONNAIRE::get_mg_maillageid(unsigned long num)
562     {
563     LISTE_MG_MAILLAGE::iterator i=lst_mg_maillage.find(num);
564     if (i==lst_mg_maillage.end())
565     {
566     // afficheur << INEXISTE << enderr;
567     return NULL;
568     }
569     return ((*i).second);
570     }
571    
572    
573    
574     MG_MAILLAGE* MG_GESTIONNAIRE::get_mg_maillage(unsigned int num)
575     {
576     if (!(num<lst_mg_maillage.size()))
577     {
578     // afficheur << INEXISTE << enderr;
579     return NULL;
580     }
581     LISTE_MG_MAILLAGE::iterator i=lst_mg_maillage.begin();
582     for (unsigned long j=0;j<num;j++) i++;
583     return ((*i).second);
584     }
585    
586    
587     MG_MAILLAGE* MG_GESTIONNAIRE::get_premier_mg_maillage(LISTE_MG_MAILLAGE::iterator &it)
588     {
589     it = lst_mg_maillage.begin();
590     if (it == lst_mg_maillage.end())
591     return NULL;
592     return it->second ;
593     }
594    
595     MG_MAILLAGE* MG_GESTIONNAIRE::get_suivant_mg_maillage(LISTE_MG_MAILLAGE::iterator &it)
596     {
597     it++;
598     if (it==lst_mg_maillage.end())
599     return NULL;
600     return it->second;
601     }
602    
603    
604     unsigned int MG_GESTIONNAIRE::get_nb_mg_maillage(void)
605     {
606     return lst_mg_maillage.size();
607     }
608    
609    
610     int MG_GESTIONNAIRE::supprimer_mg_maillageid(unsigned long num)
611     {
612     MG_MAILLAGE* mgmai=get_mg_maillageid(num);
613     if (mgmai==NULL)
614     {
615     // afficheur << INEXISTE2 << enderr;
616     return FAIL;
617     }
618     MG_IDENTIFICATEUR* id=mgmai;
619     LISTE_ENTITE::iterator i=lst_entite.find(id);
620     lst_entite.erase(i);
621     LISTE_MG_MAILLAGE::iterator j=lst_mg_maillage.find(num);
622     lst_mg_maillage.erase(j);
623     delete mgmai;
624     return OK;
625     }
626    
627    
628     int MG_GESTIONNAIRE::supprimer_mg_maillage(unsigned int num)
629     {
630     MG_MAILLAGE* mgmai=get_mg_maillage(num);
631     if (mgmai==NULL)
632     {
633     // afficheur << INEXISTE2 << enderr;
634     return FAIL;
635     }
636     MG_IDENTIFICATEUR* id=mgmai;
637     LISTE_ENTITE::iterator i=lst_entite.find(id);
638     lst_entite.erase(i);
639     LISTE_MG_MAILLAGE::iterator j=lst_mg_maillage.find(id->get_id());
640     lst_mg_maillage.erase(j);
641     delete mgmai;
642     return OK;
643     }
644    
645    
646     void MG_GESTIONNAIRE::supprimer_tout_mg_maillage(void)
647     {
648     while (get_nb_mg_maillage()!=0)
649     {
650     LISTE_MG_MAILLAGE::iterator j=lst_mg_maillage.begin();
651     MG_MAILLAGE* mgmai=(*j).second;
652     MG_IDENTIFICATEUR* id=mgmai;
653     LISTE_ENTITE::iterator i=lst_entite.find(id);
654     lst_entite.erase(i);
655     lst_mg_maillage.erase(j);
656     delete mgmai;
657     }
658    
659     }
660    
661    
662    
663    
664     // ENTITE FEM_MAILLAGE
665    
666    
667    
668    
669     int MG_GESTIONNAIRE::ajouter_fem_maillage(FEM_MAILLAGE *femmai)
670     {
671     recherche_bonid(*femmai);
672     MG_IDENTIFICATEUR *id=femmai;
673     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
674     if (!p.second)
675     {
676     // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
677     return FAIL;
678     }
679    
680     std::pair<const unsigned long,FEM_MAILLAGE*> tmp(femmai->get_id(),femmai);
681     lst_fem_maillage.insert(tmp);
682     femmai->change_gestionnaire(this);
683     return OK;
684     }
685    
686    
687     FEM_MAILLAGE* MG_GESTIONNAIRE::get_fem_maillageid(unsigned long num)
688     {
689     LISTE_FEM_MAILLAGE::iterator i=lst_fem_maillage.find(num);
690     if (i==lst_fem_maillage.end())
691     {
692     // afficheur << INEXISTE << enderr;
693     return NULL;
694     }
695     return ((*i).second);
696     }
697    
698    
699    
700     FEM_MAILLAGE* MG_GESTIONNAIRE::get_fem_maillage(unsigned int num)
701     {
702     if (!(num<lst_fem_maillage.size()))
703     {
704     // afficheur << INEXISTE << enderr;
705     return NULL;
706     }
707     LISTE_FEM_MAILLAGE::iterator i=lst_fem_maillage.begin();
708     for (unsigned long j=0;j<num;j++) i++;
709     return ((*i).second);
710     }
711    
712    
713    
714     unsigned int MG_GESTIONNAIRE::get_nb_fem_maillage(void)
715     {
716     return lst_fem_maillage.size();
717     }
718    
719    
720     int MG_GESTIONNAIRE::supprimer_fem_maillageid(unsigned long num)
721     {
722     FEM_MAILLAGE* femmai=get_fem_maillageid(num);
723     if (femmai==NULL)
724     {
725     // afficheur << INEXISTE2 << enderr;
726     return FAIL;
727     }
728     MG_IDENTIFICATEUR* id=femmai;
729     LISTE_ENTITE::iterator i=lst_entite.find(id);
730     lst_entite.erase(i);
731     LISTE_FEM_MAILLAGE::iterator j=lst_fem_maillage.find(num);
732     lst_fem_maillage.erase(j);
733     delete femmai;
734     return OK;
735     }
736    
737    
738     int MG_GESTIONNAIRE::supprimer_fem_maillage(unsigned int num)
739     {
740     FEM_MAILLAGE* femmai=get_fem_maillage(num);
741     if (femmai==NULL)
742     {
743     // afficheur << INEXISTE2 << enderr;
744     return FAIL;
745     }
746     MG_IDENTIFICATEUR* id=femmai;
747     LISTE_ENTITE::iterator i=lst_entite.find(id);
748     lst_entite.erase(i);
749     LISTE_FEM_MAILLAGE::iterator j=lst_fem_maillage.find(id->get_id());
750     lst_fem_maillage.erase(j);
751     delete femmai;
752     return OK;
753     }
754    
755    
756     void MG_GESTIONNAIRE::supprimer_tout_fem_maillage(void)
757     {
758     while (get_nb_fem_maillage()!=0)
759     {
760     LISTE_FEM_MAILLAGE::iterator j=lst_fem_maillage.begin();
761     FEM_MAILLAGE* femmai=(*j).second;
762     MG_IDENTIFICATEUR* id=femmai;
763     LISTE_ENTITE::iterator i=lst_entite.find(id);
764     lst_entite.erase(i);
765     lst_fem_maillage.erase(j);
766     delete femmai;
767     }
768    
769     }
770    
771     FEM_MAILLAGE* MG_GESTIONNAIRE::get_premier_fem_maillage(LISTE_FEM_MAILLAGE::iterator &it)
772     {
773     it = lst_fem_maillage.begin();
774     if (it == lst_fem_maillage.end())
775     return NULL;
776     return it->second ;
777     }
778    
779     FEM_MAILLAGE* MG_GESTIONNAIRE::get_suivant_fem_maillage(LISTE_FEM_MAILLAGE::iterator &it)
780     {
781     it++;
782     if (it==lst_fem_maillage.end())
783     return NULL;
784     return it->second;
785     }
786    
787    
788    
789    
790    
791     // ENTITE MG_SOLUTION
792    
793    
794    
795    
796    
797    
798     int MG_GESTIONNAIRE::ajouter_mg_solution(MG_SOLUTION *mgsol)
799     {
800     recherche_bonid(*mgsol);
801     MG_IDENTIFICATEUR *id=mgsol;
802     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
803     if (!p.second)
804     {
805     return FAIL;
806     }
807    
808     std::pair<const unsigned long,MG_SOLUTION*> tmp(mgsol->get_id(),mgsol);
809     lst_mg_solution.insert(tmp);
810     return OK;
811     }
812    
813    
814     MG_SOLUTION* MG_GESTIONNAIRE::get_mg_solutionid(unsigned long num)
815     {
816     LISTE_MG_SOLUTION::iterator i=lst_mg_solution.find(num);
817     if (i==lst_mg_solution.end())
818     {
819     return NULL;
820     }
821     return ((*i).second);
822     }
823    
824    
825    
826     MG_SOLUTION* MG_GESTIONNAIRE::get_mg_solution(unsigned int num)
827     {
828     if (!(num<lst_mg_solution.size()))
829     {
830     return NULL;
831     }
832     LISTE_MG_SOLUTION::iterator i=lst_mg_solution.begin();
833     for (unsigned long j=0;j<num;j++) i++;
834     return ((*i).second);
835     }
836    
837 francois 326 MG_SOLUTION* MG_GESTIONNAIRE::get_mg_solution(MG_MAILLAGE* mg,int nb_champs,char *nomfichier,char *nomsolution)
838     {
839     LISTE_MG_SOLUTION::iterator j=lst_mg_solution.begin();
840     while (j!=lst_mg_solution.end())
841     {
842    
843     MG_SOLUTION* mgsol=(*j).second;
844     if (mgsol->get_maillage()==mg)
845     if (mgsol->get_nb_champ()==nb_champs)
846     if (strcmp(mgsol->get_nom().c_str(),nomsolution)==0)
847     if (strcmp(mgsol->get_nom_fichier().c_str(),nomfichier)==0)
848     return mgsol;
849     j++;
850     }
851     return NULL;
852     }
853 francois 283
854     MG_SOLUTION* MG_GESTIONNAIRE::get_premier_mg_solution(LISTE_MG_SOLUTION::iterator &it)
855     {
856     it = lst_mg_solution.begin();
857     if (it == lst_mg_solution.end())
858     return NULL;
859     return it->second ;
860     }
861    
862     MG_SOLUTION* MG_GESTIONNAIRE::get_suivant_mg_solution(LISTE_MG_SOLUTION::iterator &it)
863     {
864     it++;
865     if (it==lst_mg_solution.end())
866     return NULL;
867     return it->second;
868     }
869    
870    
871     unsigned int MG_GESTIONNAIRE::get_nb_mg_solution(void)
872     {
873     return lst_mg_solution.size();
874     }
875    
876    
877     int MG_GESTIONNAIRE::supprimer_mg_solutionid(unsigned long num)
878     {
879     MG_SOLUTION* mgsol=get_mg_solutionid(num);
880     if (mgsol==NULL)
881     {
882     return FAIL;
883     }
884     MG_IDENTIFICATEUR* id=mgsol;
885     LISTE_ENTITE::iterator i=lst_entite.find(id);
886     lst_entite.erase(i);
887     LISTE_MG_SOLUTION::iterator j=lst_mg_solution.find(num);
888     lst_mg_solution.erase(j);
889     mgsol->efface();
890     delete mgsol;
891     return OK;
892     }
893    
894    
895     int MG_GESTIONNAIRE::supprimer_mg_solution(unsigned int num)
896     {
897     MG_SOLUTION* mgsol=get_mg_solution(num);
898     if (mgsol==NULL)
899     {
900     return FAIL;
901     }
902     MG_IDENTIFICATEUR* id=mgsol;
903     LISTE_ENTITE::iterator i=lst_entite.find(id);
904     lst_entite.erase(i);
905     LISTE_MG_SOLUTION::iterator j=lst_mg_solution.find(id->get_id());
906     lst_mg_solution.erase(j);
907     mgsol->efface();
908     delete mgsol;
909     return OK;
910     }
911    
912    
913     void MG_GESTIONNAIRE::supprimer_tout_mg_solution(void)
914     {
915     while (get_nb_mg_solution()!=0)
916     {
917     LISTE_MG_SOLUTION::iterator j=lst_mg_solution.begin();
918     MG_SOLUTION* mgsol=(*j).second;
919     MG_IDENTIFICATEUR* id=mgsol;
920     LISTE_ENTITE::iterator i=lst_entite.find(id);
921     lst_entite.erase(i);
922     lst_mg_solution.erase(j);
923     delete mgsol;
924     }
925    
926     }
927    
928    
929    
930    
931     // ENTITE FEM_SOLUTION
932    
933    
934    
935    
936    
937     int MG_GESTIONNAIRE::ajouter_fem_solution(FEM_SOLUTION *mgsol)
938     {
939     recherche_bonid(*mgsol);
940     MG_IDENTIFICATEUR *id=mgsol;
941     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
942     if (!p.second)
943     {
944     return FAIL;
945     }
946    
947     std::pair<const unsigned long,FEM_SOLUTION*> tmp(mgsol->get_id(),mgsol);
948     lst_fem_solution.insert(tmp);
949     return OK;
950     }
951    
952    
953     FEM_SOLUTION* MG_GESTIONNAIRE::get_fem_solutionid(unsigned long num)
954     {
955     LISTE_FEM_SOLUTION::iterator i=lst_fem_solution.find(num);
956     if (i==lst_fem_solution.end())
957     {
958     return NULL;
959     }
960     return ((*i).second);
961     }
962    
963    
964    
965     FEM_SOLUTION* MG_GESTIONNAIRE::get_fem_solution(unsigned int num)
966     {
967     if (!(num<lst_fem_solution.size()))
968     {
969     return NULL;
970     }
971     LISTE_FEM_SOLUTION::iterator i=lst_fem_solution.begin();
972     for (unsigned long j=0;j<num;j++) i++;
973     return ((*i).second);
974     }
975    
976    
977 francois 326 FEM_SOLUTION* MG_GESTIONNAIRE::get_fem_solution(FEM_MAILLAGE* fem,int nb_champs,char *nomfichier,char *nomsolution)
978     {
979     LISTE_FEM_SOLUTION::iterator j=lst_fem_solution.begin();
980     while (j!=lst_fem_solution.end())
981     {
982    
983     FEM_SOLUTION* mgsol=(*j).second;
984     if (mgsol->get_maillage()==fem)
985     if (mgsol->get_nb_champ()==nb_champs)
986     if (strcmp(mgsol->get_nom().c_str(),nomsolution)==0)
987     if (strcmp(mgsol->get_nom_fichier().c_str(),nomfichier)==0)
988     return mgsol;
989     j++;
990     }
991     return NULL;
992     }
993 francois 283
994 francois 326
995 francois 283 unsigned int MG_GESTIONNAIRE::get_nb_fem_solution(void)
996     {
997     return lst_fem_solution.size();
998     }
999    
1000    
1001     int MG_GESTIONNAIRE::supprimer_fem_solutionid(unsigned long num)
1002     {
1003     FEM_SOLUTION* mgsol=get_fem_solutionid(num);
1004     if (mgsol==NULL)
1005     {
1006     return FAIL;
1007     }
1008     MG_IDENTIFICATEUR* id=mgsol;
1009     LISTE_ENTITE::iterator i=lst_entite.find(id);
1010     lst_entite.erase(i);
1011     LISTE_FEM_SOLUTION::iterator j=lst_fem_solution.find(num);
1012     lst_fem_solution.erase(j);
1013     mgsol->efface();
1014     delete mgsol;
1015     return OK;
1016     }
1017    
1018    
1019     int MG_GESTIONNAIRE::supprimer_fem_solution(unsigned int num)
1020     {
1021     FEM_SOLUTION* mgsol=get_fem_solution(num);
1022     if (mgsol==NULL)
1023     {
1024     return FAIL;
1025     }
1026     MG_IDENTIFICATEUR* id=mgsol;
1027     LISTE_ENTITE::iterator i=lst_entite.find(id);
1028     lst_entite.erase(i);
1029     LISTE_FEM_SOLUTION::iterator j=lst_fem_solution.find(id->get_id());
1030     lst_fem_solution.erase(j);
1031     mgsol->efface();
1032     delete mgsol;
1033     return OK;
1034     }
1035    
1036     int MG_GESTIONNAIRE::supprimer_fem_solution_du_gestionnaire(unsigned int num)
1037     {
1038     FEM_SOLUTION* mgsol=get_fem_solution(num);
1039     if (mgsol==NULL)
1040     {
1041     return FAIL;
1042     }
1043     MG_IDENTIFICATEUR* id=mgsol;
1044     LISTE_ENTITE::iterator i=lst_entite.find(id);
1045     lst_entite.erase(i);
1046     LISTE_FEM_SOLUTION::iterator j=lst_fem_solution.find(id->get_id());
1047     lst_fem_solution.erase(j);
1048     return OK;
1049     }
1050    
1051    
1052     void MG_GESTIONNAIRE::supprimer_tout_fem_solution(void)
1053     {
1054     while (get_nb_fem_solution()!=0)
1055     {
1056     LISTE_FEM_SOLUTION::iterator j=lst_fem_solution.begin();
1057     FEM_SOLUTION* mgsol=(*j).second;
1058     MG_IDENTIFICATEUR* id=mgsol;
1059     LISTE_ENTITE::iterator i=lst_entite.find(id);
1060     lst_entite.erase(i);
1061     lst_fem_solution.erase(j);
1062     delete mgsol;
1063     }
1064    
1065     }
1066    
1067    
1068     FEM_SOLUTION* MG_GESTIONNAIRE::get_premier_fem_solution(LISTE_FEM_SOLUTION::iterator &it)
1069     {
1070     it = lst_fem_solution.begin();
1071     if (it == lst_fem_solution.end())
1072     return NULL;
1073     return it->second ;
1074     }
1075    
1076     FEM_SOLUTION* MG_GESTIONNAIRE::get_suivant_fem_solution(LISTE_FEM_SOLUTION::iterator &it)
1077     {
1078     it++;
1079     if (it==lst_fem_solution.end())
1080     return NULL;
1081     return it->second;
1082     }
1083    
1084    
1085    
1086     // FIN DE GESTION DES ENTITES
1087    
1088    
1089    
1090     void MG_GESTIONNAIRE::enregistrer(char* chemin)
1091     {
1092     std::ofstream o(chemin,std::ios::out|std::ios::trunc);
1093     o.precision(16);
1094     o.setf(std::ios::showpoint);
1095     o <<(*this) << std::endl;
1096     }
1097    
1098     void MG_GESTIONNAIRE::enregistrer(const char* chemin)
1099     {
1100     std::ofstream o(chemin,std::ios::out|std::ios::trunc);
1101     o.precision(16);
1102     o.setf(std::ios::showpoint);
1103     o << (*this) << std::endl;
1104     }
1105    
1106 francois 763 void MG_GESTIONNAIRE::enregistrer(std::ostream& o,double version)
1107 francois 283 {
1108 francois 763 version_fichier=version;
1109 francois 283 LISTE_ENTITE::const_iterator i;
1110     o << "// Fichier MAGIC - UQTR;" << std::endl;
1111     o << "//*i:" << entiteidmax << ";" << std::endl;
1112 francois 763 o << "//*v:" << version_fichier << ";" << std::endl;
1113 francois 283 for (i=lst_entite.begin();i!=lst_entite.end();i++)
1114 francois 763 (*i)->enregistrer(o,version_fichier);
1115 francois 283 o << "FIN;" << std::endl;
1116     }
1117    
1118 francois 910
1119     void MG_GESTIONNAIRE::get_fichier_dependant(std::vector<std::string> &liste_fichier)
1120     {
1121     LISTE_ENTITE::const_iterator i;
1122     for (i=lst_entite.begin();i!=lst_entite.end();i++)
1123     (*i)->get_fichier_dependant(liste_fichier);
1124     }
1125    
1126 francois 763 double MG_GESTIONNAIRE::get_version_fichier(void)
1127     {
1128     return version_fichier;
1129     }
1130 francois 283
1131    
1132     std::ostream& operator << (std::ostream& o,MG_GESTIONNAIRE& gest)
1133     {
1134 francois 763 gest.enregistrer(o,VERSIONFICHIER);
1135 francois 283 return o;
1136     }
1137