Salome HOME
update after merging trhe branches CEA_V3_0_x, OCC_V3_1_0_a1_x, and the main
[modules/med.git] / src / MEDMEM / MEDMEM_MedMeshDriver.hxx
1 #ifndef MED_MESH_DRIVER_HXX
2 #define MED_MESH_DRIVER_HXX
3
4 #include <string>
5 #include <vector>
6 #include "MEDMEM_define.hxx"
7 #include "MEDMEM_GenDriver.hxx"
8
9 #include "MEDMEM_STRING.hxx"
10 #include "MEDMEM_Exception.hxx"
11 #include "MEDMEM_Utilities.hxx"
12
13 /*!
14
15   Driver Med for MESH.
16
17   Generic part : implement open and close methods.
18
19 */
20
21 namespace MEDMEM {
22 class MESH;
23 class FAMILY;
24 class GROUP;
25 class CONNECTIVITY;
26 class MED_MESH_DRIVER : public GENDRIVER
27 {
28 protected:
29   
30   MESH *   _ptrMesh;
31   string         _meshName;    // const ?
32   int            _meshNum;     // INUTILE ?
33
34
35 public :
36
37   /*!
38     Constructor.
39   */
40   MED_MESH_DRIVER() ;
41   /*!
42     Constructor.
43   */
44   MED_MESH_DRIVER(const string & fileName,  
45                   MESH * ptrMesh, 
46                   MED_EN::med_mode_acces accessMode) ;
47   /*!
48     Copy constructor.
49   */
50   MED_MESH_DRIVER(const MED_MESH_DRIVER & driver) ;
51
52   /*!
53     Destructor.
54   */
55   virtual ~MED_MESH_DRIVER() ;
56
57   virtual void open() = 0;
58   virtual void close() = 0;
59
60   virtual void write( void ) const = 0 ;
61   virtual void read ( void ) = 0 ;
62
63   /*!
64     Set the name of the MESH asked in file.
65
66     It could be different than the name of the MESH object.
67   */
68   virtual void   setMeshName(const string & meshName) ;
69   /*!
70     Get the name of the MESH asked in file.
71   */
72   virtual string getMeshName() const ;
73
74 public:
75   virtual GENDRIVER * copy ( void ) const = 0 ;
76
77 };
78
79 /*!
80
81   Driver Med for MESH : Read only.
82
83   Implement read method.
84
85 */
86
87   class IMED_MESH_RDONLY_DRIVER : public virtual MED_MESH_DRIVER
88 {
89  
90 public :
91   
92   /*!
93     Constructor.
94   */
95   IMED_MESH_RDONLY_DRIVER() ;
96   /*!
97     Constructor.
98   */
99   IMED_MESH_RDONLY_DRIVER(const string & fileName, MESH * ptrMesh) ;
100   /*!
101     Copy constructor.
102   */
103   IMED_MESH_RDONLY_DRIVER(const IMED_MESH_RDONLY_DRIVER & driver) ;
104   
105   // CREER UNE METHODE POUR LIRE LA LISTE DES MAILLAGES .....
106   /*!
107     Return a MEDEXCEPTION : it is the read-only driver.
108   */
109   void write( void ) const;
110
111 protected:
112 //   virtual int getCOORDINATE() = 0 ;
113 //   virtual int getCONNECTIVITY() = 0 ;
114 //   virtual int getFAMILY() = 0 ;
115 //   virtual int getNodalConnectivity(CONNECTIVITY * Connectivity) = 0 ;
116   int getDescendingConnectivity(CONNECTIVITY * Connectivity);
117 //   virtual int getNodesFamiliesNumber(int * MEDArrayNodeFamily) = 0 ;
118 //   virtual int getCellsFamiliesNumber(int** Arrays, CONNECTIVITY* Connectivity, MED_EN::medEntityMesh entity) = 0 ;
119   void updateFamily() ;
120   void buildAllGroups(vector<GROUP*> & Groups, vector<FAMILY*> & Families) ;
121 //   virtual void getGRID () = 0 ;
122
123   friend class MED_MESH_RDONLY_DRIVER;
124
125 };
126
127 /*!
128
129   Driver Med for MESH : Write only.
130
131   Implement write method.
132
133 */
134
135 class IMED_MESH_WRONLY_DRIVER : public virtual MED_MESH_DRIVER {
136   
137 public :
138   
139   /*!
140     Constructor.
141   */
142   IMED_MESH_WRONLY_DRIVER() ;
143   /*!
144     Constructor.
145   */
146   IMED_MESH_WRONLY_DRIVER(const string & fileName, MESH * ptrMesh) ;
147   /*!
148     Copy constructor.
149   */
150   IMED_MESH_WRONLY_DRIVER(const IMED_MESH_WRONLY_DRIVER & driver) ;
151
152   /*!
153     Destructor.
154   */
155   virtual ~IMED_MESH_WRONLY_DRIVER() ;
156
157   /*!
158     Return a MEDEXCEPTION : it is the write-only driver.
159   */
160   void read ( void );
161
162 // protected:
163 //   virtual int writeCoordinates    ()                           const = 0 ;
164 //   virtual int writeConnectivities (MED_EN::medEntityMesh entity)       const = 0 ;
165 //   virtual int writeFamilyNumbers  ()                           const = 0 ;
166 //   virtual int writeFamilies       (vector<FAMILY*> & families) const = 0 ;
167 //   virtual int writeGRID() const = 0 ;
168
169   friend class MED_MESH_WRONLY_DRIVER;
170 };
171
172
173 /*!
174
175   Driver Med for MESH : Read write.
176   - Use read method from MED_MESH_RDONLY_DRIVER
177   - Use write method from MED_MESH_WRONLY_DRIVER
178
179 */
180
181 class IMED_MESH_RDWR_DRIVER : public virtual IMED_MESH_RDONLY_DRIVER, public virtual IMED_MESH_WRONLY_DRIVER {
182
183 public :
184
185   /*!
186     Constructor.
187   */
188   IMED_MESH_RDWR_DRIVER() ;
189   /*!
190     Constructor.
191   */
192   IMED_MESH_RDWR_DRIVER(const string & fileName, MESH * ptrMesh) ;
193   /*!
194     Copy constructor.
195   */
196   IMED_MESH_RDWR_DRIVER(const IMED_MESH_RDWR_DRIVER & driver) ;
197
198   /*!
199     Destructor.
200   */
201   ~IMED_MESH_RDWR_DRIVER() ;
202
203   friend class MED_MESH_RDWR_DRIVER;
204
205 };
206
207 class MED_MESH_RDONLY_DRIVER : public virtual IMED_MESH_RDONLY_DRIVER
208 {
209 public:
210   MED_MESH_RDONLY_DRIVER();
211   MED_MESH_RDONLY_DRIVER(const string & fileName, MESH * ptrMesh);
212   MED_MESH_RDONLY_DRIVER(const MED_MESH_RDONLY_DRIVER & driver);
213   ~MED_MESH_RDONLY_DRIVER();
214   void   setMeshName(const string & meshName);
215   string getMeshName() const;
216   void write( void ) const;
217   void read ( void );
218   void open();
219   void close();
220 protected:
221   GENDRIVER * _concreteMeshDrv;
222 //   int getCOORDINATE();
223 //   int getCONNECTIVITY();
224 //   int getFAMILY();
225 //   int getNodalConnectivity(CONNECTIVITY * Connectivity);
226 //   int getDescendingConnectivity(CONNECTIVITY * Connectivity);
227 //   int getNodesFamiliesNumber(int * MEDArrayNodeFamily);
228 //   int getCellsFamiliesNumber(int** Arrays, CONNECTIVITY* Connectivity, MED_EN::medEntityMesh entity);
229 //   void getGRID ();
230   GENDRIVER * copy ( void ) const;
231 };
232
233 class MED_MESH_WRONLY_DRIVER : public virtual IMED_MESH_WRONLY_DRIVER {
234 public :
235   MED_MESH_WRONLY_DRIVER();
236   MED_MESH_WRONLY_DRIVER(const string & fileName, MESH * ptrMesh);
237   MED_MESH_WRONLY_DRIVER(const MED_MESH_WRONLY_DRIVER & driver);
238   ~MED_MESH_WRONLY_DRIVER();
239   void   setMeshName(const string & meshName);
240   string getMeshName() const;
241   void read ( void );
242   void write( void ) const;
243   void open();
244   void close();
245 protected:
246   GENDRIVER * _concreteMeshDrv;
247 //   int writeCoordinates    ()                           const;
248 //   int writeConnectivities (MED_EN::medEntityMesh entity)       const;
249 //   int writeFamilyNumbers  ()                           const;
250 //   int writeFamilies       (vector<FAMILY*> & families) const;
251 //   int writeGRID() const;
252   GENDRIVER * copy ( void ) const;
253 };
254
255 class MED_MESH_RDWR_DRIVER : public IMED_MESH_RDWR_DRIVER {
256 public :
257   MED_MESH_RDWR_DRIVER();
258   MED_MESH_RDWR_DRIVER(const string & fileName, MESH * ptrMesh);
259   MED_MESH_RDWR_DRIVER(const MED_MESH_RDWR_DRIVER & driver);
260   ~MED_MESH_RDWR_DRIVER();
261   void   setMeshName(const string & meshName);
262   string getMeshName() const;
263   void read ( void );
264   void write( void ) const;
265   void open();
266   void close();
267 protected:
268   GENDRIVER * _concreteMeshDrv;
269 //   int getCOORDINATE();
270 //   int getCONNECTIVITY();
271 //   int getFAMILY();
272 //   int getNodalConnectivity(CONNECTIVITY * Connectivity);
273 //   int getDescendingConnectivity(CONNECTIVITY * Connectivity);
274 //   int getNodesFamiliesNumber(int * MEDArrayNodeFamily);
275 //   int getCellsFamiliesNumber(int** Arrays, CONNECTIVITY* Connectivity, MED_EN::medEntityMesh entity);
276 //   void getGRID ();
277 //   int writeCoordinates    ()                           const;
278 //   int writeConnectivities (MED_EN::medEntityMesh entity)       const;
279 //   int writeFamilyNumbers  ()                           const;
280 //   int writeFamilies       (vector<FAMILY*> & families) const;
281 //   int writeGRID() const;
282   GENDRIVER * copy ( void ) const;
283 };
284
285 };
286
287 #endif /* MED_MESH_DRIVER_HXX */