1 // Created on: 1996-11-25
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 _Storage_BaseDriver_HeaderFile
18 #define _Storage_BaseDriver_HeaderFile
19 
20 #include <Standard_Type.hxx>
21 
22 #include <Storage_OpenMode.hxx>
23 #include <Storage_Error.hxx>
24 #include <Storage_Data.hxx>
25 #include <Storage_Position.hxx>
26 #include <TCollection_AsciiString.hxx>
27 #include <TColStd_SequenceOfAsciiString.hxx>
28 #include <TColStd_SequenceOfExtendedString.hxx>
29 
30 class Storage_StreamTypeMismatchError;
31 class Storage_StreamFormatError;
32 class Storage_StreamWriteError;
33 class Storage_StreamExtCharParityError;
34 class TCollection_AsciiString;
35 class TCollection_ExtendedString;
36 
37 DEFINE_STANDARD_HANDLE(Storage_BaseDriver,Standard_Transient)
38 
39 //! Root class for drivers. A driver assigns a physical container
40 //! to data to be stored or retrieved, for instance a file.
41 //! The FSD package provides two derived concrete classes :
42 //! -   FSD_File is a general driver which defines a
43 //! file as the container of data.
44 class Storage_BaseDriver : public Standard_Transient
45 {
46 public:
47   DEFINE_STANDARD_RTTIEXT(Storage_BaseDriver,Standard_Transient)
48 
49 public:
50 
51   Standard_EXPORT virtual ~Storage_BaseDriver();
52 
Name() const53   TCollection_AsciiString Name() const { return myName; }
54 
OpenMode() const55   Storage_OpenMode OpenMode() const { return myOpenMode; }
56 
57   Standard_EXPORT static TCollection_AsciiString ReadMagicNumber(Standard_IStream& theIStream);
58 
59 public:
60   //!@name Virtual methods, to be provided by descendants
61 
62   Standard_EXPORT virtual Storage_Error Open (const TCollection_AsciiString& aName, const Storage_OpenMode aMode) = 0;
63 
64   //! returns True if we are at end of the stream
65   Standard_EXPORT virtual Standard_Boolean IsEnd() = 0;
66 
67   //! return position in the file. Return -1 upon error.
68   Standard_EXPORT virtual Storage_Position Tell() = 0;
69 
70   Standard_EXPORT virtual Storage_Error BeginWriteInfoSection() = 0;
71 
72   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) = 0;
73 
74   Standard_EXPORT virtual Storage_Error EndWriteInfoSection() = 0;
75 
76   Standard_EXPORT virtual Storage_Error BeginReadInfoSection() = 0;
77 
78   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) = 0;
79 
80   Standard_EXPORT virtual void ReadCompleteInfo (Standard_IStream& theIStream, Handle(Storage_Data)& theData) = 0;
81 
82   Standard_EXPORT virtual Storage_Error EndReadInfoSection() = 0;
83 
84   Standard_EXPORT virtual Storage_Error BeginWriteCommentSection() = 0;
85 
86   Standard_EXPORT virtual void WriteComment (const TColStd_SequenceOfExtendedString& userComments) = 0;
87 
88   Standard_EXPORT virtual Storage_Error EndWriteCommentSection() = 0;
89 
90   Standard_EXPORT virtual Storage_Error BeginReadCommentSection() = 0;
91 
92   Standard_EXPORT virtual void ReadComment (TColStd_SequenceOfExtendedString& userComments) = 0;
93 
94   Standard_EXPORT virtual Storage_Error EndReadCommentSection() = 0;
95 
96   Standard_EXPORT virtual Storage_Error BeginWriteTypeSection() = 0;
97 
98   Standard_EXPORT virtual void SetTypeSectionSize (const Standard_Integer aSize) = 0;
99 
100   Standard_EXPORT virtual void WriteTypeInformations (const Standard_Integer typeNum, const TCollection_AsciiString& typeName) = 0;
101 
102   Standard_EXPORT virtual Storage_Error EndWriteTypeSection() = 0;
103 
104   Standard_EXPORT virtual Storage_Error BeginReadTypeSection() = 0;
105 
106   Standard_EXPORT virtual Standard_Integer TypeSectionSize() = 0;
107 
108   Standard_EXPORT virtual void ReadTypeInformations (Standard_Integer& typeNum, TCollection_AsciiString& typeName) = 0;
109 
110   Standard_EXPORT virtual Storage_Error EndReadTypeSection() = 0;
111 
112   Standard_EXPORT virtual Storage_Error BeginWriteRootSection() = 0;
113 
114   Standard_EXPORT virtual void SetRootSectionSize (const Standard_Integer aSize) = 0;
115 
116   Standard_EXPORT virtual void WriteRoot (const TCollection_AsciiString& rootName, const Standard_Integer aRef, const TCollection_AsciiString& aType) = 0;
117 
118   Standard_EXPORT virtual Storage_Error EndWriteRootSection() = 0;
119 
120   Standard_EXPORT virtual Storage_Error BeginReadRootSection() = 0;
121 
122   Standard_EXPORT virtual Standard_Integer RootSectionSize() = 0;
123 
124   Standard_EXPORT virtual void ReadRoot (TCollection_AsciiString& rootName, Standard_Integer& aRef, TCollection_AsciiString& aType) = 0;
125 
126   Standard_EXPORT virtual Storage_Error EndReadRootSection() = 0;
127 
128   Standard_EXPORT virtual Storage_Error BeginWriteRefSection() = 0;
129 
130   Standard_EXPORT virtual void SetRefSectionSize (const Standard_Integer aSize) = 0;
131 
132   Standard_EXPORT virtual void WriteReferenceType (const Standard_Integer reference, const Standard_Integer typeNum) = 0;
133 
134   Standard_EXPORT virtual Storage_Error EndWriteRefSection() = 0;
135 
136   Standard_EXPORT virtual Storage_Error BeginReadRefSection() = 0;
137 
138   Standard_EXPORT virtual Standard_Integer RefSectionSize() = 0;
139 
140   Standard_EXPORT virtual void ReadReferenceType (Standard_Integer& reference, Standard_Integer& typeNum) = 0;
141 
142   Standard_EXPORT virtual Storage_Error EndReadRefSection() = 0;
143 
144   Standard_EXPORT virtual Storage_Error BeginWriteDataSection() = 0;
145 
146   Standard_EXPORT virtual void WritePersistentObjectHeader (const Standard_Integer aRef, const Standard_Integer aType) = 0;
147 
148   Standard_EXPORT virtual void BeginWritePersistentObjectData() = 0;
149 
150   Standard_EXPORT virtual void BeginWriteObjectData() = 0;
151 
152   Standard_EXPORT virtual void EndWriteObjectData() = 0;
153 
154   Standard_EXPORT virtual void EndWritePersistentObjectData() = 0;
155 
156   Standard_EXPORT virtual Storage_Error EndWriteDataSection() = 0;
157 
158   Standard_EXPORT virtual Storage_Error BeginReadDataSection() = 0;
159 
160   Standard_EXPORT virtual void ReadPersistentObjectHeader (Standard_Integer& aRef, Standard_Integer& aType) = 0;
161 
162   Standard_EXPORT virtual void BeginReadPersistentObjectData() = 0;
163 
164   Standard_EXPORT virtual void BeginReadObjectData() = 0;
165 
166   Standard_EXPORT virtual void EndReadObjectData() = 0;
167 
168   Standard_EXPORT virtual void EndReadPersistentObjectData() = 0;
169 
170   Standard_EXPORT virtual Storage_Error EndReadDataSection() = 0;
171 
172   Standard_EXPORT virtual void SkipObject() = 0;
173 
174   Standard_EXPORT virtual Storage_Error Close() = 0;
175 
176 public:
177   //!@name Output methods
178 
179   Standard_EXPORT virtual Storage_BaseDriver& PutReference (const Standard_Integer aValue) = 0;
180 
181   Standard_EXPORT virtual Storage_BaseDriver& PutCharacter (const Standard_Character aValue) = 0;
operator <<(const Standard_Character aValue)182   Storage_BaseDriver& operator << (const Standard_Character aValue)
183   {
184     return PutCharacter(aValue);
185   }
186 
187   Standard_EXPORT virtual Storage_BaseDriver& PutExtCharacter(const Standard_ExtCharacter aValue) = 0;
operator <<(const Standard_ExtCharacter aValue)188   Storage_BaseDriver& operator << (const Standard_ExtCharacter aValue)
189   {
190     return PutExtCharacter(aValue);
191   }
192 
193   Standard_EXPORT virtual Storage_BaseDriver& PutInteger(const Standard_Integer aValue) = 0;
operator <<(const Standard_Integer aValue)194   Storage_BaseDriver& operator << (const Standard_Integer aValue)
195   {
196     return PutInteger(aValue);
197   }
198 
199   Standard_EXPORT virtual Storage_BaseDriver& PutBoolean(const Standard_Boolean aValue) = 0;
operator <<(const Standard_Boolean aValue)200   Storage_BaseDriver& operator << (const Standard_Boolean aValue)
201   {
202     return PutBoolean(aValue);
203   }
204 
205   Standard_EXPORT virtual Storage_BaseDriver& PutReal(const Standard_Real aValue) = 0;
operator <<(const Standard_Real aValue)206   Storage_BaseDriver& operator << (const Standard_Real aValue)
207   {
208     return PutReal(aValue);
209   }
210 
211   Standard_EXPORT virtual Storage_BaseDriver& PutShortReal(const Standard_ShortReal aValue) = 0;
operator <<(const Standard_ShortReal aValue)212   Storage_BaseDriver& operator << (const Standard_ShortReal aValue)
213   {
214     return PutShortReal(aValue);
215   }
216 
217 public:
218   //!@name Input methods
219 
220   Standard_EXPORT virtual Storage_BaseDriver& GetReference (Standard_Integer& aValue) = 0;
221 
222   Standard_EXPORT virtual Storage_BaseDriver& GetCharacter (Standard_Character& aValue) = 0;
operator >>(Standard_Character & aValue)223   Storage_BaseDriver& operator >> (Standard_Character& aValue)
224   {
225     return GetCharacter(aValue);
226   }
227 
228   Standard_EXPORT virtual Storage_BaseDriver& GetExtCharacter(Standard_ExtCharacter& aValue) = 0;
operator >>(Standard_ExtCharacter & aValue)229   Storage_BaseDriver& operator >> (Standard_ExtCharacter& aValue)
230   {
231     return GetExtCharacter(aValue);
232   }
233 
234   Standard_EXPORT virtual Storage_BaseDriver& GetInteger(Standard_Integer& aValue) = 0;
operator >>(Standard_Integer & aValue)235   Storage_BaseDriver& operator >> (Standard_Integer& aValue)
236   {
237     return GetInteger(aValue);
238   }
239 
240   Standard_EXPORT virtual Storage_BaseDriver& GetBoolean(Standard_Boolean& aValue) = 0;
operator >>(Standard_Boolean & aValue)241   Storage_BaseDriver& operator >> (Standard_Boolean& aValue)
242   {
243     return GetBoolean(aValue);
244   }
245 
246   Standard_EXPORT virtual Storage_BaseDriver& GetReal(Standard_Real& aValue) = 0;
operator >>(Standard_Real & aValue)247   Storage_BaseDriver& operator >> (Standard_Real& aValue)
248   {
249     return GetReal(aValue);
250   }
251 
252   Standard_EXPORT virtual Storage_BaseDriver& GetShortReal(Standard_ShortReal& aValue) = 0;
operator >>(Standard_ShortReal & aValue)253   Storage_BaseDriver& operator >> (Standard_ShortReal& aValue)
254   {
255     return GetShortReal(aValue);
256   }
257 
258 protected:
259 
260   Standard_EXPORT Storage_BaseDriver();
261 
SetName(const TCollection_AsciiString & aName)262   void SetName(const TCollection_AsciiString& aName) { myName = aName; }
263 
SetOpenMode(const Storage_OpenMode aMode)264   void SetOpenMode(const Storage_OpenMode aMode) { myOpenMode = aMode; }
265 
266 private:
267 
268   Storage_OpenMode myOpenMode;
269   TCollection_AsciiString myName;
270 };
271 
272 #endif // _Storage_BaseDriver_HeaderFile
273