ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/outil/src/tpl_map_entite.h
Revision: 879
Committed: Fri Mar 31 20:53:22 2017 UTC (8 years, 2 months ago) by francois
Content type: text/plain
Original Path: magic/lib/template/src/tpl_map_entite.h
File size: 4334 byte(s)
Log Message:
mailleur d'une coquille mince. Des exe arriveront plus tard

File Contents

# User Rev Content
1 5 //------------------------------------------------------------
2     //------------------------------------------------------------
3     // MAGiC
4 francois 195 // Jean Christophe Cuilli�re et Vincent FRANCOIS
5     // D�partement de G�nie M�canique - UQTR
6 5 //------------------------------------------------------------
7 francois 195 // 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 5 // des auteurs (contact : francois@uqtr.ca)
12     //------------------------------------------------------------
13     //------------------------------------------------------------
14     //
15     // tpl_map_entite.h
16     //
17     //------------------------------------------------------------
18     //------------------------------------------------------------
19     // COPYRIGHT 2000
20 francois 195 // Version du 02/03/2006 � 11H24
21 5 //------------------------------------------------------------
22     //------------------------------------------------------------
23     #ifndef _TPLMAPENTITE_
24     #define _TPLMAPENTITE_
25    
26     #include <stdio.h>
27    
28    
29     #ifdef BORLANDCPP
30     #include <map.h>
31     #else
32     #include <map>
33     #endif
34    
35     template <class X>
36     class TPL_MAP_ENTITE
37     {
38     public:
39     typedef typename std::map<unsigned long,X,std::less<unsigned long> >::iterator ITERATEUR;
40    
41     TPL_MAP_ENTITE() {};
42     virtual ~TPL_MAP_ENTITE() {};
43    
44     /*
45     syntaxe :
46     TPL_MAP_ENTITE<MG_ELEMENT_MAILLAGE*> liste;
47     TPL_MAP_ENTITE<MG_ELEMENT_MAILLAGE*>::ITERATEUR it;
48     MG_ELEMENT_MAILLAGE* element;
49     for (element = liste.get_premier(it); element; element = liste.get_suivant(it) )
50     {
51     printf("element id = %d", element->get_id());
52     }
53     */
54    
55    
56     virtual void ajouter(X x)
57     {
58     typename std::pair<const unsigned long,X> tmp(x->get_id(),x);
59     lst_X.insert(tmp);
60     };
61    
62 francois 195 virtual int existe(X x)
63     {
64     typename std::map<unsigned long,X,std::less<unsigned long> >::iterator j=lst_X.find(x->get_id());
65     if (j!=lst_X.end()) return 1;
66     return 0;
67     };
68 5
69    
70     virtual void supprimer(X x)
71     {
72     typename std::map<unsigned long,X,std::less<unsigned long> >::iterator j=lst_X.find(x->get_id());
73     if (j==lst_X.end())
74     {
75     ITERATEUR it;
76     return;
77     }
78     lst_X.erase(j);
79     };
80    
81    
82    
83    
84    
85     virtual int get_nb(void)
86     {
87     return lst_X.size();
88     };
89    
90    
91     virtual X get(int num)
92     {
93     typename std::map<unsigned long,X,std::less<unsigned long> >::iterator j=lst_X.begin();
94     for (int i=0;i<num;i++) j++;
95     return ((*j).second);
96     };
97    
98     virtual X getid(unsigned long num)
99     {
100     typename std::map<unsigned long,X,std::less<unsigned long> >::iterator j=lst_X.find(num);
101     if (j==lst_X.end())
102     {
103     return NULL;
104     }
105     return ((*j).second);
106     };
107    
108     virtual void vide(void)
109     {
110     lst_X.clear();
111     };
112    
113    
114     virtual X get_premier(ITERATEUR &it)
115     {
116     it = lst_X.begin();
117     if (it == lst_X.end())
118     return NULL;
119     return it->second ;
120     };
121    
122     virtual X get_suivant(ITERATEUR &it)
123     {
124     it++;
125     if(it==lst_X.end())
126     {
127     return NULL;
128     }
129     return it->second;
130     }
131    
132     virtual X get(ITERATEUR & it)
133     {
134     if (it == lst_X.end())
135     return NULL;
136    
137     return it->second;
138     }
139    
140 francois 879
141     virtual X premier_commun(TPL_MAP_ENTITE<X> &lst2,ITERATEUR & it1,ITERATEUR & it2)
142     {
143     X suiv2;
144     it1=lst_X.begin();
145     suiv2=lst2.get_premier(it2);
146     int ok=0;
147     X rep=NULL;
148     if (it1==lst_X.end()) ok=1;
149     if (suiv2==NULL) ok=1;
150     while (ok==0)
151     {
152     unsigned long id1=it1->first;
153     unsigned long id2=it2->first;
154     if (id2==id1)
155     {
156     rep=it1->second;
157     ok=1;
158     }
159     else if (id2<id1) suiv2=get_suivant(it2);
160     else if (id2>id1) it1++;
161     if (it1==lst_X.end()) ok=1;
162     if (suiv2==NULL) ok=1;
163     }
164     return rep;
165     }
166    
167     virtual X suivant_commun(TPL_MAP_ENTITE<X> &lst2,ITERATEUR & it1,ITERATEUR & it2)
168     {
169     X suiv2;
170     it1++;
171     suiv2=lst2.get_suivant(it2);
172     int ok=0;
173     X rep=NULL;
174     if (it1==lst_X.end()) ok=1;
175     if (suiv2==NULL) ok=1;
176     while (ok==0)
177     {
178     unsigned long id1=it1->first;
179     unsigned long id2=it2->first;
180     if (id2==id1)
181     {
182     rep=it1->second;
183     ok=1;
184     }
185     else if (id2<id1) suiv2=get_suivant(it2);
186     else if (id2>id1) it1++;
187     if (it1==lst_X.end()) ok=1;
188     if (suiv2==NULL) ok=1;
189     }
190     return rep;
191     }
192    
193    
194    
195 5 private:
196     typename std::map<unsigned long,X,std::less<unsigned long> > lst_X;
197    
198    
199     };
200    
201    
202    
203    
204    
205    
206    
207    
208     #endif