0026256: FSD_File and FSD_CmpFile are almost twins.
[occt.git] / src / FSD / FSD_File.hxx
1 // Created on: 1996-11-29
2 // Created by: Christophe LEYNADIER
3 // Copyright (c) 1996-1999 Matra Datavision
4 // Copyright (c) 1999-2014 OPEN CASCADE SAS
5 //
6 // This file is part of Open CASCADE Technology software library.
7 //
8 // This library is free software; you can redistribute it and/or modify it under
9 // the terms of the GNU Lesser General Public License version 2.1 as published
10 // by the Free Software Foundation, with special exception defined in the file
11 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
12 // distribution for complete text of the license and disclaimer of any warranty.
13 //
14 // Alternatively, this file may be used under the terms of Open CASCADE
15 // commercial license or contractual agreement.
16
17 #ifndef _FSD_File_HeaderFile
18 #define _FSD_File_HeaderFile
19
20 #include <Standard.hxx>
21 #include <Standard_DefineAlloc.hxx>
22 #include <Standard_Handle.hxx>
23
24 #include <FSD_FStream.hxx>
25 #include <Storage_BaseDriver.hxx>
26 #include <Storage_Error.hxx>
27 #include <Storage_OpenMode.hxx>
28 #include <Standard_Boolean.hxx>
29 #include <Storage_Position.hxx>
30 #include <Standard_Integer.hxx>
31 #include <TColStd_SequenceOfAsciiString.hxx>
32 #include <TColStd_SequenceOfExtendedString.hxx>
33 #include <Standard_Character.hxx>
34 #include <Standard_ExtCharacter.hxx>
35 #include <Standard_Real.hxx>
36 #include <Standard_ShortReal.hxx>
37 #include <Standard_Size.hxx>
38 #include <Standard_CString.hxx>
39 class Storage_StreamTypeMismatchError;
40 class Storage_StreamFormatError;
41 class Storage_StreamWriteError;
42 class Storage_StreamExtCharParityError;
43 class TCollection_AsciiString;
44 class TCollection_ExtendedString;
45 class Storage_BaseDriver;
46
47
48
49 //! A general driver which defines as a file, the
50 //! physical container for data to be stored or retrieved.
51 class FSD_File  : public Storage_BaseDriver
52 {
53 public:
54
55   DEFINE_STANDARD_ALLOC
56
57   
58
59   //! Constructs a driver defining as a file, the physical
60   //! container for data to be stored or retrieved.
61   //! Use the function Open to give the name of the driven file.
62   Standard_EXPORT FSD_File();
63   
64
65   //! Assigns as aName the name of the file to be
66   //! driven by this driver. aMode precises if the file is
67   //! opened in read or write mode.
68   //! The function returns Storage_VSOk if the file
69   //! is opened correctly, or any other value of the
70   //! Storage_Error enumeration which specifies the problem encountered.
71   Standard_EXPORT virtual Storage_Error Open (const TCollection_AsciiString& aName, const Storage_OpenMode aMode);
72   
73   Standard_EXPORT virtual Standard_Boolean IsEnd();
74   
75   //! return position in the file. Return -1 upon error.
76   Standard_EXPORT virtual Storage_Position Tell();
77   
78   Standard_EXPORT static Storage_Error IsGoodFileType (const TCollection_AsciiString& aName);
79   
80   Standard_EXPORT virtual Storage_Error BeginWriteInfoSection();
81   
82   Standard_EXPORT virtual void WriteInfo (const Standard_Integer nbObj, const TCollection_AsciiString& dbVersion, const TCollection_AsciiString& date, const TCollection_AsciiString& schemaName, const TCollection_AsciiString& schemaVersion, const TCollection_ExtendedString& appName, const TCollection_AsciiString& appVersion, const TCollection_ExtendedString& objectType, const TColStd_SequenceOfAsciiString& userInfo);
83   
84   Standard_EXPORT virtual Storage_Error EndWriteInfoSection();
85   
86   Standard_EXPORT virtual Storage_Error BeginReadInfoSection();
87   
88   Standard_EXPORT virtual void ReadInfo (Standard_Integer& nbObj, TCollection_AsciiString& dbVersion, TCollection_AsciiString& date, TCollection_AsciiString& schemaName, TCollection_AsciiString& schemaVersion, TCollection_ExtendedString& appName, TCollection_AsciiString& appVersion, TCollection_ExtendedString& objectType, TColStd_SequenceOfAsciiString& userInfo);
89
90   Standard_EXPORT virtual void ReadCompleteInfo (Standard_IStream& theIStream, Handle(Storage_Data)& theData);
91   
92   Standard_EXPORT virtual Storage_Error EndReadInfoSection();
93   
94   Standard_EXPORT virtual Storage_Error BeginWriteCommentSection();
95   
96   Standard_EXPORT virtual void WriteComment (const TColStd_SequenceOfExtendedString& userComments);
97   
98   Standard_EXPORT virtual Storage_Error EndWriteCommentSection();
99   
100   Standard_EXPORT virtual Storage_Error BeginReadCommentSection();
101   
102   Standard_EXPORT virtual void ReadComment (TColStd_SequenceOfExtendedString& userComments);
103   
104   Standard_EXPORT virtual Storage_Error EndReadCommentSection();
105   
106   Standard_EXPORT virtual Storage_Error BeginWriteTypeSection();
107   
108   Standard_EXPORT virtual void SetTypeSectionSize (const Standard_Integer aSize);
109   
110   Standard_EXPORT virtual void WriteTypeInformations (const Standard_Integer typeNum, const TCollection_AsciiString& typeName);
111   
112   Standard_EXPORT virtual Storage_Error EndWriteTypeSection();
113   
114   Standard_EXPORT virtual Storage_Error BeginReadTypeSection();
115   
116   Standard_EXPORT virtual Standard_Integer TypeSectionSize();
117   
118   Standard_EXPORT virtual void ReadTypeInformations (Standard_Integer& typeNum, TCollection_AsciiString& typeName);
119   
120   Standard_EXPORT virtual Storage_Error EndReadTypeSection();
121   
122   Standard_EXPORT virtual Storage_Error BeginWriteRootSection();
123   
124   Standard_EXPORT virtual void SetRootSectionSize (const Standard_Integer aSize);
125   
126   Standard_EXPORT virtual void WriteRoot (const TCollection_AsciiString& rootName, const Standard_Integer aRef, const TCollection_AsciiString& aType);
127   
128   Standard_EXPORT virtual Storage_Error EndWriteRootSection();
129   
130   Standard_EXPORT virtual Storage_Error BeginReadRootSection();
131   
132   Standard_EXPORT virtual Standard_Integer RootSectionSize();
133   
134   Standard_EXPORT virtual void ReadRoot (TCollection_AsciiString& rootName, Standard_Integer& aRef, TCollection_AsciiString& aType);
135   
136   Standard_EXPORT virtual Storage_Error EndReadRootSection();
137   
138   Standard_EXPORT virtual Storage_Error BeginWriteRefSection();
139   
140   Standard_EXPORT virtual void SetRefSectionSize (const Standard_Integer aSize);
141   
142   Standard_EXPORT virtual void WriteReferenceType (const Standard_Integer reference, const Standard_Integer typeNum);
143   
144   Standard_EXPORT virtual Storage_Error EndWriteRefSection();
145   
146   Standard_EXPORT virtual Storage_Error BeginReadRefSection();
147   
148   Standard_EXPORT virtual Standard_Integer RefSectionSize();
149   
150   Standard_EXPORT virtual void ReadReferenceType (Standard_Integer& reference, Standard_Integer& typeNum);
151   
152   Standard_EXPORT virtual Storage_Error EndReadRefSection();
153   
154   Standard_EXPORT virtual Storage_Error BeginWriteDataSection();
155   
156   Standard_EXPORT virtual void WritePersistentObjectHeader (const Standard_Integer aRef, const Standard_Integer aType);
157   
158   Standard_EXPORT virtual void BeginWritePersistentObjectData();
159   
160   Standard_EXPORT virtual void BeginWriteObjectData();
161   
162   Standard_EXPORT virtual void EndWriteObjectData();
163   
164   Standard_EXPORT virtual void EndWritePersistentObjectData();
165   
166   Standard_EXPORT virtual Storage_Error EndWriteDataSection();
167   
168   Standard_EXPORT virtual Storage_Error BeginReadDataSection();
169   
170   Standard_EXPORT virtual void ReadPersistentObjectHeader (Standard_Integer& aRef, Standard_Integer& aType);
171   
172   Standard_EXPORT virtual void BeginReadPersistentObjectData();
173   
174   Standard_EXPORT virtual void BeginReadObjectData();
175   
176   Standard_EXPORT virtual void EndReadObjectData();
177   
178   Standard_EXPORT virtual void EndReadPersistentObjectData();
179   
180   Standard_EXPORT virtual Storage_Error EndReadDataSection();
181   
182   Standard_EXPORT virtual void SkipObject();
183   
184   Standard_EXPORT virtual Storage_BaseDriver& PutReference (const Standard_Integer aValue);
185   
186   Standard_EXPORT virtual Storage_BaseDriver& PutCharacter (const Standard_Character aValue);
187
188   Storage_BaseDriver& operator << (const Standard_Character aValue)
189   {
190     return PutCharacter(aValue);
191   }
192   
193   Standard_EXPORT virtual Storage_BaseDriver& PutExtCharacter (const Standard_ExtCharacter aValue);
194   Storage_BaseDriver& operator << (const Standard_ExtCharacter aValue)
195   {
196     return PutExtCharacter(aValue);
197   }
198   
199   Standard_EXPORT virtual Storage_BaseDriver& PutInteger (const Standard_Integer aValue);
200   Storage_BaseDriver& operator << (const Standard_Integer aValue)
201   {
202     return PutInteger(aValue);
203   }
204   
205   Standard_EXPORT virtual Storage_BaseDriver& PutBoolean (const Standard_Boolean aValue);
206   Storage_BaseDriver& operator << (const Standard_Boolean aValue)
207   {
208     return PutBoolean(aValue);
209   }
210   
211   Standard_EXPORT virtual Storage_BaseDriver& PutReal (const Standard_Real aValue);
212   Storage_BaseDriver& operator << (const Standard_Real aValue)
213   {
214     return PutReal(aValue);
215   }
216   
217   Standard_EXPORT virtual Storage_BaseDriver& PutShortReal (const Standard_ShortReal aValue);
218   Storage_BaseDriver& operator << (const Standard_ShortReal aValue)
219   {
220     return PutShortReal(aValue);
221   }
222   
223   Standard_EXPORT virtual Storage_BaseDriver& GetReference (Standard_Integer& aValue);
224   
225   Standard_EXPORT virtual Storage_BaseDriver& GetCharacter (Standard_Character& aValue);
226   Storage_BaseDriver& operator >> (Standard_Character& aValue)
227   {
228     return GetCharacter(aValue);
229   }
230   
231   Standard_EXPORT virtual Storage_BaseDriver& GetExtCharacter (Standard_ExtCharacter& aValue);
232   Storage_BaseDriver& operator >> (Standard_ExtCharacter& aValue)
233   {
234     return GetExtCharacter(aValue);
235   }
236   
237   Standard_EXPORT virtual Storage_BaseDriver& GetInteger (Standard_Integer& aValue);
238   Storage_BaseDriver& operator >> (Standard_Integer& aValue)
239   {
240     return GetInteger(aValue);
241   }
242   
243   Standard_EXPORT virtual Storage_BaseDriver& GetBoolean (Standard_Boolean& aValue);
244   Storage_BaseDriver& operator >> (Standard_Boolean& aValue)
245   {
246     return GetBoolean(aValue);
247   }
248   
249   Standard_EXPORT virtual Storage_BaseDriver& GetReal (Standard_Real& aValue);
250   Storage_BaseDriver& operator >> (Standard_Real& aValue)
251   {
252     return GetReal(aValue);
253   }
254   
255   Standard_EXPORT virtual Storage_BaseDriver& GetShortReal (Standard_ShortReal& aValue);
256   Storage_BaseDriver& operator >> (Standard_ShortReal& aValue)
257   {
258     return GetShortReal(aValue);
259   }
260   
261
262   //! Closes the file driven by this driver. This file was
263   //! opened by the last call to the function Open.
264   //! The function returns Storage_VSOk if the
265   //! closure is correctly done, or any other value of
266   //! the Storage_Error enumeration which specifies the problem encountered.
267   Standard_EXPORT virtual Storage_Error Close();
268   
269   Standard_EXPORT void Destroy();
270 ~FSD_File()
271 {
272   Destroy();
273 }
274
275   Standard_EXPORT static Standard_CString MagicNumber();
276
277
278   protected:
279
280   
281   //! read from the current position to the end of line.
282   Standard_EXPORT virtual void ReadLine (TCollection_AsciiString& buffer);
283   
284   //! read from the current position to the next white space or end of line.
285   Standard_EXPORT virtual void ReadWord (TCollection_AsciiString& buffer);
286   
287   //! read extended chars (unicode) from the current position to the end of line.
288   Standard_EXPORT virtual void ReadExtendedLine (TCollection_ExtendedString& buffer);
289   
290   //! write from the current position to the end of line.
291   Standard_EXPORT virtual void WriteExtendedLine (const TCollection_ExtendedString& buffer);
292   
293   //! read <rsize> character from the current position.
294   Standard_EXPORT virtual void ReadChar (TCollection_AsciiString& buffer, const Standard_Size rsize);
295   
296   //! read from the first none space character position to the end of line.
297   Standard_EXPORT virtual void ReadString (TCollection_AsciiString& buffer);
298   
299   Standard_EXPORT virtual void FlushEndOfLine();
300   
301   Standard_EXPORT virtual Storage_Error FindTag (const Standard_CString aTag);
302
303
304   FSD_FStream myStream;
305 };
306
307 #endif // _FSD_File_HeaderFile