0031035: Coding - uninitialized class fields reported by Visual Studio Code Analysis
[occt.git] / src / ShapePersistent / ShapePersistent_HSequence.hxx
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 _ShapePersistent_HSequence_HeaderFile
16 #define _ShapePersistent_HSequence_HeaderFile
17
18 #include <Standard_NotImplemented.hxx>
19
20 #include <StdObjMgt_Persistent.hxx>
21 #include <StdObject_gp_Vectors.hxx>
22
23 #include <TColgp_HSequenceOfXYZ.hxx>
24 #include <TColgp_HSequenceOfPnt.hxx>
25 #include <TColgp_HSequenceOfDir.hxx>
26 #include <TColgp_HSequenceOfVec.hxx>
27
28
29 class ShapePersistent_HSequence
30 {
31   template <class SequenceClass>
32   class node : public StdObjMgt_Persistent
33   {
34   public:
35     typedef typename SequenceClass::value_type ItemType;
36
37   public:
38     //! Read persistent data from a file.
39     Standard_EXPORT virtual void Read (StdObjMgt_ReadData& theReadData);
40
41     //! Write persistent data to a file.
42     Standard_EXPORT virtual void Write (StdObjMgt_WriteData& theWriteData) const;
43
44     //! Gets persistent objects
45     virtual void PChildren (SequenceOfPersistent& theChildren) const
46     {
47       theChildren.Append(this->myPreviuos);
48       theChildren.Append(this->myNext);
49     }
50
51     //! Returns persistent type name
52     virtual Standard_CString PName() const
53     {
54       Standard_NotImplemented::Raise("ShapePersistent_HSequence::node::PName - not implemented");
55       return "";
56     }
57
58     const Handle(node)& Previuos() const  { return myPreviuos; } 
59     const Handle(node)& Next()     const  { return myNext; } 
60     const ItemType&     Item()     const  { return myItem; }
61
62   private:
63     Handle(node) myPreviuos;
64     Handle(node) myNext;
65     ItemType     myItem;
66   };
67
68   template <class SequenceClass>
69   class instance : public StdObjMgt_Persistent
70   {
71   public:
72     typedef node<SequenceClass> Node;
73
74   public:
75     //! Empty constructor.
76     instance()
77     : mySize(0)
78     {
79     }
80
81     //! Read persistent data from a file.
82     Standard_EXPORT virtual void Read (StdObjMgt_ReadData& theReadData);
83
84     //! Write persistent data to a file.
85     Standard_EXPORT virtual void Write (StdObjMgt_WriteData& theWriteData) const;
86
87     //! Gets persistent objects
88     virtual void PChildren(SequenceOfPersistent& theChildren) const
89     {
90       theChildren.Append(this->myFirst);
91       theChildren.Append(this->myLast);
92     }
93
94     //! Returns persistent type name
95     virtual Standard_CString PName() const
96     {
97       Standard_NotImplemented::Raise("ShapePersistent_HSequence::instance::PName - not implemented");
98       return "";
99     }
100
101     //! Import transient object from the persistent data.
102     Standard_EXPORT Handle(SequenceClass) Import() const;
103
104   private:
105     Handle(Node)     myFirst;
106     Handle(Node)     myLast;
107     Standard_Integer mySize;
108   };
109
110 public:
111   typedef instance<TColgp_HSequenceOfXYZ> XYZ;
112   typedef instance<TColgp_HSequenceOfPnt> Pnt;
113   typedef instance<TColgp_HSequenceOfDir> Dir;
114   typedef instance<TColgp_HSequenceOfVec> Vec;
115 };
116
117 //=======================================================================
118 // XYZ 
119 //=======================================================================
120 template<>
121 Standard_CString ShapePersistent_HSequence::instance<TColgp_HSequenceOfXYZ>
122   ::PName() const;
123
124 template<>
125 Standard_CString ShapePersistent_HSequence::node<TColgp_HSequenceOfXYZ>
126   ::PName() const;
127
128 //=======================================================================
129 // Pnt 
130 //=======================================================================
131 template<>
132 Standard_CString ShapePersistent_HSequence::instance<TColgp_HSequenceOfPnt>
133   ::PName() const;
134
135 template<>
136 Standard_CString ShapePersistent_HSequence::node<TColgp_HSequenceOfPnt>
137   ::PName() const;
138
139 //=======================================================================
140 // Dir 
141 //=======================================================================
142 template<>
143 Standard_CString ShapePersistent_HSequence::instance<TColgp_HSequenceOfDir>
144   ::PName() const;
145
146 template<>
147 Standard_CString ShapePersistent_HSequence::node<TColgp_HSequenceOfDir>
148   ::PName() const;
149
150 //=======================================================================
151 // Vec 
152 //=======================================================================
153 template<>
154 Standard_CString ShapePersistent_HSequence::instance<TColgp_HSequenceOfVec>
155   ::PName() const;
156
157 template<>
158 Standard_CString ShapePersistent_HSequence::node<TColgp_HSequenceOfVec>
159   ::PName() const;
160
161 #endif