1 // Created on: 2007-05-29
2 // Created by: Vlad Romashko
3 // Copyright (c) 2007-2012 OPEN CASCADE SAS
5 // The content of this file is subject to the Open CASCADE Technology Public
6 // License Version 6.5 (the "License"). You may not use the content of this file
7 // except in compliance with the License. Please obtain a copy of the License
8 // at http://www.opencascade.org and read it completely before using this file.
10 // The Initial Developer of the Original Code is Open CASCADE S.A.S., having its
11 // main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France.
13 // The Original Code and all software distributed under the License is
14 // distributed on an "AS IS" basis, without warranty of any kind, and the
15 // Initial Developer hereby disclaims all such warranties, including without
16 // limitation, any warranties of merchantability, fitness for a particular
17 // purpose or non-infringement. Please see the License for the specific terms
18 // and conditions governing the rights and limitations under the License.
21 #include <TDataStd_NamedData.ixx>
23 #include <TColStd_DataMapIteratorOfDataMapOfStringInteger.hxx>
24 #include <TDataStd_DataMapIteratorOfDataMapOfStringReal.hxx>
25 #include <TDataStd_DataMapIteratorOfDataMapOfStringString.hxx>
26 #include <TDataStd_DataMapIteratorOfDataMapOfStringByte.hxx>
27 #include <TDataStd_DataMapIteratorOfDataMapOfStringHArray1OfInteger.hxx>
28 #include <TDataStd_DataMapIteratorOfDataMapOfStringHArray1OfReal.hxx>
33 #define EXCEPTION Standard_Failure
35 //=======================================================================
38 //=======================================================================
39 const Standard_GUID& TDataStd_NamedData::GetID()
41 static Standard_GUID TDataStd_NamedDataID ("F170FD21-CBAE-4e7d-A4B4-0560A4DA2D16");
42 return TDataStd_NamedDataID;
45 //=======================================================================
46 //function : TDataStd_NamedData
47 //purpose : Empty Constructor
48 //=======================================================================
49 TDataStd_NamedData::TDataStd_NamedData()
54 //=======================================================================
57 //=======================================================================
58 Handle(TDataStd_NamedData) TDataStd_NamedData::Set(const TDF_Label& label)
60 Handle(TDataStd_NamedData) A;
61 if (!label.FindAttribute (TDataStd_NamedData::GetID(), A))
63 A = new TDataStd_NamedData;
64 label.AddAttribute(A);
72 //=======================================================================
73 //function : HasInteger
74 //purpose : Returns true if the attribute contains this named integer.
75 //=======================================================================
76 Standard_Boolean TDataStd_NamedData::HasInteger(const TCollection_ExtendedString& theName) const
78 if(!HasIntegers()) return Standard_False;
79 return myIntegers->Map().IsBound(theName);
82 //=======================================================================
83 //function : GetInteger
84 //purpose : Returns the named integer. It returns 0 if there is no such
85 // : a named integer(use HasInteger()).
86 //=======================================================================
87 Standard_Integer TDataStd_NamedData::GetInteger(const TCollection_ExtendedString& theName)
90 TColStd_DataMapOfStringInteger aMap;
91 myIntegers = new TDataStd_HDataMapOfStringInteger(aMap);
93 return myIntegers->Map()(theName);
96 //=======================================================================
97 //function : SetInteger
98 //purpose : Defines a named integer. If the integer already exists,
99 // : it changes its value to <theInteger>.
100 //=======================================================================
101 void TDataStd_NamedData::SetInteger(const TCollection_ExtendedString& theName,
102 const Standard_Integer theInteger)
105 TColStd_DataMapOfStringInteger aMap;
106 myIntegers = new TDataStd_HDataMapOfStringInteger(aMap);
108 if (!myIntegers->Map().IsBound(theName) || myIntegers->Map().Find(theName) != theInteger)
111 if (myIntegers->Map().IsBound(theName))
112 myIntegers->ChangeMap().ChangeFind(theName) = theInteger;
114 myIntegers->ChangeMap().Bind(theName, theInteger);
118 //=======================================================================
119 //function : GetIntegersContainer
120 //purpose : Returns the internal container of named integers.
121 // : Use before HasIntegers()
122 //=======================================================================
123 const TColStd_DataMapOfStringInteger& TDataStd_NamedData::GetIntegersContainer()
126 TColStd_DataMapOfStringInteger aMap;
127 myIntegers = new TDataStd_HDataMapOfStringInteger(aMap);
129 return myIntegers->Map();
132 //=======================================================================
133 //function : ChangeIntegers
134 //purpose : Replace the container content by new content of the <theIntegers>.
135 //=======================================================================
136 void TDataStd_NamedData::ChangeIntegers(const TColStd_DataMapOfStringInteger& theIntegers)
139 TColStd_DataMapOfStringInteger aMap;
140 myIntegers = new TDataStd_HDataMapOfStringInteger(aMap);
142 if (&myIntegers->Map() == &theIntegers) return;
144 myIntegers->ChangeMap().Assign(theIntegers);
151 //=======================================================================
153 //purpose : Returns true if the attribute contains this named real.
154 //=======================================================================
155 Standard_Boolean TDataStd_NamedData::HasReal(const TCollection_ExtendedString& theName) const
157 if(!HasReals()) return Standard_False;
158 return myReals->Map().IsBound(theName);
161 //=======================================================================
163 //purpose : Returns the named real. It returns 0 if there is no such
164 // : a named real (use HasReal()).
165 //=======================================================================
166 Standard_Real TDataStd_NamedData::GetReal(const TCollection_ExtendedString& theName)
169 TDataStd_DataMapOfStringReal aMap;
170 myReals = new TDataStd_HDataMapOfStringReal(aMap);
172 return myReals->Map()(theName);
175 //=======================================================================
177 //purpose : Defines a named real. If the real already exists,
178 // : it changes its value to <theReal>.
179 //=======================================================================
180 void TDataStd_NamedData::SetReal(const TCollection_ExtendedString& theName,
181 const Standard_Real theReal)
184 TDataStd_DataMapOfStringReal aMap;
185 myReals = new TDataStd_HDataMapOfStringReal(aMap);
187 if (!myReals->Map().IsBound(theName) || myReals->Map().Find(theName) != theReal)
190 if (myReals->Map().IsBound(theName))
191 myReals->ChangeMap().ChangeFind(theName) = theReal;
193 myReals->ChangeMap().Bind(theName, theReal);
197 //=======================================================================
198 //function : GetRealsContainer
199 //purpose : Returns the internal container of named reals.
200 //=======================================================================
201 const TDataStd_DataMapOfStringReal& TDataStd_NamedData::GetRealsContainer()
204 TDataStd_DataMapOfStringReal aMap;
205 myReals = new TDataStd_HDataMapOfStringReal(aMap);
207 return myReals->Map();
210 //=======================================================================
211 //function : ChangeReals
212 //purpose : Replace the container content by new content of the <theReals>.
213 //=======================================================================
214 void TDataStd_NamedData::ChangeReals(const TDataStd_DataMapOfStringReal& theReals)
217 TDataStd_DataMapOfStringReal aMap;
218 myReals = new TDataStd_HDataMapOfStringReal(aMap);
220 if (&myReals->Map() == &theReals) return;
222 myReals->ChangeMap().Assign(theReals);
228 //=======================================================================
229 //function : HasString
230 //purpose : Returns true if the attribute contains this named string.
231 //=======================================================================
232 Standard_Boolean TDataStd_NamedData::HasString(const TCollection_ExtendedString& theName) const
234 if(!HasStrings()) return Standard_False;
235 return myStrings->Map().IsBound(theName);
238 //=======================================================================
239 //function : GetString
240 //purpose : Returns the named string.It returns empty string if there is
241 // : string specified by the Name(use HasString()).
242 //=======================================================================
243 const TCollection_ExtendedString& TDataStd_NamedData::GetString(const TCollection_ExtendedString& theName)
246 TDataStd_DataMapOfStringString aMap;
247 myStrings = new TDataStd_HDataMapOfStringString(aMap);
249 return myStrings->Map()(theName);
252 //=======================================================================
253 //function : SetString
254 //purpose : Defines a named string. If the string already exists,
255 // : it changes its value to <theString>.
256 //=======================================================================
257 void TDataStd_NamedData::SetString(const TCollection_ExtendedString& theName,
258 const TCollection_ExtendedString& theString)
261 TDataStd_DataMapOfStringString aMap;
262 myStrings = new TDataStd_HDataMapOfStringString(aMap);
264 if (!myStrings->Map().IsBound(theName) || myStrings->Map().Find(theName) != theString)
267 if (myStrings->Map().IsBound(theName))
268 myStrings->ChangeMap().ChangeFind(theName) = theString;
270 myStrings->ChangeMap().Bind(theName, theString);
274 //=======================================================================
275 //function : GetStringsContainer
276 //purpose : Returns the internal container of named strings.
277 //=======================================================================
278 const TDataStd_DataMapOfStringString& TDataStd_NamedData::GetStringsContainer()
281 TDataStd_DataMapOfStringString aMap;
282 myStrings = new TDataStd_HDataMapOfStringString(aMap);
284 return myStrings->Map();
287 //=======================================================================
288 //function : ChangeStrings
289 //purpose : Replace the container content by new content of the <theStrings>.
290 //=======================================================================
291 void TDataStd_NamedData::ChangeStrings(const TDataStd_DataMapOfStringString& theStrings)
294 TDataStd_DataMapOfStringString aMap;
295 myStrings = new TDataStd_HDataMapOfStringString(aMap);
297 if (&myStrings->Map() == &theStrings) return;
299 myStrings->ChangeMap().Assign(theStrings);
305 //=======================================================================
307 //purpose : Returns true if the attribute contains this named byte.
308 //=======================================================================
309 Standard_Boolean TDataStd_NamedData::HasByte(const TCollection_ExtendedString& theName) const
311 if(!HasBytes()) return Standard_False;
312 return myBytes->Map().IsBound(theName);
315 //=======================================================================
317 //purpose : Returns the named byte. It returns 0 if there is no such
318 // : a named byte (use HasByte()).
319 //=======================================================================
320 Standard_Byte TDataStd_NamedData::GetByte(const TCollection_ExtendedString& theName)
323 TDataStd_DataMapOfStringByte aMap;
324 myBytes = new TDataStd_HDataMapOfStringByte(aMap);
326 return myBytes->Map()(theName);
329 //=======================================================================
331 //purpose : Defines a named byte. If the byte already exists,
332 // : it changes its value to <theByte>.
333 //=======================================================================
334 void TDataStd_NamedData::SetByte(const TCollection_ExtendedString& theName,
335 const Standard_Byte theByte)
338 TDataStd_DataMapOfStringByte aMap;
339 myBytes = new TDataStd_HDataMapOfStringByte(aMap);
341 if (!myBytes->Map().IsBound(theName) || myBytes->Map().Find(theName) != theByte)
344 if (myBytes->Map().IsBound(theName))
345 myBytes->ChangeMap().ChangeFind(theName) = theByte;
347 myBytes->ChangeMap().Bind(theName, theByte);
351 //=======================================================================
352 //function : GetBytesContainer
353 //purpose : Returns the internal container of named bytes.
354 //=======================================================================
355 const TDataStd_DataMapOfStringByte& TDataStd_NamedData::GetBytesContainer()
358 TDataStd_DataMapOfStringByte aMap;
359 myBytes = new TDataStd_HDataMapOfStringByte(aMap);
361 return myBytes->Map();
364 //=======================================================================
365 //function : ChangeBytes
366 //purpose : Replace the container content by new content of the <theBytes>.
367 //=======================================================================
368 void TDataStd_NamedData::ChangeBytes(const TDataStd_DataMapOfStringByte& theBytes)
371 TDataStd_DataMapOfStringByte aMap;
372 myBytes = new TDataStd_HDataMapOfStringByte(aMap);
374 if (&myBytes->Map() == &theBytes) return;
376 myBytes->ChangeMap().Assign(theBytes);
380 //Category: Arrays of integers
381 // ==================
382 //=======================================================================
383 //function : HasArrayOfIntegers
384 //purpose : Returns true if the attribute contains this named array
385 // : of integer values.
386 //=======================================================================
387 Standard_Boolean TDataStd_NamedData::HasArrayOfIntegers
388 (const TCollection_ExtendedString& theName) const
390 if(!HasArraysOfIntegers()) return Standard_False;
391 return myArraysOfIntegers->Map().IsBound(theName);
394 //=======================================================================
395 //function : GetArrayOfIntegers
396 //purpose : Returns the named array of integer values. It returns a NULL
397 // : Handle if there is no such a named array of integers
398 //=======================================================================
399 const Handle(TColStd_HArray1OfInteger)& TDataStd_NamedData::GetArrayOfIntegers
400 (const TCollection_ExtendedString& theName)
402 if(!HasArraysOfIntegers()) {
403 TDataStd_DataMapOfStringHArray1OfInteger aMap;
404 myArraysOfIntegers = new TDataStd_HDataMapOfStringHArray1OfInteger(aMap);
406 return myArraysOfIntegers->Map().Find(theName);
409 //=======================================================================
410 //function : SetArrayOfIntegers
411 //purpose : Defines a named array of integer values.
412 // : If the array already exists, it changes its value to <theArrayOfIntegers>.
413 //=======================================================================
414 void TDataStd_NamedData::SetArrayOfIntegers(const TCollection_ExtendedString& theName,
415 const Handle(TColStd_HArray1OfInteger)& theArrayOfIntegers)
417 if(!HasArraysOfIntegers()) {
418 TDataStd_DataMapOfStringHArray1OfInteger aMap;
419 myArraysOfIntegers = new TDataStd_HDataMapOfStringHArray1OfInteger(aMap);
423 // Deep copy of the array
424 Handle(TColStd_HArray1OfInteger) arr;
425 if (!theArrayOfIntegers.IsNull())
427 Standard_Integer lower = theArrayOfIntegers->Lower(), i = lower, upper = theArrayOfIntegers->Upper();
428 arr = new TColStd_HArray1OfInteger(lower, upper);
429 for (; i <= upper; i++)
431 arr->SetValue(i, theArrayOfIntegers->Value(i));
435 if (myArraysOfIntegers->Map().IsBound(theName))
436 myArraysOfIntegers->ChangeMap().ChangeFind(theName) = arr;
438 myArraysOfIntegers->ChangeMap().Bind(theName, arr);
441 //=======================================================================
442 //function : GetArraysOfIntegersContainer
443 //purpose : Returns the internal container of named arrays of integer values.
444 //=======================================================================
445 const TDataStd_DataMapOfStringHArray1OfInteger& TDataStd_NamedData::
446 GetArraysOfIntegersContainer()
448 if(!HasArraysOfIntegers()) {
449 TDataStd_DataMapOfStringHArray1OfInteger aMap;
450 myArraysOfIntegers = new TDataStd_HDataMapOfStringHArray1OfInteger(aMap);
452 return myArraysOfIntegers->Map();
455 //=======================================================================
456 //function : ChangeArraysOfIntegers
457 //purpose : Replace the container content by new content of the <theIntegers>.
458 //=======================================================================
459 void TDataStd_NamedData::ChangeArraysOfIntegers
460 (const TDataStd_DataMapOfStringHArray1OfInteger& theIntegers)
462 if(!HasArraysOfIntegers()) {
463 TDataStd_DataMapOfStringHArray1OfInteger aMap;
464 myArraysOfIntegers = new TDataStd_HDataMapOfStringHArray1OfInteger(aMap);
466 if (&myArraysOfIntegers->Map() == &theIntegers) return;
468 myArraysOfIntegers->ChangeMap().Assign(theIntegers);
472 //Category: Arrays of reals
474 //=======================================================================
475 //function : HasArrayOfReals
476 //purpose : Returns true if the attribute contains this named array of
478 //=======================================================================
479 Standard_Boolean TDataStd_NamedData::HasArrayOfReals
480 (const TCollection_ExtendedString& theName) const
482 if(!HasArraysOfReals()) return Standard_False;
483 return myArraysOfReals->Map().IsBound(theName);
486 //=======================================================================
487 //function : GetArrayOfReals
488 //purpose : Returns the named array of real values. It returns a NULL
489 // : Handle if there is no such a named array of reals.
490 //=======================================================================
491 const Handle(TColStd_HArray1OfReal)& TDataStd_NamedData::GetArrayOfReals
492 (const TCollection_ExtendedString& theName)
494 if(!HasArraysOfReals()) {
495 TDataStd_DataMapOfStringHArray1OfReal aMap;
496 myArraysOfReals = new TDataStd_HDataMapOfStringHArray1OfReal(aMap);
498 return myArraysOfReals->Map().Find(theName);
501 //=======================================================================
502 //function : SetArrayOfReals
503 //purpose : Defines a named array of real values.
504 // : If the array already exists, it changes its value to <theArrayOfReals>.
505 //=======================================================================
506 void TDataStd_NamedData::SetArrayOfReals(const TCollection_ExtendedString& theName,
507 const Handle(TColStd_HArray1OfReal)& theArrayOfReals)
509 if(!HasArraysOfReals()) {
510 TDataStd_DataMapOfStringHArray1OfReal aMap;
511 myArraysOfReals = new TDataStd_HDataMapOfStringHArray1OfReal(aMap);
515 // Deep copy of the array
516 Handle(TColStd_HArray1OfReal) arr;
517 if (!theArrayOfReals.IsNull())
519 Standard_Integer lower = theArrayOfReals->Lower(), i = lower, upper = theArrayOfReals->Upper();
520 arr = new TColStd_HArray1OfReal(lower, upper);
521 for (; i <= upper; i++)
523 arr->SetValue(i, theArrayOfReals->Value(i));
527 if (myArraysOfReals->Map().IsBound(theName))
528 myArraysOfReals->ChangeMap().ChangeFind(theName) = arr;
530 myArraysOfReals->ChangeMap().Bind(theName, arr);
533 //=======================================================================
534 //function : GetArraysOfRealsContainer
535 //purpose : Returns the internal container of named arrays of real values.
536 //=======================================================================
537 const TDataStd_DataMapOfStringHArray1OfReal& TDataStd_NamedData::
538 GetArraysOfRealsContainer()
540 if(!HasArraysOfReals()) {
541 TDataStd_DataMapOfStringHArray1OfReal aMap;
542 myArraysOfReals = new TDataStd_HDataMapOfStringHArray1OfReal(aMap);
544 return myArraysOfReals->Map();
547 //=======================================================================
548 //function : ChangeArraysOfReals
549 //purpose : Replace the container content by new content of the <theReals>.
550 //=======================================================================
551 void TDataStd_NamedData::ChangeArraysOfReals
552 (const TDataStd_DataMapOfStringHArray1OfReal& theReals)
554 if(!HasArraysOfReals()) {
555 TDataStd_DataMapOfStringHArray1OfReal aMap;
556 myArraysOfReals = new TDataStd_HDataMapOfStringHArray1OfReal(aMap);
558 if (&myArraysOfReals->Map() == &theReals) return;
560 myArraysOfReals->ChangeMap().Assign(theReals);
563 //=======================================================================
566 //=======================================================================
567 const Standard_GUID& TDataStd_NamedData::ID () const
572 //=======================================================================
573 //function : NewEmpty
575 //=======================================================================
576 Handle(TDF_Attribute) TDataStd_NamedData::NewEmpty () const
578 return new TDataStd_NamedData();
581 //=======================================================================
584 //=======================================================================
585 void TDataStd_NamedData::Restore(const Handle(TDF_Attribute)& With)
588 Handle(TDataStd_NamedData) ND = Handle(TDataStd_NamedData)::DownCast(With);
589 if(ND.IsNull()) return;
591 if (!ND->GetIntegersContainer().IsEmpty())
594 TColStd_DataMapOfStringInteger aMap;
595 myIntegers = new TDataStd_HDataMapOfStringInteger(aMap);
597 myIntegers->ChangeMap().Assign(ND->GetIntegersContainer());
601 if (!ND->GetRealsContainer().IsEmpty())
604 TDataStd_DataMapOfStringReal aMap;
605 myReals = new TDataStd_HDataMapOfStringReal(aMap);
607 myReals->ChangeMap().Assign(ND->GetRealsContainer());
612 if (!ND->GetStringsContainer().IsEmpty())
615 TDataStd_DataMapOfStringString aMap;
616 myStrings = new TDataStd_HDataMapOfStringString(aMap);
618 myStrings->ChangeMap().Assign(ND->GetStringsContainer());
623 if (!ND->GetBytesContainer().IsEmpty())
626 TDataStd_DataMapOfStringByte aMap;
627 myBytes = new TDataStd_HDataMapOfStringByte(aMap);
629 myBytes->ChangeMap().Assign(ND->GetBytesContainer());
633 // Arrays of integers
634 if (!ND->GetArraysOfIntegersContainer().IsEmpty())
636 if(!HasArraysOfIntegers()) {
637 TDataStd_DataMapOfStringHArray1OfInteger aMap;
638 myArraysOfIntegers = new TDataStd_HDataMapOfStringHArray1OfInteger(aMap);
640 TDataStd_DataMapIteratorOfDataMapOfStringHArray1OfInteger itr(ND->GetArraysOfIntegersContainer());
641 for (; itr.More(); itr.Next())
643 // Deep copy of the arrays
644 const Handle(TColStd_HArray1OfInteger)& ints = itr.Value();
645 Handle(TColStd_HArray1OfInteger) copied_ints;
648 Standard_Integer lower = ints->Lower(), i = lower, upper = ints->Upper();
649 copied_ints = new TColStd_HArray1OfInteger(lower, upper);
650 for (; i <= upper; i++)
652 copied_ints->SetValue(i, ints->Value(i));
655 myArraysOfIntegers->ChangeMap().Bind(itr.Key(), copied_ints);
660 if (!ND->GetArraysOfRealsContainer().IsEmpty())
662 if(!HasArraysOfReals()) {
663 TDataStd_DataMapOfStringHArray1OfReal aMap;
664 myArraysOfReals = new TDataStd_HDataMapOfStringHArray1OfReal(aMap);
666 TDataStd_DataMapIteratorOfDataMapOfStringHArray1OfReal itr(ND->GetArraysOfRealsContainer());
667 for (; itr.More(); itr.Next())
669 // Deep copy of the arrays
670 const Handle(TColStd_HArray1OfReal)& dbls = itr.Value();
671 Handle(TColStd_HArray1OfReal) copied_dbls;
674 Standard_Integer lower = dbls->Lower(), i = lower, upper = dbls->Upper();
675 copied_dbls = new TColStd_HArray1OfReal(lower, upper);
676 for (; i <= upper; i++)
678 copied_dbls->SetValue(i, dbls->Value(i));
681 myArraysOfReals->ChangeMap().Bind(itr.Key(), copied_dbls);
686 //=======================================================================
689 //=======================================================================
690 void TDataStd_NamedData::Paste (const Handle(TDF_Attribute)& Into,
691 const Handle(TDF_RelocationTable)& ) const
693 Handle(TDataStd_NamedData) ND = Handle(TDataStd_NamedData)::DownCast(Into);
694 if (ND.IsNull()) return;
697 if (HasIntegers() && !myIntegers->Map().IsEmpty())
699 if(!ND->HasIntegers()) {
700 TColStd_DataMapOfStringInteger aMap;
701 ND->myIntegers = new TDataStd_HDataMapOfStringInteger(aMap);
703 ND->myIntegers->ChangeMap().Assign(myIntegers->Map());
707 if (HasReals() && !myReals->Map().IsEmpty())
709 if(!ND->HasReals()) {
710 TDataStd_DataMapOfStringReal aMap;
711 ND->myReals = new TDataStd_HDataMapOfStringReal(aMap);
713 ND->myReals->ChangeMap().Assign(myReals->Map());
718 if (HasStrings() && !myStrings->Map().IsEmpty())
720 if(!ND->HasStrings()) {
721 TDataStd_DataMapOfStringString aMap;
722 ND->myStrings = new TDataStd_HDataMapOfStringString(aMap);
724 ND->myStrings->ChangeMap().Assign(myStrings->Map());
728 if (HasBytes() && !myBytes->Map().IsEmpty())
730 if(!ND->HasBytes()) {
731 TDataStd_DataMapOfStringByte aMap;
732 ND->myBytes = new TDataStd_HDataMapOfStringByte(aMap);
734 ND->myBytes->ChangeMap().Assign(myBytes->Map());
737 // Arrays of integers
738 if (HasArraysOfIntegers() && !myArraysOfIntegers->Map().IsEmpty())
740 if(!ND->HasArraysOfIntegers()) {
741 TDataStd_DataMapOfStringHArray1OfInteger aMap;
742 ND->myArraysOfIntegers = new TDataStd_HDataMapOfStringHArray1OfInteger(aMap);
745 TDataStd_DataMapIteratorOfDataMapOfStringHArray1OfInteger itr(myArraysOfIntegers->Map());
746 for (; itr.More(); itr.Next())
748 const Handle(TColStd_HArray1OfInteger)& ints = itr.Value();
749 Handle(TColStd_HArray1OfInteger) copied_ints;
752 Standard_Integer lower = ints->Lower(), i = lower, upper = ints->Upper();
753 copied_ints = new TColStd_HArray1OfInteger(lower, upper);
754 for (; i <= upper; i++)
756 copied_ints->SetValue(i, ints->Value(i));
759 ND->myArraysOfIntegers->ChangeMap().Bind(itr.Key(), copied_ints);
764 if (HasArraysOfReals() && !myArraysOfReals->Map().IsEmpty())
766 if(!ND->HasArraysOfReals()) {
767 TDataStd_DataMapOfStringHArray1OfReal aMap;
768 ND->myArraysOfReals = new TDataStd_HDataMapOfStringHArray1OfReal(aMap);
770 TDataStd_DataMapIteratorOfDataMapOfStringHArray1OfReal itr(myArraysOfReals->Map());
771 for (; itr.More(); itr.Next())
773 const Handle(TColStd_HArray1OfReal)& dbls = itr.Value();
774 Handle(TColStd_HArray1OfReal) copied_dbls;
777 Standard_Integer lower = dbls->Lower(), i = lower, upper = dbls->Upper();
778 copied_dbls = new TColStd_HArray1OfReal(lower, upper);
779 for (; i <= upper; i++)
781 copied_dbls->SetValue(i, dbls->Value(i));
784 ND->myArraysOfReals->ChangeMap().Bind(itr.Key(), copied_dbls);
789 //=======================================================================
792 //=======================================================================
793 Standard_OStream& TDataStd_NamedData::Dump (Standard_OStream& anOS) const
795 anOS << "NamedData: ";
796 anOS << "\tIntegers = " << HasIntegers() ? myIntegers->Map().Extent() : 0;
797 anOS << "\tReals = " << HasReals() ? myReals->Map().Extent() : 0;
798 anOS << "\tStrings = " << HasStrings() ? myStrings->Map().Extent() : 0;
799 anOS << "\tBytes = " << HasBytes() ? myBytes->Map().Extent() : 0;
800 anOS << "\tArraysOfIntegers = " << HasArraysOfIntegers() ? myArraysOfIntegers->Map().Extent() : 0;
801 anOS << "\tArraysOfReals = " << HasArraysOfReals() ? myArraysOfReals->Map().Extent() : 0;