Integration of OCCT 6.5.0 from SVN
[occt.git] / src / TDataStd / TDataStd_ReferenceList.cxx
CommitLineData
7fd59977 1// File: TDataStd_ReferenceList.cxx
2// Created: May 29 11:40:00 2007
3// Author: Vlad Romashko
4// <vladislav.romashko@opencascade.com>
5// Copyright: Open CASCADE
6
7#include <TDataStd_ReferenceList.ixx>
8#include <TDF_ListIteratorOfLabelList.hxx>
9
10//=======================================================================
11//function : GetID
12//purpose :
13//=======================================================================
14const Standard_GUID& TDataStd_ReferenceList::GetID()
15{
16 static Standard_GUID TDataStd_ReferenceListID ("FCC1A658-59FF-4218-931B-0320A2B469A7");
17 return TDataStd_ReferenceListID;
18}
19
20//=======================================================================
21//function : TDataStd_ReferenceList
22//purpose : Empty Constructor
23//=======================================================================
24TDataStd_ReferenceList::TDataStd_ReferenceList()
25{
26
27}
28
29//=======================================================================
30//function : Set
31//purpose :
32//=======================================================================
33Handle(TDataStd_ReferenceList) TDataStd_ReferenceList::Set(const TDF_Label& label)
34{
35 Handle(TDataStd_ReferenceList) A;
36 if (!label.FindAttribute (TDataStd_ReferenceList::GetID(), A))
37 {
38 A = new TDataStd_ReferenceList;
39 label.AddAttribute(A);
40 }
41 return A;
42}
43
44//=======================================================================
45//function : IsEmpty
46//purpose :
47//=======================================================================
48Standard_Boolean TDataStd_ReferenceList::IsEmpty() const
49{
50 return myList.IsEmpty();
51}
52
53//=======================================================================
54//function : Extent
55//purpose :
56//=======================================================================
57Standard_Integer TDataStd_ReferenceList::Extent() const
58{
59 return myList.Extent();
60}
61
62//=======================================================================
63//function : Prepend
64//purpose :
65//=======================================================================
66void TDataStd_ReferenceList::Prepend(const TDF_Label& value)
67{
68 Backup();
69 myList.Prepend(value);
70}
71
72//=======================================================================
73//function : Append
74//purpose :
75//=======================================================================
76void TDataStd_ReferenceList::Append(const TDF_Label& value)
77{
78 Backup();
79 myList.Append(value);
80}
81
82//=======================================================================
83//function : InsertBefore
84//purpose :
85//=======================================================================
86Standard_Boolean TDataStd_ReferenceList::InsertBefore(const TDF_Label& value,
87 const TDF_Label& before_value)
88{
89 TDF_ListIteratorOfLabelList itr(myList);
90 for (; itr.More(); itr.Next())
91 {
92 if (itr.Value() == before_value)
93 {
94 Backup();
95 myList.InsertBefore(value, itr);
96 return Standard_True;
97 }
98 }
99 return Standard_False;
100}
101
102//=======================================================================
103//function : InsertAfter
104//purpose :
105//=======================================================================
106Standard_Boolean TDataStd_ReferenceList::InsertAfter(const TDF_Label& value,
107 const TDF_Label& after_value)
108{
109 TDF_ListIteratorOfLabelList itr(myList);
110 for (; itr.More(); itr.Next())
111 {
112 if (itr.Value() == after_value)
113 {
114 Backup();
115 myList.InsertAfter(value, itr);
116 return Standard_True;
117 }
118 }
119 return Standard_False;
120}
121
122//=======================================================================
123//function : Remove
124//purpose :
125//=======================================================================
126Standard_Boolean TDataStd_ReferenceList::Remove(const TDF_Label& value)
127{
128 TDF_ListIteratorOfLabelList itr(myList);
129 for (; itr.More(); itr.Next())
130 {
131 if (itr.Value() == value)
132 {
133 Backup();
134 myList.Remove(itr);
135 return Standard_True;
136 }
137 }
138 return Standard_False;
139}
140
141//=======================================================================
142//function : Clear
143//purpose :
144//=======================================================================
145void TDataStd_ReferenceList::Clear()
146{
147 Backup();
148 myList.Clear();
149}
150
151//=======================================================================
152//function : First
153//purpose :
154//=======================================================================
155const TDF_Label& TDataStd_ReferenceList::First() const
156{
157 return myList.First();
158}
159
160//=======================================================================
161//function : Last
162//purpose :
163//=======================================================================
164const TDF_Label& TDataStd_ReferenceList::Last() const
165{
166 return myList.Last();
167}
168
169//=======================================================================
170//function : List
171//purpose :
172//=======================================================================
173const TDF_LabelList& TDataStd_ReferenceList::List() const
174{
175 return myList;
176}
177
178//=======================================================================
179//function : ID
180//purpose :
181//=======================================================================
182const Standard_GUID& TDataStd_ReferenceList::ID () const
183{
184 return GetID();
185}
186
187//=======================================================================
188//function : NewEmpty
189//purpose :
190//=======================================================================
191Handle(TDF_Attribute) TDataStd_ReferenceList::NewEmpty () const
192{
193 return new TDataStd_ReferenceList();
194}
195
196//=======================================================================
197//function : Restore
198//purpose :
199//=======================================================================
200void TDataStd_ReferenceList::Restore(const Handle(TDF_Attribute)& With)
201{
202 myList.Clear();
203 Handle(TDataStd_ReferenceList) aList = Handle(TDataStd_ReferenceList)::DownCast(With);
204 TDF_ListIteratorOfLabelList itr(aList->List());
205 for (; itr.More(); itr.Next())
206 {
207 myList.Append(itr.Value());
208 }
209}
210
211//=======================================================================
212//function : Paste
213//purpose :
214//=======================================================================
215void TDataStd_ReferenceList::Paste (const Handle(TDF_Attribute)& Into,
216 const Handle(TDF_RelocationTable)& RT) const
217{
218 Handle(TDataStd_ReferenceList) aList = Handle(TDataStd_ReferenceList)::DownCast(Into);
219 aList->Clear();
220 TDF_ListIteratorOfLabelList itr(myList);
221 for (; itr.More(); itr.Next())
222 {
223 TDF_Label L = itr.Value(), rL;
224 if (!L.IsNull())
225 {
226 if (!RT->HasRelocation(L, rL))
227 rL = L;
228 aList->Append(rL);
229 }
230 }
231}
232
233//=======================================================================
234//function : References
235//purpose : Adds the referenced attributes or labels.
236//=======================================================================
237void TDataStd_ReferenceList::References(const Handle(TDF_DataSet)& aDataSet) const
238{
239 if (!Label().IsImported())
240 {
241 TDF_ListIteratorOfLabelList itr(myList);
242 for (; itr.More(); itr.Next())
243 {
244 aDataSet->AddLabel(itr.Value());
245 }
246 }
247}
248
249//=======================================================================
250//function : Dump
251//purpose :
252//=======================================================================
253Standard_OStream& TDataStd_ReferenceList::Dump (Standard_OStream& anOS) const
254{
255 anOS << "ReferenceList";
256 return anOS;
257}