0031313: Foundation Classes - Dump improvement for classes
[occt.git] / src / TDataStd / TDataStd_BooleanList.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_BooleanList.hxx>
17
18 #include <Standard_Dump.hxx>
19 #include <Standard_GUID.hxx>
20 #include <Standard_Type.hxx>
21 #include <TDataStd_ListIteratorOfListOfByte.hxx>
22 #include <TDF_Attribute.hxx>
23 #include <TDF_Label.hxx>
24 #include <TDF_RelocationTable.hxx>
25
26 IMPLEMENT_STANDARD_RTTIEXT(TDataStd_BooleanList,TDF_Attribute)
27
28 //=======================================================================
29 //function : GetID
30 //purpose  : 
31 //=======================================================================
32 const Standard_GUID& TDataStd_BooleanList::GetID() 
33
34   static Standard_GUID TDataStd_BooleanListID ("23A9D60E-A033-44d8-96EE-015587A41BBC");
35   return TDataStd_BooleanListID; 
36 }
37
38 //=======================================================================
39 //function : SetAttr
40 //purpose  : Implements Set functionality
41 //=======================================================================
42 static Handle(TDataStd_BooleanList) SetAttr(const TDF_Label&       label,
43                                             const Standard_GUID&   theGuid) 
44 {
45   Handle(TDataStd_BooleanList) A;
46   if (!label.FindAttribute (theGuid, A)) 
47   {
48     A = new TDataStd_BooleanList;
49     A->SetID(theGuid);
50     label.AddAttribute(A);
51   }
52   return A;
53 }
54
55 //=======================================================================
56 //function : TDataStd_BooleanList
57 //purpose  : Empty Constructor
58 //=======================================================================
59 TDataStd_BooleanList::TDataStd_BooleanList() : myID(GetID())
60 {}
61
62 //=======================================================================
63 //function : Set
64 //purpose  : 
65 //=======================================================================
66 Handle(TDataStd_BooleanList) TDataStd_BooleanList::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_BooleanList) TDataStd_BooleanList::Set(const TDF_Label& label,
76                                                        const Standard_GUID&   theGuid) 
77 {
78   return SetAttr(label, theGuid); 
79 }
80 //=======================================================================
81 //function : IsEmpty
82 //purpose  : 
83 //=======================================================================
84 Standard_Boolean TDataStd_BooleanList::IsEmpty() const
85 {
86   return myList.IsEmpty();
87 }
88
89 //=======================================================================
90 //function : Extent
91 //purpose  : 
92 //=======================================================================
93 Standard_Integer TDataStd_BooleanList::Extent() const
94 {
95   return myList.Extent();
96 }
97
98 //=======================================================================
99 //function : Prepend
100 //purpose  : 
101 //=======================================================================
102 void TDataStd_BooleanList::Prepend(const Standard_Boolean value)
103 {
104   Backup();
105   myList.Prepend( value ? 1 : 0 );
106 }
107
108 //=======================================================================
109 //function : Append
110 //purpose  : 
111 //=======================================================================
112 void TDataStd_BooleanList::Append(const Standard_Boolean value)
113 {
114   Backup();
115   myList.Append( value ? 1 : 0 );
116 }
117
118 //=======================================================================
119 //function : Clear
120 //purpose  : 
121 //=======================================================================
122 void TDataStd_BooleanList::Clear()
123 {
124   Backup();
125   myList.Clear();
126 }
127
128 //=======================================================================
129 //function : First
130 //purpose  : 
131 //=======================================================================
132 Standard_Boolean TDataStd_BooleanList::First() const
133 {
134   return myList.First() == 1;
135 }
136
137 //=======================================================================
138 //function : Last
139 //purpose  : 
140 //=======================================================================
141 Standard_Boolean TDataStd_BooleanList::Last() const
142 {
143   return myList.Last() == 1;
144 }
145
146 //=======================================================================
147 //function : List
148 //purpose  : 
149 //=======================================================================
150 const TDataStd_ListOfByte& TDataStd_BooleanList::List() const
151 {
152   return myList;
153 }
154
155 //=======================================================================
156 //function : InsertBefore
157 //purpose  : Inserts the <value> before the <index> position.
158 //=======================================================================
159 Standard_Boolean TDataStd_BooleanList::InsertBefore(const Standard_Integer index,
160                                                     const Standard_Boolean before_value)
161 {
162   Standard_Integer i(1);
163   Standard_Boolean found(Standard_False);
164   TDataStd_ListIteratorOfListOfByte itr(myList);
165   for (; itr.More(); itr.Next(), ++i)
166   {
167     if (i == index)
168     {
169       Backup();
170       myList.InsertBefore(before_value ? 1 : 0, itr);
171       found = Standard_True;
172       break;
173     }
174   }
175   return found;
176 }
177
178 //=======================================================================
179 //function : InsertAfter
180 //purpose  : Inserts the <value> after the <index> position.
181 //=======================================================================
182 Standard_Boolean TDataStd_BooleanList::InsertAfter(const Standard_Integer index,
183                                                    const Standard_Boolean after_value)
184 {
185   Standard_Integer i(1);
186   Standard_Boolean found(Standard_False);
187   TDataStd_ListIteratorOfListOfByte itr(myList);
188   for (; itr.More(); itr.Next(), ++i)
189   {
190     if (i == index)
191     {
192       Backup();
193       myList.InsertAfter(after_value ? 1 : 0, itr);
194       found = Standard_True;
195       break;
196     }
197   }
198   return found;
199 }
200
201 //=======================================================================
202 //function : Remove
203 //purpose  : Removes the <value> at the <index> position.
204 //=======================================================================
205 Standard_Boolean TDataStd_BooleanList::Remove(const Standard_Integer index)
206 {
207   Standard_Integer i(1);
208   Standard_Boolean found(Standard_False);
209   TDataStd_ListIteratorOfListOfByte itr(myList);
210   for (; itr.More(); itr.Next(), ++i)
211   {
212     if (i == index)
213     {
214       Backup();
215       myList.Remove(itr);
216       found = Standard_True;
217       break;
218     }
219   }
220   return found;
221 }
222
223 //=======================================================================
224 //function : ID
225 //purpose  : 
226 //=======================================================================
227 const Standard_GUID& TDataStd_BooleanList::ID () const 
228
229   return myID; 
230 }
231
232 //=======================================================================
233 //function : SetID
234 //purpose  :
235 //=======================================================================
236
237 void TDataStd_BooleanList::SetID( const Standard_GUID&  theGuid)
238 {  
239   if(myID == theGuid) return;
240   Backup();
241   myID = theGuid;
242 }
243
244 //=======================================================================
245 //function : SetID
246 //purpose  : sets default ID
247 //=======================================================================
248
249 void TDataStd_BooleanList::SetID()
250 {  
251   Backup();
252   myID = GetID();
253 }
254
255 //=======================================================================
256 //function : NewEmpty
257 //purpose  : 
258 //=======================================================================
259 Handle(TDF_Attribute) TDataStd_BooleanList::NewEmpty () const
260 {  
261   return new TDataStd_BooleanList(); 
262 }
263
264 //=======================================================================
265 //function : Restore
266 //purpose  : 
267 //=======================================================================
268 void TDataStd_BooleanList::Restore(const Handle(TDF_Attribute)& With) 
269 {
270   myList.Clear();
271   Handle(TDataStd_BooleanList) aList = Handle(TDataStd_BooleanList)::DownCast(With);
272   TDataStd_ListIteratorOfListOfByte itr(aList->List());
273   for (; itr.More(); itr.Next())
274   {
275     myList.Append (itr.Value() ? 1 : 0);
276   }
277   myID = aList->ID();
278 }
279
280 //=======================================================================
281 //function : Paste
282 //purpose  : 
283 //=======================================================================
284 void TDataStd_BooleanList::Paste (const Handle(TDF_Attribute)& Into,
285                                   const Handle(TDF_RelocationTable)& ) const
286 {
287   Handle(TDataStd_BooleanList) aList = Handle(TDataStd_BooleanList)::DownCast(Into);
288   aList->Clear();
289   TDataStd_ListIteratorOfListOfByte itr(myList);
290   for (; itr.More(); itr.Next())
291   {
292     aList->Append (itr.Value() != 0);
293   }
294   aList->SetID(myID);
295 }
296
297 //=======================================================================
298 //function : Dump
299 //purpose  : 
300 //=======================================================================
301 Standard_OStream& TDataStd_BooleanList::Dump (Standard_OStream& anOS) const
302 {  
303   anOS << "\nBooleanList: ";
304   Standard_Character sguid[Standard_GUID_SIZE_ALLOC];
305   myID.ToCString(sguid);
306   anOS << sguid;
307   anOS << std::endl;
308   return anOS;
309 }
310
311 //=======================================================================
312 //function : DumpJson
313 //purpose  : 
314 //=======================================================================
315 void TDataStd_BooleanList::DumpJson (Standard_OStream& theOStream, Standard_Integer theDepth) const
316 {
317   OCCT_DUMP_TRANSIENT_CLASS_BEGIN (theOStream)
318
319   OCCT_DUMP_BASE_CLASS (theOStream, theDepth, TDF_Attribute)
320
321   for (TDataStd_ListOfByte::Iterator aListIt (myList); aListIt.More(); aListIt.Next())
322   {
323     const Standard_Byte& aValue = aListIt.Value();
324     OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, aValue)
325   }
326   OCCT_DUMP_FIELD_VALUE_GUID (theOStream, myID)
327 }