ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/mtu/src/mg_gestionnaire.cpp
Revision: 1158
Committed: Thu Jun 13 22:18:49 2024 UTC (11 months, 1 week ago) by francois
File size: 26198 byte(s)
Log Message:
compatibilité Ubuntu 22.04
Suppression des refeences à Windows
Ajout d'une banière

File Contents

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