0022685: Missing parentheses around trigraph operator
[occt.git] / src / TDataStd / TDataStd_RealArray.cxx
1 // File:        TDataStd_RealArray.cxx
2 // Created:     Wed Jun  16 10:32:25 1999
3 // Author:      Sergey RUIN
4
5
6 #include <TDataStd_RealArray.ixx>
7 #include <TDataStd_DeltaOnModificationOfRealArray.hxx>
8 #include <TDF_DefaultDeltaOnModification.hxx>
9 #define OCC2932
10
11 //=======================================================================
12 //function : GetID
13 //purpose  : 
14 //=======================================================================
15
16 const Standard_GUID& TDataStd_RealArray::GetID() 
17
18   static Standard_GUID TDataStd_RealArrayID ("2a96b61e-ec8b-11d0-bee7-080009dc3333");
19   return TDataStd_RealArrayID; 
20 }
21
22
23 //=======================================================================
24 //function : TDataStd_RealArray
25 //purpose  : Empty Constructor
26 //=======================================================================
27
28 TDataStd_RealArray::TDataStd_RealArray() : myIsDelta(Standard_False){}
29
30 //=======================================================================
31 //function : Init
32 //purpose  : 
33 //=======================================================================
34
35 void TDataStd_RealArray::Init(const Standard_Integer lower,
36                               const Standard_Integer upper)
37 {
38   Backup(); // jfa 15.01.2003 for LH3D1378
39
40   myValue = new TColStd_HArray1OfReal(lower, upper, 0.);
41 }
42
43 //=======================================================================
44 //function : Set
45 //purpose  : 
46 //=======================================================================
47
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) 
53 {
54   Handle(TDataStd_RealArray) A;
55   if (!label.FindAttribute (TDataStd_RealArray::GetID(), A)) {
56     A = new TDataStd_RealArray;
57     A->Init (lower, upper);
58     A->SetDelta(isDelta); 
59     label.AddAttribute(A);
60   }
61   else if (lower != A->Lower() || upper != A->Upper())
62   {
63     A->Init (lower, upper); 
64   }
65   return A;
66 }
67
68
69 //=======================================================================
70 //function : SetValue
71 //purpose  : 
72 //=======================================================================
73
74 void TDataStd_RealArray::SetValue (const Standard_Integer index,
75                                    const Standard_Real value) 
76 {
77   // OCC2932 correction
78   if(myValue.IsNull()) return;
79   if(myValue->Value(index) == value)
80     return; 
81
82   Backup();
83   myValue->SetValue(index, value);
84 }
85
86
87 //=======================================================================
88 //function : GetValue
89 //purpose  : 
90 //=======================================================================
91
92 Standard_Real TDataStd_RealArray::Value (const Standard_Integer index) const 
93 {
94   if(myValue.IsNull()) return RealFirst();
95   return myValue->Value(index); 
96 }
97
98
99
100 //=======================================================================
101 //function : Lower
102 //purpose  : 
103 //=======================================================================
104 Standard_Integer TDataStd_RealArray::Lower (void) const 
105
106   if(myValue.IsNull()) return 0;
107   return myValue->Lower(); 
108 }
109
110
111 //=======================================================================
112 //function : Upper
113 //purpose  : 
114 //=======================================================================
115 Standard_Integer TDataStd_RealArray::Upper (void) const 
116
117   if(myValue.IsNull()) return 0;
118   return myValue->Upper(); 
119 }
120
121
122 //=======================================================================
123 //function : Length
124 //purpose  : 
125 //=======================================================================
126 Standard_Integer TDataStd_RealArray::Length (void) const 
127 {
128   if(myValue.IsNull()) return 0;
129   return myValue->Length(); 
130 }
131
132
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 //=======================================================================
139
140 void TDataStd_RealArray::ChangeArray(const Handle(TColStd_HArray1OfReal)& newArray,
141                                         const Standard_Boolean isCheckItems) 
142 {
143   Standard_Integer aLower    = newArray->Lower();
144   Standard_Integer anUpper   = newArray->Upper();
145   Standard_Boolean aDimEqual = Standard_False;
146   Standard_Integer i;
147
148 #ifdef OCC2932
149   if (Lower() == aLower && Upper() == anUpper ) {
150     aDimEqual = Standard_True;
151     Standard_Boolean isEqual = Standard_True;
152     if(isCheckItems) {
153       for(i = aLower; i <= anUpper; i++) {
154         if(myValue->Value(i) != newArray->Value(i)) {
155           isEqual = Standard_False;
156           break;
157         }
158       }
159       if(isEqual)
160         return;
161     }
162   }
163 #endif
164
165   Backup();
166
167   if(myValue.IsNull() || !aDimEqual) 
168     myValue = new TColStd_HArray1OfReal(aLower, anUpper);
169
170   for(i = aLower; i <= anUpper; i++) 
171     myValue->SetValue(i, newArray->Value(i));
172 }
173
174 //=======================================================================
175 //function : ID
176 //purpose  : 
177 //=======================================================================
178
179 const Standard_GUID& TDataStd_RealArray::ID () const { return GetID(); }
180
181
182 //=======================================================================
183 //function : NewEmpty
184 //purpose  : 
185 //=======================================================================
186
187 Handle(TDF_Attribute) TDataStd_RealArray::NewEmpty () const
188 {  
189   return new TDataStd_RealArray(); 
190 }
191
192 //=======================================================================
193 //function : Restore
194 //purpose  : 
195 //=======================================================================
196
197 void TDataStd_RealArray::Restore(const Handle(TDF_Attribute)& With) 
198 {
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)); 
208   }
209   else
210     myValue.Nullify();
211 }
212
213 //=======================================================================
214 //function : Paste
215 //purpose  : 
216 //=======================================================================
217
218 void TDataStd_RealArray::Paste (const Handle(TDF_Attribute)& Into,
219                                 const Handle(TDF_RelocationTable)& ) const
220 {
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);
226     }
227   }
228 }
229
230 //=======================================================================
231 //function : Dump
232 //purpose  : 
233 //=======================================================================
234
235 Standard_OStream& TDataStd_RealArray::Dump (Standard_OStream& anOS) const
236 {  
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);
244   }
245   anOS << " Delta is " << (myIsDelta ? "ON":"OFF");
246   anOS << endl;
247   return anOS;
248 }
249
250 //=======================================================================
251 //function : DeltaOnModification
252 //purpose  : 
253 //=======================================================================
254
255 Handle(TDF_DeltaOnModification) TDataStd_RealArray::DeltaOnModification
256 (const Handle(TDF_Attribute)& OldAtt) const
257 {
258   if(myIsDelta)
259     return new TDataStd_DeltaOnModificationOfRealArray(*((Handle(TDataStd_RealArray)*)&OldAtt));
260   else return new TDF_DefaultDeltaOnModification(OldAtt);
261 }