7fd59977 |
1 | // File: MDataStd_NamedDataStorageDriver.cxx |
2 | // Created: Wed Jun 27 17:25:05 2007 |
3 | // Author: Sergey ZARITCHNY |
4 | // <szy@friendox> |
5 | // Copyright: Open CASCADE SA 2007 |
6 | |
7 | #include <MDataStd_NamedDataStorageDriver.ixx> |
8 | #include <CDM_MessageDriver.hxx> |
9 | #include <PCollection_HExtendedString.hxx> |
10 | #include <TColStd_HArray2OfInteger.hxx> |
11 | #include <TColStd_HArray1OfReal.hxx> |
12 | #include <TColStd_HArray1OfInteger.hxx> |
13 | #include <PColStd_HArray1OfReal.hxx> |
14 | #include <PColStd_HArray1OfInteger.hxx> |
15 | #include <PDataStd_NamedData.hxx> |
16 | #include <TDataStd_NamedData.hxx> |
17 | #include <TColStd_DataMapOfStringInteger.hxx> |
18 | #include <TDataStd_DataMapOfStringReal.hxx> |
19 | #include <TDataStd_DataMapOfStringString.hxx> |
20 | #include <TDataStd_DataMapOfStringByte.hxx> |
21 | #include <TDataStd_DataMapOfStringHArray1OfInteger.hxx> |
22 | #include <TDataStd_DataMapOfStringHArray1OfReal.hxx> |
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> |
29 | |
30 | #define ROW_NUMBER 6 |
31 | |
32 | //======================================================================= |
33 | //function : MDataStd_NamedDataStorageDriver |
34 | //purpose : |
35 | //======================================================================= |
36 | MDataStd_NamedDataStorageDriver::MDataStd_NamedDataStorageDriver(const Handle(CDM_MessageDriver)& theMsgDriver):MDF_ASDriver(theMsgDriver) |
37 | { |
38 | |
39 | } |
40 | |
41 | //======================================================================= |
42 | //function : VersionNumber |
43 | //purpose : |
44 | //======================================================================= |
45 | Standard_Integer MDataStd_NamedDataStorageDriver::VersionNumber() const |
46 | { |
47 | return 0; |
48 | } |
49 | |
50 | //======================================================================= |
51 | //function : SourceType |
52 | //purpose : |
53 | //======================================================================= |
54 | Handle(Standard_Type) MDataStd_NamedDataStorageDriver::SourceType() const |
55 | { |
56 | static Handle(Standard_Type) sourceType = STANDARD_TYPE(TDataStd_NamedData); |
57 | return sourceType; |
58 | } |
59 | |
60 | //======================================================================= |
61 | //function : NewEmpty |
62 | //purpose : |
63 | //======================================================================= |
64 | Handle(PDF_Attribute) MDataStd_NamedDataStorageDriver::NewEmpty() const |
65 | { |
66 | return new PDataStd_NamedData(); |
67 | } |
68 | |
69 | //======================================================================= |
70 | //function : Paste |
71 | //purpose : |
72 | //======================================================================= |
73 | void MDataStd_NamedDataStorageDriver::Paste(const Handle(TDF_Attribute)& Source, |
74 | const Handle(PDF_Attribute)& Target, |
75 | const Handle(MDF_SRelocationTable)& RelocTable) const |
76 | { |
77 | Handle(TDataStd_NamedData) S = Handle(TDataStd_NamedData)::DownCast (Source); |
78 | Handle(PDataStd_NamedData) T = Handle(PDataStd_NamedData)::DownCast (Target); |
79 | |
80 | if(S.IsNull() || T.IsNull()) return; |
81 | Standard_Integer i=1; |
82 | Handle(TColStd_HArray2OfInteger) aDim = new TColStd_HArray2OfInteger(1,ROW_NUMBER, 1, 2, 0); |
83 | if(S->HasIntegers() && !S->GetIntegersContainer().IsEmpty()) { |
84 | aDim->SetValue (i,1,1); |
85 | aDim->SetValue (i,2,S->GetIntegersContainer().Extent()); |
86 | } |
87 | i++; |
88 | if(S->HasReals() && !S->GetRealsContainer().IsEmpty()) { |
89 | aDim->SetValue (i,1,1); |
90 | aDim->SetValue (i,2,S->GetRealsContainer().Extent()); |
91 | } |
92 | i++; |
93 | if(S->HasStrings() && !S->GetStringsContainer().IsEmpty()) { |
94 | aDim->SetValue (i,1,1); |
95 | aDim->SetValue (i,2,S->GetStringsContainer().Extent()); |
96 | } |
97 | i++; |
98 | if(S->HasBytes() && !S->GetBytesContainer().IsEmpty()) { |
99 | aDim->SetValue (i,1,1); |
100 | aDim->SetValue (i,2,S->GetBytesContainer().Extent()); |
101 | } |
102 | i++; |
103 | if(S->HasArraysOfIntegers() && !S->GetArraysOfIntegersContainer().IsEmpty()) { |
104 | aDim->SetValue (i,1,1); |
105 | aDim->SetValue (i,2,S->GetArraysOfIntegersContainer().Extent()); |
106 | } |
107 | i++; |
108 | if(S->HasArraysOfReals() && !S->GetArraysOfRealsContainer().IsEmpty()) { |
109 | aDim->SetValue (i,1,1); |
110 | aDim->SetValue (i,2,S->GetArraysOfRealsContainer().Extent()); |
111 | } |
112 | |
113 | T->Init(aDim); |
114 | |
115 | if(S->HasIntegers() && !S->GetIntegersContainer().IsEmpty()) { |
116 | TColStd_DataMapIteratorOfDataMapOfStringInteger itr(S->GetIntegersContainer()); |
117 | for (i=1; itr.More(); itr.Next(),i++) { |
118 | Handle(PCollection_HExtendedString) aKey = new PCollection_HExtendedString(itr.Key()); |
119 | T->SetIntDataItem (i, aKey, itr.Value()); |
120 | } |
121 | } |
122 | if(S->HasReals() && !S->GetRealsContainer().IsEmpty()) { |
123 | TDataStd_DataMapIteratorOfDataMapOfStringReal itr(S->GetRealsContainer()); |
124 | for (i=1; itr.More(); itr.Next(),i++) { |
125 | Handle(PCollection_HExtendedString) aKey = new PCollection_HExtendedString(itr.Key()); |
126 | T->SetRealDataItem (i, aKey, itr.Value()); |
127 | } |
128 | } |
129 | if(S->HasStrings() && !S->GetStringsContainer().IsEmpty()) { |
130 | TDataStd_DataMapIteratorOfDataMapOfStringString itr(S->GetStringsContainer()); |
131 | for (i=1; itr.More(); itr.Next(),i++) { |
132 | Handle(PCollection_HExtendedString) aKey = new PCollection_HExtendedString(itr.Key()); |
133 | Handle(PCollection_HExtendedString) aValue = new PCollection_HExtendedString(itr.Value()); |
134 | T->SetStrDataItem (i, aKey, aValue); |
135 | } |
136 | } |
137 | if(S->HasBytes() && !S->GetBytesContainer().IsEmpty()) { |
138 | TDataStd_DataMapIteratorOfDataMapOfStringByte itr(S->GetBytesContainer()); |
139 | for (i=1; itr.More(); itr.Next(),i++) { |
140 | Handle(PCollection_HExtendedString) aKey = new PCollection_HExtendedString(itr.Key()); |
141 | T->SetByteDataItem (i, aKey, itr.Value()); |
142 | } |
143 | } |
144 | if(S->HasArraysOfIntegers() && !S->GetArraysOfIntegersContainer().IsEmpty()) { |
145 | TDataStd_DataMapIteratorOfDataMapOfStringHArray1OfInteger itr(S->GetArraysOfIntegersContainer()); |
146 | for (i=1; itr.More(); itr.Next(),i++) { |
147 | Handle(PCollection_HExtendedString) aKey = new PCollection_HExtendedString(itr.Key()); |
148 | const Handle(TColStd_HArray1OfInteger)& anArr1 = itr.Value(); |
149 | Handle(PColStd_HArray1OfInteger) anArr2 = |
150 | new PColStd_HArray1OfInteger(anArr1->Lower(), anArr1->Upper()); |
151 | for(Standard_Integer j= anArr1->Lower(); j<=anArr1->Upper();j++) { |
152 | anArr2->SetValue(j, anArr1->Value(j)); |
153 | } |
154 | T->SetArrIntDataItem (i, aKey, anArr2); |
155 | } |
156 | } |
157 | if(S->HasArraysOfReals() && !S->GetArraysOfRealsContainer().IsEmpty()) { |
158 | TDataStd_DataMapIteratorOfDataMapOfStringHArray1OfReal itr(S->GetArraysOfRealsContainer()); |
159 | for (i=1; itr.More(); itr.Next(),i++) { |
160 | Handle(PCollection_HExtendedString) aKey = new PCollection_HExtendedString(itr.Key()); |
161 | const Handle(TColStd_HArray1OfReal)& anArr1 = itr.Value(); |
162 | Handle(PColStd_HArray1OfReal) anArr2 = |
163 | new PColStd_HArray1OfReal(anArr1->Lower(), anArr1->Upper()); |
164 | for(Standard_Integer j= anArr1->Lower(); j<=anArr1->Upper();j++) { |
165 | anArr2->SetValue(j, anArr1->Value(j)); |
166 | } |
167 | T->SetArrRealDataItem (i, aKey, anArr2); |
168 | } |
169 | } |
170 | } |
171 | |