ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/geometrie/src/mg_gestionnaire.cpp
Revision: 906
Committed: Mon Nov 13 22:30:18 2017 UTC (7 years, 9 months ago) by couturad
File size: 24013 byte(s)
Log Message:
Nouveau opencascade commit 1

File Contents

# Content
1 //------------------------------------------------------------
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 #include "mg_cg_modele.h"
30
31
32
33
34
35 #include <fstream>
36 //#include "affiche.h"
37 //#include "message.h"
38
39
40 //using namespace std;
41
42 MG_GESTIONNAIRE::MG_GESTIONNAIRE():entiteidmax(0),ouvertsld(0),version_fichier(VERSIONFICHIER)
43 {
44
45
46 }
47
48 MG_GESTIONNAIRE::~MG_GESTIONNAIRE()
49 {
50 supprimer_tout_fem_solution();
51 supprimer_tout_mg_solution();
52 supprimer_tout_mg_maillage();
53 supprimer_tout_mgcg_modele();
54 supprimer_tout_mg_geometrie();
55 supprimer_tout_mg_arbre();
56 }
57
58 void MG_GESTIONNAIRE::vide(void)
59 {
60 supprimer_tout_fem_solution();
61 supprimer_tout_mg_solution();
62 supprimer_tout_mg_maillage();
63 supprimer_tout_mgcg_modele();
64 supprimer_tout_mg_geometrie();
65 supprimer_tout_mg_arbre();
66 entiteidmax=1;
67 }
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 // 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 // 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
216
217 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 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 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
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 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
878
879 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 void MG_GESTIONNAIRE::enregistrer(std::ostream& o,double version)
991 {
992 version_fichier=version;
993 LISTE_ENTITE::const_iterator i;
994 o << "// Fichier MAGIC - UQTR;" << std::endl;
995 o << "//*i:" << entiteidmax << ";" << std::endl;
996 o << "//*v:" << version_fichier << ";" << std::endl;
997 for (i=lst_entite.begin();i!=lst_entite.end();i++)
998 (*i)->enregistrer(o,version_fichier);
999 o << "FIN;" << std::endl;
1000 }
1001
1002 double MG_GESTIONNAIRE::get_version_fichier(void)
1003 {
1004 return version_fichier;
1005 }
1006
1007
1008 std::ostream& operator << (std::ostream& o,MG_GESTIONNAIRE& gest)
1009 {
1010 gest.enregistrer(o,VERSIONFICHIER);
1011 return o;
1012 }
1013