0031313: Foundation Classes - Dump improvement for classes
[occt.git] / src / TDataStd / TDataStd_IntegerList.cxx
1 // Created on: 2007-05-29
2 // Created by: Vlad Romashko
3 // Copyright (c) 2007-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 #include <TDataStd_IntegerList.hxx>
17
18 #include <Standard_Dump.hxx>
19 #include <Standard_GUID.hxx>
20 #include <Standard_Type.hxx>
21 #include <TColStd_ListIteratorOfListOfInteger.hxx>
22 #include <TDF_Attribute.hxx>
23 #include <TDF_Label.hxx>
24 #include <TDF_RelocationTable.hxx>
25
26 IMPLEMENT_STANDARD_RTTIEXT(TDataStd_IntegerList,TDF_Attribute)
27
28 //=======================================================================
29 //function : GetID
30 //purpose  : 
31 //=======================================================================
32 const Standard_GUID& TDataStd_IntegerList::GetID() 
33
34   static Standard_GUID TDataStd_IntegerListID ("E406AA18-FF3F-483b-9A78-1A5EA5D1AA52");
35   return TDataStd_IntegerListID; 
36 }
37
38 //=======================================================================
39 //function : SetAttr
40 //purpose  : Implements Set functionality
41 //=======================================================================
42 static Handle(TDataStd_IntegerList) SetAttr(const TDF_Label&       label,
43                                             const Standard_GUID&   theGuid) 
44 {
45   Handle(TDataStd_IntegerList) A;
46   if (!label.FindAttribute (theGuid, A)) 
47   {
48     A = new TDataStd_IntegerList;
49     A->SetID(theGuid);
50     label.AddAttribute(A);
51   }
52   return A;
53 }
54
55 //=======================================================================
56 //function : TDataStd_IntegerList
57 //purpose  : Empty Constructor
58 //=======================================================================
59 TDataStd_IntegerList::TDataStd_IntegerList() : myID(GetID())
60 {}
61
62 //=======================================================================
63 //function : Set
64 //purpose  : 
65 //=======================================================================
66 Handle(TDataStd_IntegerList) TDataStd_IntegerList::Set(const TDF_Label& label) 
67 {
68   return SetAttr(label, GetID());
69 }
70
71 //=======================================================================
72 //function : Set
73 //purpose  : Set user defined attribute with specific ID
74 //=======================================================================
75 Handle(TDataStd_IntegerList) TDataStd_IntegerList::Set(const TDF_Label& label,
76                                                        const Standard_GUID& theGuid) 
77 {
78   return SetAttr(label, theGuid);
79 }
80
81 //=======================================================================
82 //function : IsEmpty
83 //purpose  : 
84 //=======================================================================
85 Standard_Boolean TDataStd_IntegerList::IsEmpty() const
86 {
87   return myList.IsEmpty();
88 }
89
90 //=======================================================================
91 //function : Extent
92 //purpose  : 
93 //=======================================================================
94 Standard_Integer TDataStd_IntegerList::Extent() const
95 {
96   return myList.Extent();
97 }
98
99 //=======================================================================
100 //function : Prepend
101 //purpose  : 
102 //=======================================================================
103 void TDataStd_IntegerList::Prepend(const Standard_Integer value)
104 {
105   Backup();
106   myList.Prepend(value);
107 }
108
109 //=======================================================================
110 //function : Append
111 //purpose  : 
112 //=======================================================================
113 void TDataStd_IntegerList::Append(const Standard_Integer value)
114 {
115   Backup();
116   myList.Append(value);
117 }
118
119 //=======================================================================
120 //function : InsertBefore
121 //purpose  : 
122 //=======================================================================
123 Standard_Boolean TDataStd_IntegerList::InsertBefore(const Standard_Integer value,
124                                                     const Standard_Integer before_value)
125 {
126   TColStd_ListIteratorOfListOfInteger itr(myList);
127   for (; itr.More(); itr.Next())
128   {
129     if (itr.Value() == before_value)
130     {
131       Backup();
132       myList.InsertBefore(value, itr);
133       return Standard_True;
134     }
135   }
136   return Standard_False;
137 }
138
139 // Inserts the <value> before the <index> position.
140 // The indices start with 1 .. Extent().
141 Standard_Boolean TDataStd_IntegerList::InsertBeforeByIndex (const Standard_Integer index,
142                                                             const Standard_Integer before_value)
143 {
144   Standard_Integer i(1);
145   Standard_Boolean found(Standard_False);
146   TColStd_ListIteratorOfListOfInteger itr(myList);
147   for (; itr.More(); itr.Next(), ++i)
148   {
149     if (i == index)
150     {
151       Backup();
152       myList.InsertBefore(before_value, itr);
153       found = Standard_True;
154       break;
155     }
156   }
157   return found;
158 }
159
160 //=======================================================================
161 //function : InsertAfter
162 //purpose  : 
163 //=======================================================================
164 Standard_Boolean TDataStd_IntegerList::InsertAfter(const Standard_Integer value,
165                                                    const Standard_Integer after_value)
166 {
167   TColStd_ListIteratorOfListOfInteger itr(myList);
168   for (; itr.More(); itr.Next())
169   {
170     if (itr.Value() == after_value)
171     {
172       Backup();
173       myList.InsertAfter(value, itr);
174       return Standard_True;
175     }
176   }
177   return Standard_False;
178 }
179   
180 // Inserts the <value> after the <index> position.
181 // The indices start with 1 .. Extent().
182 Standard_Boolean TDataStd_IntegerList::InsertAfterByIndex (const Standard_Integer index,
183                                                            const Standard_Integer after_value)
184 {
185   Standard_Integer i(1);
186   Standard_Boolean found(Standard_False);
187   TColStd_ListIteratorOfListOfInteger itr(myList);
188   for (; itr.More(); itr.Next(), ++i)
189   {
190     if (i == index)
191     {
192       Backup();
193       myList.InsertAfter(after_value, itr);
194       found = Standard_True;
195       break;
196     }
197   }
198   return found;
199 }
200
201 //=======================================================================
202 //function : Remove
203 //purpose  : 
204 //=======================================================================
205 Standard_Boolean TDataStd_IntegerList::Remove(const Standard_Integer value)
206 {
207   TColStd_ListIteratorOfListOfInteger itr(myList);
208   for (; itr.More(); itr.Next())
209   {
210     if (itr.Value() == value)
211     {
212       Backup();
213       myList.Remove(itr);
214       return Standard_True;
215     }
216   }
217   return Standard_False;
218 }
219
220 //=======================================================================
221 //function : Remove
222 //purpose  : Removes the <value> at the <index> position.
223 //=======================================================================
224 Standard_Boolean TDataStd_IntegerList::RemoveByIndex (const Standard_Integer index)
225 {
226   Standard_Integer i(1);
227   Standard_Boolean found(Standard_False);
228   TColStd_ListIteratorOfListOfInteger itr(myList);
229   for (; itr.More(); itr.Next(), ++i)
230   {
231     if (i == index)
232     {
233       Backup();
234       myList.Remove(itr);
235       found = Standard_True;
236       break;
237     }
238   }
239   return found;
240 }
241
242 //=======================================================================
243 //function : Clear
244 //purpose  : 
245 //=======================================================================
246 void TDataStd_IntegerList::Clear()
247 {
248   Backup();
249   myList.Clear();
250 }
251
252 //=======================================================================
253 //function : First
254 //purpose  : 
255 //=======================================================================
256 Standard_Integer TDataStd_IntegerList::First() const
257 {
258   return myList.First();
259 }
260
261 //=======================================================================
262 //function : Last
263 //purpose  : 
264 //=======================================================================
265 Standard_Integer TDataStd_IntegerList::Last() const
266 {
267   return myList.Last();
268 }
269
270 //=======================================================================
271 //function : List
272 //purpose  : 
273 //=======================================================================
274 const TColStd_ListOfInteger& TDataStd_IntegerList::List() const
275 {
276   return myList;
277 }
278
279 //=======================================================================
280 //function : ID
281 //purpose  : 
282 //=======================================================================
283 const Standard_GUID& TDataStd_IntegerList::ID () const 
284
285   return myID; 
286 }
287
288 //=======================================================================
289 //function : SetID
290 //purpose  :
291 //=======================================================================
292
293 void TDataStd_IntegerList::SetID( const Standard_GUID&  theGuid)
294 {  
295   if(myID == theGuid) return;
296   Backup();
297   myID = theGuid;
298 }
299
300 //=======================================================================
301 //function : SetID
302 //purpose  : sets default ID
303 //=======================================================================
304
305 void TDataStd_IntegerList::SetID()
306 {  
307   Backup();
308   myID = GetID();
309 }
310
311 //=======================================================================
312 //function : NewEmpty
313 //purpose  : 
314 //=======================================================================
315 Handle(TDF_Attribute) TDataStd_IntegerList::NewEmpty () const
316 {  
317   return new TDataStd_IntegerList(); 
318 }
319
320 //=======================================================================
321 //function : Restore
322 //purpose  : 
323 //=======================================================================
324 void TDataStd_IntegerList::Restore(const Handle(TDF_Attribute)& With) 
325 {
326   myList.Clear();
327   Handle(TDataStd_IntegerList) aList = Handle(TDataStd_IntegerList)::DownCast(With);
328   TColStd_ListIteratorOfListOfInteger itr(aList->List());
329   for (; itr.More(); itr.Next())
330   {
331     myList.Append(itr.Value());
332   }
333   myID = aList->ID();
334 }
335
336 //=======================================================================
337 //function : Paste
338 //purpose  : 
339 //=======================================================================
340 void TDataStd_IntegerList::Paste (const Handle(TDF_Attribute)& Into,
341                                   const Handle(TDF_RelocationTable)& ) const
342 {
343   Handle(TDataStd_IntegerList) aList = Handle(TDataStd_IntegerList)::DownCast(Into);
344   aList->Clear();
345   TColStd_ListIteratorOfListOfInteger itr(myList);
346   for (; itr.More(); itr.Next())
347   {
348     aList->Append(itr.Value());
349   }
350   aList->SetID(myID);
351 }
352
353 //=======================================================================
354 //function : Dump
355 //purpose  : 
356 //=======================================================================
357 Standard_OStream& TDataStd_IntegerList::Dump (Standard_OStream& anOS) const
358 {  
359   anOS << "\nIntegerList: ";
360   Standard_Character sguid[Standard_GUID_SIZE_ALLOC];
361   myID.ToCString(sguid);
362   anOS << sguid;
363   anOS << std::endl;
364   return anOS;
365 }
366
367 //=======================================================================
368 //function : DumpJson
369 //purpose  : 
370 //=======================================================================
371 void TDataStd_IntegerList::DumpJson (Standard_OStream& theOStream, Standard_Integer theDepth) const
372 {
373   OCCT_DUMP_TRANSIENT_CLASS_BEGIN (theOStream)
374
375   OCCT_DUMP_BASE_CLASS (theOStream, theDepth, TDF_Attribute)
376
377   for (TColStd_ListOfInteger::Iterator aListIt (myList); aListIt.More(); aListIt.Next())
378   {
379     const Standard_Integer& aValue = aListIt.Value();
380     OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, aValue)
381   }
382   OCCT_DUMP_FIELD_VALUE_GUID (theOStream, myID)
383 }