ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/geometrie/src/mg_gestionnaire.cpp
Revision: 910
Committed: Tue Jan 9 19:14:31 2018 UTC (7 years, 4 months ago) by francois
File size: 24247 byte(s)
Log Message:
ajout de fonction pour rassembler tous les fichiers dépendant d'un fichier magic. 
operation -compressmagic dans mgoperation
idem avec carte de taille -compresscarte et -compresscarte2

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