Salome HOME
fix for OS Windows
[tools/medcoupling.git] / src / MEDLoader / libmesh5.hxx
1 #ifndef MESHFORMATPARSER_HXX
2 #define MESHFORMATPARSER_HXX
3 /*----------------------------------------------------------*/
4 /*                                                                                                                      */
5 /*                                              LIBMESH V 5.46                                          */
6 /*                                                                                                                      */
7 /*----------------------------------------------------------*/
8 /*                                                                                                                      */
9 /*      Description:            handle .meshb file format I/O           */
10 /*      Author:                         Loic MARECHAL                                           */
11 /*      Creation date:          feb 16 2007                                                     */
12 /*      Last modification:      dec 12 2020                                                     */
13 /*                                                                                                                      */
14 /*----------------------------------------------------------*/
15
16
17 /*----------------------------------------------------------*/
18 /* Defines                                                                                                      */
19 /*----------------------------------------------------------*/
20
21
22 #define GmfStrSiz 1024
23 #define GmfMaxTyp 1000
24 #define GmfMaxKwd 81
25 #define GmfMshVer 1
26 #define GmfRead 1
27 #define GmfWrite 2
28 #define GmfSca 1
29 #define GmfVec 2
30 #define GmfSymMat 3
31 #define GmfMat 4
32 #define GmfFloat 1
33 #define GmfDouble 2
34
35
36 /*----------------------------------------------------------*/
37 /* Defines                                                                                                      */
38 /*----------------------------------------------------------*/
39
40 #define Asc 1
41 #define Bin 2
42 #define MshFil 4
43 #define SolFil 8
44 #define MaxMsh 100
45 #define InfKwd 1
46 #define RegKwd 2
47 #define SolKwd 3
48 #define WrdSiz 4
49 #define BufSiz 10000
50
51
52 // see MeshGems/Docs/meshgems_formats_description.pdf
53 extern const char* GmfKwdFmt[ GmfMaxKwd + 1 ][4];
54 // occ/24009
55 #include "MEDLoaderDefines.hxx"
56 /*----------------------------------------------------------*/
57 /* Structures                                                                                           */
58 /*----------------------------------------------------------*/
59 namespace  MeshFormat {
60 typedef struct
61 {
62     int typ, SolSiz, NmbWrd, NmbLin, NmbTyp, TypTab[ GmfMaxTyp ];
63     long pos;
64     char fmt[ GmfMaxTyp*9 ];
65 } KwdSct;
66
67 typedef struct
68 {
69     int dim, ver, mod, typ, cod, pos;
70     long NexKwdPos, siz;
71     KwdSct KwdTab[ GmfMaxKwd + 1 ];
72     FILE *hdl;
73     int *IntBuf;
74     float *FltBuf;
75     unsigned char *buf;
76     char FilNam[ GmfStrSiz ];
77     double DblBuf[1000/8];
78     unsigned char blk[ BufSiz + 1000 ];
79 } GmfMshSct;
80
81
82
83
84
85 // see MeshGems/Docs/meshgems_formats_description.pdf
86 enum GmfKwdCod
87 {
88     GmfReserved1, \
89     GmfVersionFormatted, \
90     GmfReserved2, \
91     GmfDimension, \
92     GmfVertices, \
93     GmfEdges, \
94     GmfTriangles, \
95     GmfQuadrilaterals, \
96     GmfTetrahedra, \
97     GmfPrisms, \
98     GmfHexahedra, \
99     GmfIterationsAll, \
100     GmfTimesAll, \
101     GmfCorners, \
102     GmfRidges, \
103     GmfRequiredVertices, \
104     GmfRequiredEdges, \
105     GmfRequiredTriangles, \
106     GmfRequiredQuadrilaterals, \
107     GmfTangentAtEdgeVertices, \
108     GmfNormalAtVertices, \
109     GmfNormalAtTriangleVertices, \
110     GmfNormalAtQuadrilateralVertices, \
111     GmfAngleOfCornerBound, \
112     GmfTrianglesP2, \
113     GmfEdgesP2, \
114     GmfSolAtPyramids, \
115     GmfQuadrilateralsQ2, \
116     GmfISolAtPyramids, \
117     GmfSubDomainFromGeom, \
118     GmfTetrahedraP2, \
119     GmfFault_NearTri, \
120     GmfFault_Inter, \
121     GmfHexahedraQ2, \
122     GmfExtraVerticesAtEdges, \
123     GmfExtraVerticesAtTriangles, \
124     GmfExtraVerticesAtQuadrilaterals, \
125     GmfExtraVerticesAtTetrahedra, \
126     GmfExtraVerticesAtPrisms, \
127     GmfExtraVerticesAtHexahedra, \
128     GmfVerticesOnGeometricVertices, \
129     GmfVerticesOnGeometricEdges, \
130     GmfVerticesOnGeometricTriangles, \
131     GmfVerticesOnGeometricQuadrilaterals, \
132     GmfEdgesOnGeometricEdges, \
133     GmfFault_FreeEdge, \
134     GmfPolyhedra, \
135     GmfPolygons, \
136     GmfFault_Overlap, \
137     GmfPyramids, \
138     GmfBoundingBox, \
139     GmfBody, \
140     GmfPrivateTable, \
141     GmfFault_BadShape, \
142     GmfEnd, \
143     GmfTrianglesOnGeometricTriangles, \
144     GmfTrianglesOnGeometricQuadrilaterals, \
145     GmfQuadrilateralsOnGeometricTriangles, \
146     GmfQuadrilateralsOnGeometricQuadrilaterals, \
147     GmfTangents, \
148     GmfNormals, \
149     GmfTangentAtVertices, \
150     GmfSolAtVertices, \
151     GmfSolAtEdges, \
152     GmfSolAtTriangles, \
153     GmfSolAtQuadrilaterals, \
154     GmfSolAtTetrahedra, \
155     GmfSolAtPrisms, \
156     GmfSolAtHexahedra, \
157     GmfDSolAtVertices, \
158     GmfISolAtVertices, \
159     GmfISolAtEdges, \
160     GmfISolAtTriangles, \
161     GmfISolAtQuadrilaterals, \
162     GmfISolAtTetrahedra, \
163     GmfISolAtPrisms, \
164     GmfISolAtHexahedra, \
165     GmfIterations, \
166     GmfTime, \
167     GmfFault_SmallTri, \
168     GmfCoarseHexahedra, \
169     GmfFault_MultipleEdge
170 };
171
172
173
174 class MeshFormatParser {
175     /*----------------------------------------------------------*/
176     /* External procedures                                                                          */
177     /*----------------------------------------------------------*/
178 public :
179         MEDLOADER_EXPORT MeshFormatParser();
180         MEDLOADER_EXPORT int GmfOpenMesh(const char *, int, ...);
181         MEDLOADER_EXPORT int GmfCloseMesh(int);
182     int GmfStatKwd(int, int, ...);
183     int GmfGotoKwd(int, int);
184         MEDLOADER_EXPORT int GmfSetKwd(int, int, ...);
185     void GmfGetLin(int, int, ...);
186         MEDLOADER_EXPORT void GmfSetLin(int, int, ...);
187 private :
188
189
190     /*----------------------------------------------------------*/
191     /*  private procedures methods                                                       */
192     /*----------------------------------------------------------*/
193
194     void ScaWrd(GmfMshSct *, unsigned char *);
195     void ScaDblWrd(GmfMshSct *, unsigned char *);
196     void ScaBlk(GmfMshSct *, unsigned char *, int);
197     long GetPos(GmfMshSct *);
198     void RecWrd(GmfMshSct *, unsigned char *);
199     void RecDblWrd(GmfMshSct *, unsigned char *);
200     void RecBlk(GmfMshSct *, unsigned char *, int);
201     void SetPos(GmfMshSct *, long);
202     int ScaKwdTab(GmfMshSct *);
203     void ExpFmt(GmfMshSct *, int);
204     void ScaKwdHdr(GmfMshSct *, int);
205
206     void GmfCpyLin(int, int, int);
207
208
209     int GmfIniFlg;
210     GmfMshSct *GmfMshTab[ MaxMsh + 1 ];
211
212
213
214
215
216 };
217
218 }
219 #endif // MESHFORMATPARSER_HXX