1 // Created on: 2007-06-27
2 // Created by: Sergey ZARITCHNY
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 <MDataStd_NamedDataStorageDriver.ixx>
22 #include <CDM_MessageDriver.hxx>
23 #include <PCollection_HExtendedString.hxx>
24 #include <TColStd_HArray2OfInteger.hxx>
25 #include <TColStd_HArray1OfReal.hxx>
26 #include <TColStd_HArray1OfInteger.hxx>
27 #include <PColStd_HArray1OfReal.hxx>
28 #include <PColStd_HArray1OfInteger.hxx>
29 #include <PDataStd_NamedData.hxx>
30 #include <TDataStd_NamedData.hxx>
31 #include <TColStd_DataMapOfStringInteger.hxx>
32 #include <TDataStd_DataMapOfStringReal.hxx>
33 #include <TDataStd_DataMapOfStringString.hxx>
34 #include <TDataStd_DataMapOfStringByte.hxx>
35 #include <TDataStd_DataMapOfStringHArray1OfInteger.hxx>
36 #include <TDataStd_DataMapOfStringHArray1OfReal.hxx>
37 #include <TColStd_DataMapIteratorOfDataMapOfStringInteger.hxx>
38 #include <TDataStd_DataMapIteratorOfDataMapOfStringReal.hxx>
39 #include <TDataStd_DataMapIteratorOfDataMapOfStringString.hxx>
40 #include <TDataStd_DataMapIteratorOfDataMapOfStringByte.hxx>
41 #include <TDataStd_DataMapIteratorOfDataMapOfStringHArray1OfInteger.hxx>
42 #include <TDataStd_DataMapIteratorOfDataMapOfStringHArray1OfReal.hxx>
46 //=======================================================================
47 //function : MDataStd_NamedDataStorageDriver
49 //=======================================================================
50 MDataStd_NamedDataStorageDriver::MDataStd_NamedDataStorageDriver(const Handle(CDM_MessageDriver)& theMsgDriver):MDF_ASDriver(theMsgDriver)
55 //=======================================================================
56 //function : VersionNumber
58 //=======================================================================
59 Standard_Integer MDataStd_NamedDataStorageDriver::VersionNumber() const
64 //=======================================================================
65 //function : SourceType
67 //=======================================================================
68 Handle(Standard_Type) MDataStd_NamedDataStorageDriver::SourceType() const
70 static Handle(Standard_Type) sourceType = STANDARD_TYPE(TDataStd_NamedData);
74 //=======================================================================
77 //=======================================================================
78 Handle(PDF_Attribute) MDataStd_NamedDataStorageDriver::NewEmpty() const
80 return new PDataStd_NamedData();
83 //=======================================================================
86 //=======================================================================
87 void MDataStd_NamedDataStorageDriver::Paste(const Handle(TDF_Attribute)& Source,
88 const Handle(PDF_Attribute)& Target,
89 const Handle(MDF_SRelocationTable)& /*RelocTable*/) const
91 Handle(TDataStd_NamedData) S = Handle(TDataStd_NamedData)::DownCast (Source);
92 Handle(PDataStd_NamedData) T = Handle(PDataStd_NamedData)::DownCast (Target);
94 if(S.IsNull() || T.IsNull()) return;
96 Handle(TColStd_HArray2OfInteger) aDim = new TColStd_HArray2OfInteger(1,ROW_NUMBER, 1, 2, 0);
97 if(S->HasIntegers() && !S->GetIntegersContainer().IsEmpty()) {
98 aDim->SetValue (i,1,1);
99 aDim->SetValue (i,2,S->GetIntegersContainer().Extent());
102 if(S->HasReals() && !S->GetRealsContainer().IsEmpty()) {
103 aDim->SetValue (i,1,1);
104 aDim->SetValue (i,2,S->GetRealsContainer().Extent());
107 if(S->HasStrings() && !S->GetStringsContainer().IsEmpty()) {
108 aDim->SetValue (i,1,1);
109 aDim->SetValue (i,2,S->GetStringsContainer().Extent());
112 if(S->HasBytes() && !S->GetBytesContainer().IsEmpty()) {
113 aDim->SetValue (i,1,1);
114 aDim->SetValue (i,2,S->GetBytesContainer().Extent());
117 if(S->HasArraysOfIntegers() && !S->GetArraysOfIntegersContainer().IsEmpty()) {
118 aDim->SetValue (i,1,1);
119 aDim->SetValue (i,2,S->GetArraysOfIntegersContainer().Extent());
122 if(S->HasArraysOfReals() && !S->GetArraysOfRealsContainer().IsEmpty()) {
123 aDim->SetValue (i,1,1);
124 aDim->SetValue (i,2,S->GetArraysOfRealsContainer().Extent());
129 if(S->HasIntegers() && !S->GetIntegersContainer().IsEmpty()) {
130 TColStd_DataMapIteratorOfDataMapOfStringInteger itr(S->GetIntegersContainer());
131 for (i=1; itr.More(); itr.Next(),i++) {
132 Handle(PCollection_HExtendedString) aKey = new PCollection_HExtendedString(itr.Key());
133 T->SetIntDataItem (i, aKey, itr.Value());
136 if(S->HasReals() && !S->GetRealsContainer().IsEmpty()) {
137 TDataStd_DataMapIteratorOfDataMapOfStringReal itr(S->GetRealsContainer());
138 for (i=1; itr.More(); itr.Next(),i++) {
139 Handle(PCollection_HExtendedString) aKey = new PCollection_HExtendedString(itr.Key());
140 T->SetRealDataItem (i, aKey, itr.Value());
143 if(S->HasStrings() && !S->GetStringsContainer().IsEmpty()) {
144 TDataStd_DataMapIteratorOfDataMapOfStringString itr(S->GetStringsContainer());
145 for (i=1; itr.More(); itr.Next(),i++) {
146 Handle(PCollection_HExtendedString) aKey = new PCollection_HExtendedString(itr.Key());
147 Handle(PCollection_HExtendedString) aValue = new PCollection_HExtendedString(itr.Value());
148 T->SetStrDataItem (i, aKey, aValue);
151 if(S->HasBytes() && !S->GetBytesContainer().IsEmpty()) {
152 TDataStd_DataMapIteratorOfDataMapOfStringByte itr(S->GetBytesContainer());
153 for (i=1; itr.More(); itr.Next(),i++) {
154 Handle(PCollection_HExtendedString) aKey = new PCollection_HExtendedString(itr.Key());
155 T->SetByteDataItem (i, aKey, itr.Value());
158 if(S->HasArraysOfIntegers() && !S->GetArraysOfIntegersContainer().IsEmpty()) {
159 TDataStd_DataMapIteratorOfDataMapOfStringHArray1OfInteger itr(S->GetArraysOfIntegersContainer());
160 for (i=1; itr.More(); itr.Next(),i++) {
161 Handle(PCollection_HExtendedString) aKey = new PCollection_HExtendedString(itr.Key());
162 const Handle(TColStd_HArray1OfInteger)& anArr1 = itr.Value();
163 Handle(PColStd_HArray1OfInteger) anArr2 =
164 new PColStd_HArray1OfInteger(anArr1->Lower(), anArr1->Upper());
165 for(Standard_Integer j= anArr1->Lower(); j<=anArr1->Upper();j++) {
166 anArr2->SetValue(j, anArr1->Value(j));
168 T->SetArrIntDataItem (i, aKey, anArr2);
171 if(S->HasArraysOfReals() && !S->GetArraysOfRealsContainer().IsEmpty()) {
172 TDataStd_DataMapIteratorOfDataMapOfStringHArray1OfReal itr(S->GetArraysOfRealsContainer());
173 for (i=1; itr.More(); itr.Next(),i++) {
174 Handle(PCollection_HExtendedString) aKey = new PCollection_HExtendedString(itr.Key());
175 const Handle(TColStd_HArray1OfReal)& anArr1 = itr.Value();
176 Handle(PColStd_HArray1OfReal) anArr2 =
177 new PColStd_HArray1OfReal(anArr1->Lower(), anArr1->Upper());
178 for(Standard_Integer j= anArr1->Lower(); j<=anArr1->Upper();j++) {
179 anArr2->SetValue(j, anArr1->Value(j));
181 T->SetArrRealDataItem (i, aKey, anArr2);