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 #include <StdObjMgt_ReadData.hxx>
15 #include <StdObjMgt_WriteData.hxx>
16 #include <ShapePersistent_HSequence.hxx>
17 
18 
19 template <class SequenceClass>
Read(StdObjMgt_ReadData & theReadData)20 void ShapePersistent_HSequence::node<SequenceClass>::Read
21   (StdObjMgt_ReadData& theReadData)
22 {
23   theReadData >> myPreviuos >> myItem >> myNext;
24 }
25 
26 template <class SequenceClass>
Write(StdObjMgt_WriteData & theWriteData) const27 void ShapePersistent_HSequence::node<SequenceClass>::Write
28   (StdObjMgt_WriteData& theWriteData) const
29 {
30   theWriteData << myPreviuos << myItem << myNext;
31 }
32 
33 template <class SequenceClass>
Read(StdObjMgt_ReadData & theReadData)34 void ShapePersistent_HSequence::instance<SequenceClass>::Read
35   (StdObjMgt_ReadData& theReadData)
36 {
37   theReadData >> myFirst >> myLast >> mySize;
38 }
39 
40 template <class SequenceClass>
Write(StdObjMgt_WriteData & theWriteData) const41 void ShapePersistent_HSequence::instance<SequenceClass>::Write
42   (StdObjMgt_WriteData& theWriteData) const
43 {
44   theWriteData << myFirst << myLast << mySize;
45 }
46 
47 template <class SequenceClass>
Handle(SequenceClass)48 Handle(SequenceClass)
49   ShapePersistent_HSequence::instance<SequenceClass>::Import() const
50 {
51   Handle(SequenceClass) aSequence = new SequenceClass;
52 
53   for (Handle(Node) aNode = myFirst; aNode; aNode = aNode->Next())
54     aSequence->Append (aNode->Item());
55 
56   return aSequence;
57 }
58 
59 template class ShapePersistent_HSequence::node<TColgp_HSequenceOfXYZ>;
60 template class ShapePersistent_HSequence::node<TColgp_HSequenceOfPnt>;
61 template class ShapePersistent_HSequence::node<TColgp_HSequenceOfDir>;
62 template class ShapePersistent_HSequence::node<TColgp_HSequenceOfVec>;
63 
64 template class ShapePersistent_HSequence::instance<TColgp_HSequenceOfXYZ>;
65 template class ShapePersistent_HSequence::instance<TColgp_HSequenceOfPnt>;
66 template class ShapePersistent_HSequence::instance<TColgp_HSequenceOfDir>;
67 template class ShapePersistent_HSequence::instance<TColgp_HSequenceOfVec>;
68 
69 
70 //=======================================================================
71 // XYZ
72 //=======================================================================
73 template<>
74 Standard_CString ShapePersistent_HSequence::instance<TColgp_HSequenceOfXYZ>
PName() const75   ::PName() const { return "PColgp_HSequenceOfXYZ"; }
76 
77 template<>
78 Standard_CString ShapePersistent_HSequence::node<TColgp_HSequenceOfXYZ>
PName() const79   ::PName() const { return "PColgp_SeqNodeOfHSequenceOfXYZ"; }
80 
81 //=======================================================================
82 // Pnt
83 //=======================================================================
84 template<>
85 Standard_CString ShapePersistent_HSequence::instance<TColgp_HSequenceOfPnt>
PName() const86   ::PName() const { return "PColgp_HSequenceOfPnt"; }
87 
88 template<>
89 Standard_CString ShapePersistent_HSequence::node<TColgp_HSequenceOfPnt>
PName() const90   ::PName() const { return "PColgp_SeqNodeOfHSequenceOfPnt"; }
91 
92 //=======================================================================
93 // Dir
94 //=======================================================================
95 template<>
96 Standard_CString ShapePersistent_HSequence::instance<TColgp_HSequenceOfDir>
PName() const97   ::PName() const { return "PColgp_HSequenceOfDir"; }
98 
99 template<>
100 Standard_CString ShapePersistent_HSequence::node<TColgp_HSequenceOfDir>
PName() const101   ::PName() const { return "PColgp_SeqNodeOfHSequenceOffDir"; }
102 
103 //=======================================================================
104 // Vec
105 //=======================================================================
106 template<>
107 Standard_CString ShapePersistent_HSequence::instance<TColgp_HSequenceOfVec>
PName() const108   ::PName() const { return "PColgp_HSequenceOfVec"; }
109 
110 template<>
111 Standard_CString ShapePersistent_HSequence::node<TColgp_HSequenceOfVec>
PName() const112   ::PName() const { return "PColgp_SeqNodeOfHSequenceOfVec"; }
113