1 // Created on: 2007-05-29
2 // Created by: Vlad Romashko
3 // Copyright (c) 2007-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.
16 #include <TDataStd_ExtStringList.hxx>
18 #include <Standard_Dump.hxx>
19 #include <Standard_GUID.hxx>
20 #include <Standard_Type.hxx>
21 #include <TCollection_ExtendedString.hxx>
22 #include <TDataStd_ListIteratorOfListOfExtendedString.hxx>
23 #include <TDF_Attribute.hxx>
24 #include <TDF_Label.hxx>
25 #include <TDF_RelocationTable.hxx>
27 IMPLEMENT_STANDARD_RTTIEXT(TDataStd_ExtStringList,TDF_Attribute)
29 //=======================================================================
32 //=======================================================================
33 const Standard_GUID& TDataStd_ExtStringList::GetID()
35 static Standard_GUID TDataStd_ExtStringListID ("D13FBE0A-E084-4912-A99D-7713C59C0AC4");
36 return TDataStd_ExtStringListID;
39 //=======================================================================
41 //purpose : Implements Set functionality
42 //=======================================================================
43 static Handle(TDataStd_ExtStringList) SetAttr(const TDF_Label& label,
44 const Standard_GUID& theGuid)
46 Handle(TDataStd_ExtStringList) A;
47 if (!label.FindAttribute (theGuid, A))
49 A = new TDataStd_ExtStringList;
51 label.AddAttribute(A);
56 //=======================================================================
57 //function : TDataStd_ExtStringList
58 //purpose : Empty Constructor
59 //=======================================================================
60 TDataStd_ExtStringList::TDataStd_ExtStringList() : myID(GetID())
63 //=======================================================================
66 //=======================================================================
67 Handle(TDataStd_ExtStringList) TDataStd_ExtStringList::Set(const TDF_Label& label)
69 return SetAttr(label, GetID());
72 //=======================================================================
74 //purpose : Set user defined attribute with specific ID
75 //=======================================================================
76 Handle(TDataStd_ExtStringList) TDataStd_ExtStringList::Set(const TDF_Label& label,
77 const Standard_GUID& theGuid)
79 return SetAttr(label, theGuid);
82 //=======================================================================
85 //=======================================================================
86 Standard_Boolean TDataStd_ExtStringList::IsEmpty() const
88 return myList.IsEmpty();
91 //=======================================================================
94 //=======================================================================
95 Standard_Integer TDataStd_ExtStringList::Extent() const
97 return myList.Extent();
100 //=======================================================================
103 //=======================================================================
104 void TDataStd_ExtStringList::Prepend(const TCollection_ExtendedString& value)
107 myList.Prepend(value);
110 //=======================================================================
113 //=======================================================================
114 void TDataStd_ExtStringList::Append(const TCollection_ExtendedString& value)
117 myList.Append(value);
120 //=======================================================================
121 //function : InsertBefore
123 //=======================================================================
124 Standard_Boolean TDataStd_ExtStringList::InsertBefore(const TCollection_ExtendedString& value,
125 const TCollection_ExtendedString& before_value)
127 TDataStd_ListIteratorOfListOfExtendedString itr(myList);
128 for (; itr.More(); itr.Next())
130 if (itr.Value() == before_value)
133 myList.InsertBefore(value, itr);
134 return Standard_True;
137 return Standard_False;
140 //=======================================================================
141 //function : InsertBefore
142 //purpose : Inserts the <value> before the <index> position.
143 //=======================================================================
144 Standard_Boolean TDataStd_ExtStringList::InsertBefore(const Standard_Integer index,
145 const TCollection_ExtendedString& before_value)
147 Standard_Integer i(1);
148 Standard_Boolean found(Standard_False);
149 TDataStd_ListIteratorOfListOfExtendedString itr(myList);
150 for (; itr.More(); itr.Next(), ++i)
155 myList.InsertBefore(before_value, itr);
156 found = Standard_True;
163 //=======================================================================
164 //function : InsertAfter
166 //=======================================================================
167 Standard_Boolean TDataStd_ExtStringList::InsertAfter(const TCollection_ExtendedString& value,
168 const TCollection_ExtendedString& after_value)
170 TDataStd_ListIteratorOfListOfExtendedString itr(myList);
171 for (; itr.More(); itr.Next())
173 if (itr.Value() == after_value)
176 myList.InsertAfter(value, itr);
177 return Standard_True;
180 return Standard_False;
183 //=======================================================================
184 //function : InsertAfter
185 //purpose : Inserts the <value> after the <index> position.
186 //=======================================================================
187 Standard_Boolean TDataStd_ExtStringList::InsertAfter(const Standard_Integer index,
188 const TCollection_ExtendedString& after_value)
190 Standard_Integer i(1);
191 Standard_Boolean found(Standard_False);
192 TDataStd_ListIteratorOfListOfExtendedString itr(myList);
193 for (; itr.More(); itr.Next(), ++i)
198 myList.InsertAfter(after_value, itr);
199 found = Standard_True;
206 //=======================================================================
209 //=======================================================================
210 Standard_Boolean TDataStd_ExtStringList::Remove(const TCollection_ExtendedString& value)
212 TDataStd_ListIteratorOfListOfExtendedString itr(myList);
213 for (; itr.More(); itr.Next())
215 if (itr.Value() == value)
219 return Standard_True;
222 return Standard_False;
225 //=======================================================================
227 //purpose : Removes a value at <index> position.
228 //=======================================================================
229 Standard_Boolean TDataStd_ExtStringList::Remove(const Standard_Integer index)
231 Standard_Integer i(1);
232 Standard_Boolean found(Standard_False);
233 TDataStd_ListIteratorOfListOfExtendedString itr(myList);
234 for (; itr.More(); itr.Next(), ++i)
240 found = Standard_True;
247 //=======================================================================
250 //=======================================================================
251 void TDataStd_ExtStringList::Clear()
257 //=======================================================================
260 //=======================================================================
261 const TCollection_ExtendedString& TDataStd_ExtStringList::First() const
263 return myList.First();
266 //=======================================================================
269 //=======================================================================
270 const TCollection_ExtendedString& TDataStd_ExtStringList::Last() const
272 return myList.Last();
275 //=======================================================================
278 //=======================================================================
279 const TDataStd_ListOfExtendedString& TDataStd_ExtStringList::List() const
284 //=======================================================================
287 //=======================================================================
288 const Standard_GUID& TDataStd_ExtStringList::ID () const
293 //=======================================================================
296 //=======================================================================
298 void TDataStd_ExtStringList::SetID( const Standard_GUID& theGuid)
300 if(myID == theGuid) return;
305 //=======================================================================
307 //purpose : sets default ID
308 //=======================================================================
310 void TDataStd_ExtStringList::SetID()
315 //=======================================================================
316 //function : NewEmpty
318 //=======================================================================
319 Handle(TDF_Attribute) TDataStd_ExtStringList::NewEmpty () const
321 return new TDataStd_ExtStringList();
324 //=======================================================================
327 //=======================================================================
328 void TDataStd_ExtStringList::Restore(const Handle(TDF_Attribute)& With)
331 Handle(TDataStd_ExtStringList) aList = Handle(TDataStd_ExtStringList)::DownCast(With);
332 TDataStd_ListIteratorOfListOfExtendedString itr(aList->List());
333 for (; itr.More(); itr.Next())
335 myList.Append(itr.Value());
340 //=======================================================================
343 //=======================================================================
344 void TDataStd_ExtStringList::Paste (const Handle(TDF_Attribute)& Into,
345 const Handle(TDF_RelocationTable)& ) const
347 Handle(TDataStd_ExtStringList) aList = Handle(TDataStd_ExtStringList)::DownCast(Into);
349 TDataStd_ListIteratorOfListOfExtendedString itr(myList);
350 for (; itr.More(); itr.Next())
352 aList->Append(itr.Value());
357 //=======================================================================
360 //=======================================================================
361 Standard_OStream& TDataStd_ExtStringList::Dump (Standard_OStream& anOS) const
363 anOS << "\nExtStringList: ";
364 Standard_Character sguid[Standard_GUID_SIZE_ALLOC];
365 myID.ToCString(sguid);
371 //=======================================================================
372 //function : DumpJson
374 //=======================================================================
375 void TDataStd_ExtStringList::DumpJson (Standard_OStream& theOStream, Standard_Integer /*theDepth*/) const
377 OCCT_DUMP_TRANSIENT_CLASS_BEGIN (theOStream)
379 for (TDataStd_ListOfExtendedString::Iterator aListIt (myList); aListIt.More(); aListIt.Next())
381 const TCollection_ExtendedString& aValue = aListIt.Value();
382 OCCT_DUMP_FIELD_VALUE_STRING (theOStream, aValue);
385 OCCT_DUMP_FIELD_VALUE_GUID (theOStream, myID)