1 // Created by: DAUTRY Philippe
2 // Copyright (c) 1997-1999 Matra Datavision
3 // Copyright (c) 1999-2014 OPEN CASCADE SAS
5 // This file is part of Open CASCADE Technology software library.
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.
13 // Alternatively, this file may be used under the terms of Open CASCADE
14 // commercial license or contractual agreement.
18 //Version Date Purpose
19 // 0.0 Sep 15 1997 Creation
21 #include <TDocStd_XLinkRoot.hxx>
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>
31 IMPLEMENT_STANDARD_RTTIEXT(TDocStd_XLinkRoot,TDF_Attribute)
33 //=======================================================================
35 //=======================================================================
36 //=======================================================================
39 //=======================================================================
40 const Standard_GUID& TDocStd_XLinkRoot::GetID()
42 static Standard_GUID myID("5d587401-5690-11d1-8940-080009dc3333");
47 //=======================================================================
49 //purpose : CLASS method.
50 //=======================================================================
52 Handle(TDocStd_XLinkRoot) TDocStd_XLinkRoot::Set
53 (const Handle(TDF_Data)& aDF)
55 Handle(TDocStd_XLinkRoot) xRefRoot;
56 if (!aDF->Root().FindAttribute (TDocStd_XLinkRoot::GetID(),xRefRoot)) {
57 xRefRoot = new TDocStd_XLinkRoot;
58 aDF->Root().AddAttribute(xRefRoot);
64 //=======================================================================
67 //=======================================================================
69 void TDocStd_XLinkRoot::Insert(const TDocStd_XLinkPtr& anXLinkPtr)
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);
79 //=======================================================================
82 //=======================================================================
84 void TDocStd_XLinkRoot::Remove(const TDocStd_XLinkPtr& anXLinkPtr)
86 Handle(TDocStd_XLinkRoot) xRefRoot;
87 if (anXLinkPtr->Label().Root().FindAttribute(TDocStd_XLinkRoot::GetID(),
89 TDocStd_XLink* previous = xRefRoot->First();
90 if (previous == anXLinkPtr) {
91 xRefRoot->First(anXLinkPtr->Next());
92 previous = NULL; anXLinkPtr->Next(previous);
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);
106 //=======================================================================
108 //=======================================================================
110 //=======================================================================
111 //function : TDocStd_XLinkRoot
113 //=======================================================================
115 TDocStd_XLinkRoot::TDocStd_XLinkRoot()
120 //=======================================================================
123 //=======================================================================
125 const Standard_GUID& TDocStd_XLinkRoot::ID() const
129 //=======================================================================
130 //function : BackupCopy
132 //=======================================================================
134 Handle(TDF_Attribute) TDocStd_XLinkRoot::BackupCopy() const
135 { return new TDocStd_XLinkRoot; } // Does nothing.
138 //=======================================================================
141 //=======================================================================
143 void TDocStd_XLinkRoot::Restore(const Handle(TDF_Attribute)& /*anAttribute*/)
147 //=======================================================================
148 //function : NewEmpty
150 //=======================================================================
152 Handle(TDF_Attribute) TDocStd_XLinkRoot::NewEmpty() const
153 { return new TDocStd_XLinkRoot; }
156 //=======================================================================
159 //=======================================================================
161 void TDocStd_XLinkRoot::Paste
162 (const Handle(TDF_Attribute)&,
163 const Handle(TDF_RelocationTable)&) const
167 //=======================================================================
170 //=======================================================================
172 Standard_OStream& TDocStd_XLinkRoot::Dump(Standard_OStream& anOS) const