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_TypeMeshDriver.hxx
1 #ifndef TYPE_MESH_DRIVER_HXX
2 #define TYPE_MESH_DRIVER_HXX
3
4 #include <string>
5 #include <vector>
6
7 #include "MEDMEM_define.hxx"
8 #include "MEDMEM_GenDriver.hxx"
9
10 #include "MEDMEM_STRING.hxx"
11 #include "MEDMEM_Exception.hxx"
12 #include "MEDMEM_Utilities.hxx"
13
14 /*!
15
16   Driver TYPE for MESH.
17
18   Generic part : implement the readopen and close methods.
19   
20 */
21
22
23 namespace MEDMEM {
24 class MESH;
25 class FAMILY;
26 class GROUP;
27 class CONNECTIVITY;
28 class TYPE_MESH_DRIVER : public GENDRIVER
29 {
30 protected:
31   
32   MESH *          _ptrMesh;
33   // A VOIR FILE DESCRIPTEUR ? MED_FR::med_idt _medIdt;
34   string          _meshName;    
35   
36 public :
37
38   /*!
39     Constructor.
40   */
41   TYPE_MESH_DRIVER() ;
42   /*!
43     Constructor.
44   */
45   TYPE_MESH_DRIVER(const string & fileName,  
46                   MESH * ptrMesh, 
47                   med_mode_acces accessMode) ;
48   /*!
49     Copy constructor.
50   */
51   TYPE_MESH_DRIVER(const TYPE_MESH_DRIVER & driver) ;
52
53   /*!
54     Destructor.
55   */
56   virtual ~TYPE_MESH_DRIVER() ;
57
58   void open() throw (MEDEXCEPTION);
59   void close() throw (MEDEXCEPTION);
60
61   virtual void write( void ) const = 0 ;
62   virtual void read ( void ) = 0 ;
63
64   /*!
65     Set the name of the MESH asked in file.
66
67     It could be different than the name of the MESH object.
68   */
69   void   setMeshName(const string & meshName) ;
70   /*!
71     Get the name of the MESH asked in file.
72   */
73   string getMeshName() const ;
74
75 private:
76   virtual GENDRIVER * copy ( void ) const = 0 ;
77
78 };
79
80
81 class TYPE_MESH_RDONLY_DRIVER : public virtual TYPE_MESH_DRIVER
82 {
83  
84 public :
85   
86   /*!
87     Constructor.
88   */
89   TYPE_MESH_RDONLY_DRIVER() ;
90   /*!
91     Constructor.
92   */
93   TYPE_MESH_RDONLY_DRIVER(const string & fileName, MESH * ptrMesh) ;
94   /*!
95     Copy constructor.
96   */
97   TYPE_MESH_RDONLY_DRIVER(const TYPE_MESH_RDONLY_DRIVER & driver) ;
98
99   /*!
100     Destructor.
101   */
102   virtual ~TYPE_MESH_RDONLY_DRIVER() ;
103   
104   /*!
105     Return a MEDEXCEPTION : it is the read-only driver.
106   */
107   void write( void ) const throw (MEDEXCEPTION);
108   /*!
109     Read MESH in the specified file.
110   */
111   void read ( void ) throw (MEDEXCEPTION);
112
113 private:
114  
115   GENDRIVER * copy ( void ) const ;
116
117 };
118
119 /*!
120
121   Driver Med for MESH : Write only.
122
123   Implement write method.
124
125 */
126
127 class TYPE_MESH_WRONLY_DRIVER : public virtual TYPE_MESH_DRIVER {
128   
129 public :
130   
131   /*!
132     Constructor.
133   */
134   TYPE_MESH_WRONLY_DRIVER() ;
135   /*!
136     Constructor.
137   */
138   TYPE_MESH_WRONLY_DRIVER(const string & fileName, MESH * ptrMesh) ;
139   /*!
140     Copy constructor.
141   */
142   TYPE_MESH_WRONLY_DRIVER(const TYPE_MESH_WRONLY_DRIVER & driver) ;
143
144   /*!
145     Destructor.
146   */
147   virtual ~TYPE_MESH_WRONLY_DRIVER() ;
148
149   /*!
150     Write MESH in the specified file.
151   */
152   void write( void ) const throw (MEDEXCEPTION);
153   /*!
154     Return a MEDEXCEPTION : it is the write-only driver.
155   */
156   void read ( void ) throw (MEDEXCEPTION);
157
158 private:
159
160   GENDRIVER * copy ( void ) const ;
161 };
162
163
164 /*!
165
166   Driver TYPE for MESH : Read write.
167   - Use read method from TYPE_MESH_RDONLY_DRIVER
168   - Use write method from TYPE_MESH_WRONLY_DRIVER
169
170 */
171
172 class TYPE_MESH_RDWR_DRIVER : public TYPE_MESH_RDONLY_DRIVER, public TYPE_MESH_WRONLY_DRIVER {
173
174 public :
175
176   /*!
177     Constructor.
178   */
179   TYPE_MESH_RDWR_DRIVER() ;
180   /*!
181     Constructor.
182   */
183   TYPE_MESH_RDWR_DRIVER(const string & fileName, MESH * ptrMesh) ;
184   /*!
185     Copy constructor.
186   */
187   TYPE_MESH_RDWR_DRIVER(const TYPE_MESH_RDWR_DRIVER & driver) ;
188
189   /*!
190     Destructor.
191   */
192   ~TYPE_MESH_RDWR_DRIVER() ;
193
194   /*!
195     Write MESH in the specified file.
196   */
197   void write(void) const throw (MEDEXCEPTION);
198   /*!
199     Read MESH in the specified file.
200   */
201   void read (void) throw (MEDEXCEPTION);
202
203 private:
204   GENDRIVER * copy(void) const ;
205
206 };
207 };
208
209
210 #endif /* TYPE_MESH_DRIVER_HXX */