0031668: Visualization - WebGL sample doesn't work on Emscripten 1.39
[occt.git] / src / TDocStd / TDocStd_XLinkRoot.cxx
1 // Created by: DAUTRY Philippe
2 // Copyright (c) 1997-1999 Matra Datavision
3 // Copyright (c) 1999-2014 OPEN CASCADE SAS
4 //
5 // This file is part of Open CASCADE Technology software library.
6 //
7 // This library is free software; you can redistribute it and/or modify it under
8 // the terms of the GNU Lesser General Public License version 2.1 as published
9 // by the Free Software Foundation, with special exception defined in the file
10 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
11 // distribution for complete text of the license and disclaimer of any warranty.
12 //
13 // Alternatively, this file may be used under the terms of Open CASCADE
14 // commercial license or contractual agreement.
15
16 //              ------------------
17 // Version:     0.0
18 //Version       Date            Purpose
19 //              0.0     Sep 15 1997     Creation
20
21 #include <TDocStd_XLinkRoot.hxx>
22
23 #include <Standard_GUID.hxx>
24 #include <Standard_Type.hxx>
25 #include <TDF_Attribute.hxx>
26 #include <TDF_Data.hxx>
27 #include <TDF_RelocationTable.hxx>
28 #include <TDocStd_XLink.hxx>
29 #include <TDocStd_XLinkIterator.hxx>
30
31 IMPLEMENT_STANDARD_RTTIEXT(TDocStd_XLinkRoot,TDF_Attribute)
32
33 //=======================================================================
34 //             CLASS METHODS
35 //=======================================================================
36 //=======================================================================
37 //function : GetID
38 //purpose  : 
39 //=======================================================================
40 const Standard_GUID& TDocStd_XLinkRoot::GetID() 
41 {
42   static Standard_GUID myID("5d587401-5690-11d1-8940-080009dc3333");
43   return myID;
44 }
45
46
47 //=======================================================================
48 //function : Set
49 //purpose  : CLASS method.
50 //=======================================================================
51
52 Handle(TDocStd_XLinkRoot) TDocStd_XLinkRoot::Set
53 (const Handle(TDF_Data)& aDF) 
54 {
55   Handle(TDocStd_XLinkRoot) xRefRoot;
56   if (!aDF->Root().FindAttribute (TDocStd_XLinkRoot::GetID(),xRefRoot)) {
57     xRefRoot = new TDocStd_XLinkRoot;
58     aDF->Root().AddAttribute(xRefRoot);
59   }
60   return xRefRoot;
61 }
62
63
64 //=======================================================================
65 //function : Insert
66 //purpose  : 
67 //=======================================================================
68
69 void TDocStd_XLinkRoot::Insert(const TDocStd_XLinkPtr& anXLinkPtr)
70 {
71   Handle(TDocStd_XLinkRoot) xRefRoot =
72     TDocStd_XLinkRoot::Set(anXLinkPtr->Label().Data());
73   // Insertion at beginning because the order is not significant.
74   anXLinkPtr->Next(xRefRoot->First());
75   xRefRoot->First(anXLinkPtr);
76 }
77
78
79 //=======================================================================
80 //function : Remove
81 //purpose  : 
82 //=======================================================================
83
84 void TDocStd_XLinkRoot::Remove(const TDocStd_XLinkPtr& anXLinkPtr)
85 {
86   Handle(TDocStd_XLinkRoot) xRefRoot;
87   if (anXLinkPtr->Label().Root().FindAttribute(TDocStd_XLinkRoot::GetID(),
88                                               xRefRoot)) {
89     TDocStd_XLink* previous = xRefRoot->First();
90     if (previous == anXLinkPtr) {
91       xRefRoot->First(anXLinkPtr->Next());
92       previous = NULL; anXLinkPtr->Next(previous);
93     }
94     else {
95       while (previous != NULL && previous->Next() != anXLinkPtr)
96         previous = previous->Next();
97       if (previous != NULL) {
98         previous->Next(anXLinkPtr->Next());
99         previous = NULL; anXLinkPtr->Next(previous);
100       }
101     }
102   }
103 }
104
105
106 //=======================================================================
107 //             INSTANCE METHODS
108 //=======================================================================
109
110 //=======================================================================
111 //function : TDocStd_XLinkRoot
112 //purpose  : 
113 //=======================================================================
114
115 TDocStd_XLinkRoot::TDocStd_XLinkRoot()
116 : myFirst(NULL)
117 {}
118
119
120 //=======================================================================
121 //function : ID
122 //purpose  : 
123 //=======================================================================
124
125 const Standard_GUID& TDocStd_XLinkRoot::ID() const
126 { return GetID(); }
127
128
129 //=======================================================================
130 //function : BackupCopy
131 //purpose  : 
132 //=======================================================================
133
134 Handle(TDF_Attribute) TDocStd_XLinkRoot::BackupCopy() const
135 { return new TDocStd_XLinkRoot; } // Does nothing.
136
137
138 //=======================================================================
139 //function : Restore
140 //purpose  : 
141 //=======================================================================
142
143 void TDocStd_XLinkRoot::Restore(const Handle(TDF_Attribute)& /*anAttribute*/) 
144 {} // Does nothing.
145
146
147 //=======================================================================
148 //function : NewEmpty
149 //purpose  : 
150 //=======================================================================
151
152 Handle(TDF_Attribute) TDocStd_XLinkRoot::NewEmpty() const
153 { return new TDocStd_XLinkRoot; }
154
155
156 //=======================================================================
157 //function : Paste
158 //purpose  : 
159 //=======================================================================
160
161 void TDocStd_XLinkRoot::Paste
162 (const Handle(TDF_Attribute)&,
163  const Handle(TDF_RelocationTable)&) const
164 {} // Does nothing.
165
166
167 //=======================================================================
168 //function : Dump
169 //purpose  : 
170 //=======================================================================
171
172 Standard_OStream& TDocStd_XLinkRoot::Dump(Standard_OStream& anOS) const
173 { return anOS; }
174