1 // Created on: 2007-06-27
2 // Created by: Sergey ZARITCHNY
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 <MDataStd_NamedDataStorageDriver.ixx>
17 #include <CDM_MessageDriver.hxx>
18 #include <PCollection_HExtendedString.hxx>
19 #include <TColStd_HArray2OfInteger.hxx>
20 #include <TColStd_HArray1OfReal.hxx>
21 #include <TColStd_HArray1OfInteger.hxx>
22 #include <PColStd_HArray1OfReal.hxx>
23 #include <PColStd_HArray1OfInteger.hxx>
24 #include <PDataStd_NamedData.hxx>
25 #include <TDataStd_NamedData.hxx>
26 #include <TColStd_DataMapOfStringInteger.hxx>
27 #include <TDataStd_DataMapOfStringReal.hxx>
28 #include <TDataStd_DataMapOfStringString.hxx>
29 #include <TDataStd_DataMapOfStringByte.hxx>
30 #include <TDataStd_DataMapOfStringHArray1OfInteger.hxx>
31 #include <TDataStd_DataMapOfStringHArray1OfReal.hxx>
32 #include <TColStd_DataMapIteratorOfDataMapOfStringInteger.hxx>
33 #include <TDataStd_DataMapIteratorOfDataMapOfStringReal.hxx>
34 #include <TDataStd_DataMapIteratorOfDataMapOfStringString.hxx>
35 #include <TDataStd_DataMapIteratorOfDataMapOfStringByte.hxx>
36 #include <TDataStd_DataMapIteratorOfDataMapOfStringHArray1OfInteger.hxx>
37 #include <TDataStd_DataMapIteratorOfDataMapOfStringHArray1OfReal.hxx>
41 //=======================================================================
42 //function : MDataStd_NamedDataStorageDriver
44 //=======================================================================
45 MDataStd_NamedDataStorageDriver::MDataStd_NamedDataStorageDriver(const Handle(CDM_MessageDriver)& theMsgDriver):MDF_ASDriver(theMsgDriver)
50 //=======================================================================
51 //function : VersionNumber
53 //=======================================================================
54 Standard_Integer MDataStd_NamedDataStorageDriver::VersionNumber() const
59 //=======================================================================
60 //function : SourceType
62 //=======================================================================
63 Handle(Standard_Type) MDataStd_NamedDataStorageDriver::SourceType() const
65 static Handle(Standard_Type) sourceType = STANDARD_TYPE(TDataStd_NamedData);
69 //=======================================================================
72 //=======================================================================
73 Handle(PDF_Attribute) MDataStd_NamedDataStorageDriver::NewEmpty() const
75 return new PDataStd_NamedData();
78 //=======================================================================
81 //=======================================================================
82 void MDataStd_NamedDataStorageDriver::Paste(const Handle(TDF_Attribute)& Source,
83 const Handle(PDF_Attribute)& Target,
84 const Handle(MDF_SRelocationTable)& /*RelocTable*/) const
86 Handle(TDataStd_NamedData) S = Handle(TDataStd_NamedData)::DownCast (Source);
87 Handle(PDataStd_NamedData) T = Handle(PDataStd_NamedData)::DownCast (Target);
89 if(S.IsNull() || T.IsNull()) return;
91 Handle(TColStd_HArray2OfInteger) aDim = new TColStd_HArray2OfInteger(1,ROW_NUMBER, 1, 2, 0);
92 if(S->HasIntegers() && !S->GetIntegersContainer().IsEmpty()) {
93 aDim->SetValue (i,1,1);
94 aDim->SetValue (i,2,S->GetIntegersContainer().Extent());
97 if(S->HasReals() && !S->GetRealsContainer().IsEmpty()) {
98 aDim->SetValue (i,1,1);
99 aDim->SetValue (i,2,S->GetRealsContainer().Extent());
102 if(S->HasStrings() && !S->GetStringsContainer().IsEmpty()) {
103 aDim->SetValue (i,1,1);
104 aDim->SetValue (i,2,S->GetStringsContainer().Extent());
107 if(S->HasBytes() && !S->GetBytesContainer().IsEmpty()) {
108 aDim->SetValue (i,1,1);
109 aDim->SetValue (i,2,S->GetBytesContainer().Extent());
112 if(S->HasArraysOfIntegers() && !S->GetArraysOfIntegersContainer().IsEmpty()) {
113 aDim->SetValue (i,1,1);
114 aDim->SetValue (i,2,S->GetArraysOfIntegersContainer().Extent());
117 if(S->HasArraysOfReals() && !S->GetArraysOfRealsContainer().IsEmpty()) {
118 aDim->SetValue (i,1,1);
119 aDim->SetValue (i,2,S->GetArraysOfRealsContainer().Extent());
124 if(S->HasIntegers() && !S->GetIntegersContainer().IsEmpty()) {
125 TColStd_DataMapIteratorOfDataMapOfStringInteger itr(S->GetIntegersContainer());
126 for (i=1; itr.More(); itr.Next(),i++) {
127 Handle(PCollection_HExtendedString) aKey = new PCollection_HExtendedString(itr.Key());
128 T->SetIntDataItem (i, aKey, itr.Value());
131 if(S->HasReals() && !S->GetRealsContainer().IsEmpty()) {
132 TDataStd_DataMapIteratorOfDataMapOfStringReal itr(S->GetRealsContainer());
133 for (i=1; itr.More(); itr.Next(),i++) {
134 Handle(PCollection_HExtendedString) aKey = new PCollection_HExtendedString(itr.Key());
135 T->SetRealDataItem (i, aKey, itr.Value());
138 if(S->HasStrings() && !S->GetStringsContainer().IsEmpty()) {
139 TDataStd_DataMapIteratorOfDataMapOfStringString itr(S->GetStringsContainer());
140 for (i=1; itr.More(); itr.Next(),i++) {
141 Handle(PCollection_HExtendedString) aKey = new PCollection_HExtendedString(itr.Key());
142 Handle(PCollection_HExtendedString) aValue = new PCollection_HExtendedString(itr.Value());
143 T->SetStrDataItem (i, aKey, aValue);
146 if(S->HasBytes() && !S->GetBytesContainer().IsEmpty()) {
147 TDataStd_DataMapIteratorOfDataMapOfStringByte itr(S->GetBytesContainer());
148 for (i=1; itr.More(); itr.Next(),i++) {
149 Handle(PCollection_HExtendedString) aKey = new PCollection_HExtendedString(itr.Key());
150 T->SetByteDataItem (i, aKey, itr.Value());
153 if(S->HasArraysOfIntegers() && !S->GetArraysOfIntegersContainer().IsEmpty()) {
154 TDataStd_DataMapIteratorOfDataMapOfStringHArray1OfInteger itr(S->GetArraysOfIntegersContainer());
155 for (i=1; itr.More(); itr.Next(),i++) {
156 Handle(PCollection_HExtendedString) aKey = new PCollection_HExtendedString(itr.Key());
157 const Handle(TColStd_HArray1OfInteger)& anArr1 = itr.Value();
158 Handle(PColStd_HArray1OfInteger) anArr2 =
159 new PColStd_HArray1OfInteger(anArr1->Lower(), anArr1->Upper());
160 for(Standard_Integer j= anArr1->Lower(); j<=anArr1->Upper();j++) {
161 anArr2->SetValue(j, anArr1->Value(j));
163 T->SetArrIntDataItem (i, aKey, anArr2);
166 if(S->HasArraysOfReals() && !S->GetArraysOfRealsContainer().IsEmpty()) {
167 TDataStd_DataMapIteratorOfDataMapOfStringHArray1OfReal itr(S->GetArraysOfRealsContainer());
168 for (i=1; itr.More(); itr.Next(),i++) {
169 Handle(PCollection_HExtendedString) aKey = new PCollection_HExtendedString(itr.Key());
170 const Handle(TColStd_HArray1OfReal)& anArr1 = itr.Value();
171 Handle(PColStd_HArray1OfReal) anArr2 =
172 new PColStd_HArray1OfReal(anArr1->Lower(), anArr1->Upper());
173 for(Standard_Integer j= anArr1->Lower(); j<=anArr1->Upper();j++) {
174 anArr2->SetValue(j, anArr1->Value(j));
176 T->SetArrRealDataItem (i, aKey, anArr2);