1 // File: TDataStd_RealArray.cxx
2 // Created: Wed Jun 16 10:32:25 1999
6 #include <TDataStd_RealArray.ixx>
7 #include <TDataStd_DeltaOnModificationOfRealArray.hxx>
8 #include <TDF_DefaultDeltaOnModification.hxx>
11 //=======================================================================
14 //=======================================================================
16 const Standard_GUID& TDataStd_RealArray::GetID()
18 static Standard_GUID TDataStd_RealArrayID ("2a96b61e-ec8b-11d0-bee7-080009dc3333");
19 return TDataStd_RealArrayID;
23 //=======================================================================
24 //function : TDataStd_RealArray
25 //purpose : Empty Constructor
26 //=======================================================================
28 TDataStd_RealArray::TDataStd_RealArray() : myIsDelta(Standard_False){}
30 //=======================================================================
33 //=======================================================================
35 void TDataStd_RealArray::Init(const Standard_Integer lower,
36 const Standard_Integer upper)
38 Backup(); // jfa 15.01.2003 for LH3D1378
40 myValue = new TColStd_HArray1OfReal(lower, upper, 0.);
43 //=======================================================================
46 //=======================================================================
48 Handle(TDataStd_RealArray) TDataStd_RealArray::Set
49 (const TDF_Label& label,
50 const Standard_Integer lower,
51 const Standard_Integer upper,
52 const Standard_Boolean isDelta)
54 Handle(TDataStd_RealArray) A;
55 if (!label.FindAttribute (TDataStd_RealArray::GetID(), A)) {
56 A = new TDataStd_RealArray;
57 A->Init (lower, upper);
59 label.AddAttribute(A);
61 else if (lower != A->Lower() || upper != A->Upper())
63 A->Init (lower, upper);
69 //=======================================================================
72 //=======================================================================
74 void TDataStd_RealArray::SetValue (const Standard_Integer index,
75 const Standard_Real value)
78 if(myValue.IsNull()) return;
79 if(myValue->Value(index) == value)
83 myValue->SetValue(index, value);
87 //=======================================================================
90 //=======================================================================
92 Standard_Real TDataStd_RealArray::Value (const Standard_Integer index) const
94 if(myValue.IsNull()) return RealFirst();
95 return myValue->Value(index);
100 //=======================================================================
103 //=======================================================================
104 Standard_Integer TDataStd_RealArray::Lower (void) const
106 if(myValue.IsNull()) return 0;
107 return myValue->Lower();
111 //=======================================================================
114 //=======================================================================
115 Standard_Integer TDataStd_RealArray::Upper (void) const
117 if(myValue.IsNull()) return 0;
118 return myValue->Upper();
122 //=======================================================================
125 //=======================================================================
126 Standard_Integer TDataStd_RealArray::Length (void) const
128 if(myValue.IsNull()) return 0;
129 return myValue->Length();
133 //=======================================================================
134 //function : ChangeArray
135 //purpose : If value of <newArray> differs from <myValue>, Backup
136 // : performed and myValue refers to new instance of HArray1OfReal
137 // : that holds <newArray>
138 //=======================================================================
140 void TDataStd_RealArray::ChangeArray(const Handle(TColStd_HArray1OfReal)& newArray,
141 const Standard_Boolean isCheckItems)
143 Standard_Integer aLower = newArray->Lower();
144 Standard_Integer anUpper = newArray->Upper();
145 Standard_Boolean aDimEqual = Standard_False;
149 if (Lower() == aLower && Upper() == anUpper ) {
150 aDimEqual = Standard_True;
151 Standard_Boolean isEqual = Standard_True;
153 for(i = aLower; i <= anUpper; i++) {
154 if(myValue->Value(i) != newArray->Value(i)) {
155 isEqual = Standard_False;
167 if(myValue.IsNull() || !aDimEqual)
168 myValue = new TColStd_HArray1OfReal(aLower, anUpper);
170 for(i = aLower; i <= anUpper; i++)
171 myValue->SetValue(i, newArray->Value(i));
174 //=======================================================================
177 //=======================================================================
179 const Standard_GUID& TDataStd_RealArray::ID () const { return GetID(); }
182 //=======================================================================
183 //function : NewEmpty
185 //=======================================================================
187 Handle(TDF_Attribute) TDataStd_RealArray::NewEmpty () const
189 return new TDataStd_RealArray();
192 //=======================================================================
195 //=======================================================================
197 void TDataStd_RealArray::Restore(const Handle(TDF_Attribute)& With)
199 Standard_Integer i, lower, upper;
200 Handle(TDataStd_RealArray) anArray = Handle(TDataStd_RealArray)::DownCast(With);
201 if(!anArray->myValue.IsNull()) {
202 lower = anArray->Lower();
203 upper = anArray->Upper();
204 myIsDelta = anArray->myIsDelta;
205 myValue = new TColStd_HArray1OfReal(lower, upper);
206 for(i = lower; i<=upper; i++)
207 myValue->SetValue(i, anArray->Value(i));
213 //=======================================================================
216 //=======================================================================
218 void TDataStd_RealArray::Paste (const Handle(TDF_Attribute)& Into,
219 const Handle(TDF_RelocationTable)& ) const
221 if(!myValue.IsNull()) {
222 Handle(TDataStd_RealArray) anAtt = Handle(TDataStd_RealArray)::DownCast(Into);
223 if(!anAtt.IsNull()) {
224 anAtt->ChangeArray( myValue, Standard_False );
225 anAtt->SetDelta(myIsDelta);
230 //=======================================================================
233 //=======================================================================
235 Standard_OStream& TDataStd_RealArray::Dump (Standard_OStream& anOS) const
237 anOS << "\nRealArray::" << this <<" :";
238 if(!myValue.IsNull()) {
239 Standard_Integer i, lower, upper;
240 lower = myValue->Lower();
241 upper = myValue->Upper();
242 for(i = lower; i<=upper; i++)
243 anOS << " " <<myValue->Value(i);
245 anOS << " Delta is " << myIsDelta ? "ON":"OFF";
250 //=======================================================================
251 //function : DeltaOnModification
253 //=======================================================================
255 Handle(TDF_DeltaOnModification) TDataStd_RealArray::DeltaOnModification
256 (const Handle(TDF_Attribute)& OldAtt) const
259 return new TDataStd_DeltaOnModificationOfRealArray(*((Handle(TDataStd_RealArray)*)&OldAtt));
260 else return new TDF_DefaultDeltaOnModification(OldAtt);