1 // Copyright (c) 2015 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 
15 #ifndef _StdPersistent_Naming_HeaderFile
16 #define _StdPersistent_Naming_HeaderFile
17 
18 #include <StdObjMgt_Attribute.hxx>
19 #include <StdObjMgt_Persistent.hxx>
20 #include <StdPersistent_HArray1.hxx>
21 #include <StdLPersistent_HArray1.hxx>
22 #include <StdLPersistent_HString.hxx>
23 
24 #include <TNaming_NamedShape.hxx>
25 #include <TNaming_Naming.hxx>
26 
27 class TNaming_Name;
28 
29 
30 class StdPersistent_Naming
31 {
32 public:
33   class NamedShape : public StdObjMgt_Attribute<TNaming_NamedShape>
34   {
35   public:
36     //! Read persistent data from a file.
Read(StdObjMgt_ReadData & theReadData)37     inline void Read (StdObjMgt_ReadData& theReadData)
38       { theReadData >> myOldShapes >> myNewShapes >> myShapeStatus >> myVersion; }
39     //! Read persistent data from a file.
Write(StdObjMgt_WriteData & theWriteData) const40     inline void Write (StdObjMgt_WriteData& theWriteData) const
41       { theWriteData << myOldShapes << myNewShapes << myShapeStatus << myVersion; }
42     //! Gets persistent child objects
PChildren(StdObjMgt_Persistent::SequenceOfPersistent & theChildren) const43     inline void PChildren(StdObjMgt_Persistent::SequenceOfPersistent& theChildren) const
44     {
45       if (!myOldShapes.IsNull()) theChildren.Append(myOldShapes);
46       if (!myNewShapes.IsNull()) theChildren.Append(myNewShapes);
47     }
48     //! Returns persistent type name
PName() const49     inline Standard_CString PName() const { return "PNaming_NamedShape"; }
50 
51     //! Import transient attribute from the persistent data.
52     void Import (const Handle(TNaming_NamedShape)& theAttribute) const;
53 
54   private:
55     Handle(StdPersistent_HArray1::Shape1) myOldShapes;
56     Handle(StdPersistent_HArray1::Shape1) myNewShapes;
57     Standard_Integer                      myShapeStatus;
58     Standard_Integer                      myVersion;
59   };
60 
61   class Name : public StdObjMgt_Persistent
62   {
63   public:
64     //! Read persistent data from a file.
65     Standard_EXPORT virtual void Read (StdObjMgt_ReadData& theReadData);
66     //! Read persistent data from a file.
67     Standard_EXPORT virtual void Write (StdObjMgt_WriteData& theWriteData) const;
68     //! Gets persistent child objects
PChildren(StdObjMgt_Persistent::SequenceOfPersistent & theChildren) const69     inline void PChildren(StdObjMgt_Persistent::SequenceOfPersistent& theChildren) const
70     {
71       if (!myArgs.IsNull()) theChildren.Append(myArgs);
72       if (!myStop.IsNull()) theChildren.Append(myStop);
73     }
74     //! Returns persistent type name
PName() const75     inline Standard_CString PName() const { return "PNaming_Name"; }
76 
77     //! Import transient object from the persistent data.
78     Standard_EXPORT virtual void Import
79       (TNaming_Name& theName, const Handle(TDF_Data)& theDF) const;
80 
81   private:
82     Standard_Integer                           myType;
83     Standard_Integer                           myShapeType;
84     Handle(StdLPersistent_HArray1::Persistent) myArgs;
85     Handle(StdObjMgt_Persistent)               myStop;
86     Standard_Integer                           myIndex;
87   };
88 
89   class Name_1 : public Name
90   {
91   public:
92     //! Read persistent data from a file.
93     Standard_EXPORT virtual void Read (StdObjMgt_ReadData& theReadData);
94     //! Read persistent data from a file.
95     Standard_EXPORT virtual void Write (StdObjMgt_WriteData& theWriteData) const;
96     //! Gets persistent child objects
PChildren(StdObjMgt_Persistent::SequenceOfPersistent & theChildren) const97     inline void PChildren(StdObjMgt_Persistent::SequenceOfPersistent& theChildren) const
98     {
99       Name::PChildren(theChildren);
100       if (!myContextLabel.IsNull()) theChildren.Append(myContextLabel);
101     }
102     //! Returns persistent type name
PName() const103     inline Standard_CString PName() const { return "PNaming_Name_1"; }
104 
105     //! Import transient object from the persistent data.
106     Standard_EXPORT virtual void Import
107       (TNaming_Name& theName, const Handle(TDF_Data)& theDF) const;
108 
109   private:
110     Handle(StdLPersistent_HString::Ascii) myContextLabel;
111   };
112 
113   class Name_2 : public Name_1
114   {
115   public:
116     //! Read persistent data from a file.
117     Standard_EXPORT virtual void Read (StdObjMgt_ReadData& theReadData);
118     //! Read persistent data from a file.
119     Standard_EXPORT virtual void Write (StdObjMgt_WriteData& theWriteData) const;
120     //! Gets persistent child objects
PChildren(StdObjMgt_Persistent::SequenceOfPersistent & theChildren) const121     inline void PChildren(StdObjMgt_Persistent::SequenceOfPersistent& theChildren) const
122       { Name_1::PChildren(theChildren); }
123     //! Returns persistent type name
PName() const124     inline Standard_CString PName() const { return "PNaming_Name_2"; }
125 
126     //! Import transient object from the persistent data.
127     Standard_EXPORT virtual void Import
128       (TNaming_Name& theName, const Handle(TDF_Data)& theDF) const;
129 
130   private:
131     Standard_Integer myOrientation;
132   };
133 
134   class Naming : public StdObjMgt_Attribute<TNaming_Naming>::SingleRef
135   {
136   public:
137     //! Import transient attribute from the persistent data.
138     Standard_EXPORT virtual void ImportAttribute();
139   };
140 
141   class Naming_1 : public Naming
142   {
143   public:
144     //! Import transient attribute from the persistent data.
145     Standard_EXPORT virtual void ImportAttribute();
146   };
147 
148   typedef Naming Naming_2;
149 };
150 
151 #endif
152