48d5ea4b1972c1aaf53d6c0b5feb3d0094c51d59
[occt.git] / src / StdObjMgt / StdObjMgt_WriteData.hxx
1 // Copyright (c) 2017 OPEN CASCADE SAS
2 //
3 // This file is part of Open CASCADE Technology software library.
4 //
5 // This library is free software; you can redistribute it and/or modify it under
6 // the terms of the GNU Lesser General Public License version 2.1 as published
7 // by the Free Software Foundation, with special exception defined in the file
8 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
9 // distribution for complete text of the license and disclaimer of any warranty.
10 //
11 // Alternatively, this file may be used under the terms of Open CASCADE
12 // commercial license or contractual agreement.
13
14 #ifndef _StdObjMgt_WriteData_HeaderFile
15 #define _StdObjMgt_WriteData_HeaderFile
16
17 #include <Standard.hxx>
18 #include <Storage_BaseDriver.hxx>
19
20 class StdObjMgt_Persistent;
21 class Standard_GUID;
22
23 //! Auxiliary data used to write persistent objects to a file.
24 class StdObjMgt_WriteData
25 {
26 public:
27
28   class Object;
29
30   Standard_EXPORT StdObjMgt_WriteData 
31     (Storage_BaseDriver& theDriver);
32
33   Standard_EXPORT void WritePersistentObject
34     (const Handle(StdObjMgt_Persistent)& thePersistent);
35
36   template <class Persistent>
37   StdObjMgt_WriteData& operator << (const Handle(Persistent)& thePersistent)
38   {
39     *myDriver << (thePersistent ? thePersistent->RefNum() : 0);
40     return *this;
41   }
42
43   Standard_EXPORT StdObjMgt_WriteData& operator << (const Handle(StdObjMgt_Persistent)& thePersistent);
44
45   template <class Type>
46   StdObjMgt_WriteData& WriteValue(const Type& theValue)
47   {
48     *myDriver << theValue;
49     return *this;
50   }
51
52   StdObjMgt_WriteData& operator << (const Standard_Character& theValue)
53     { return WriteValue(theValue); }
54   
55   StdObjMgt_WriteData& operator << (const Standard_ExtCharacter& theValue)
56     { return WriteValue(theValue); }
57   
58   StdObjMgt_WriteData& operator << (const Standard_Integer& theValue)
59    { return WriteValue(theValue); }
60   
61   StdObjMgt_WriteData& operator << (const Standard_Boolean& theValue)
62     { return WriteValue(theValue); }
63   
64   StdObjMgt_WriteData& operator << (const Standard_Real& theValue)
65    { return WriteValue(theValue); }
66   
67   StdObjMgt_WriteData& operator << (const Standard_ShortReal& theValue)
68     { return WriteValue(theValue); }
69
70 private:
71   Storage_BaseDriver* myDriver;
72 };
73
74 class StdObjMgt_WriteData::Object
75 {
76 public:
77   Object (StdObjMgt_WriteData& theData) : myWriteData(&theData)
78     { myWriteData->myDriver->BeginWriteObjectData(); }
79   Object (const StdObjMgt_WriteData::Object& theOther) : myWriteData(theOther.myWriteData)
80     { myWriteData->myDriver->BeginWriteObjectData(); }
81
82   ~Object()
83     { myWriteData->myDriver->EndWriteObjectData(); }
84
85   operator StdObjMgt_WriteData& ()
86     { return *myWriteData; }
87
88   template <class Data>
89   StdObjMgt_WriteData& operator << (Data& theData)
90     { return *myWriteData << theData; }
91
92 private:
93   StdObjMgt_WriteData* myWriteData;
94
95   StdObjMgt_WriteData::Object& operator = (const StdObjMgt_WriteData::Object&);
96 };
97
98 Standard_EXPORT StdObjMgt_WriteData& operator <<
99   (StdObjMgt_WriteData::Object theWriteData, const Standard_GUID& theGUID);
100
101 #endif // _StdObjMgt_WriteData_HeaderFile