1 // Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE
3 // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
6 // This library is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Lesser General Public
8 // License as published by the Free Software Foundation; either
9 // version 2.1 of the License.
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 // Lesser General Public License for more details.
16 // You should have received a copy of the GNU Lesser General Public
17 // License along with this library; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
22 // File : SALOME_EvalVariant.cxx
23 // Author : Peter KURNEV
26 #include <SALOME_EvalVariant.hxx>
31 //=======================================================================
32 //function : SALOME_EvalVariantData
34 //=======================================================================
35 SALOME_EvalVariantData::SALOME_EvalVariantData(const SALOME_EvalVariantData& other)
41 case SALOME_EvalVariant_String: {
42 RString& aStr=*(RString *)(other.myValue.myPtr);
43 RString *pStr=new RString(aStr);
44 myValue.myPtr=(void*)pStr;
48 case SALOME_EvalVariant_List: {
49 SALOME_ListOfEvalVariant& aX=*(SALOME_ListOfEvalVariant*)(other.myValue.myPtr);
50 SALOME_ListOfEvalVariant *p=new SALOME_ListOfEvalVariant(aX);
51 myValue.myPtr=(void*)p;
56 myValue=other.myValue;
60 //=======================================================================
61 //function : operator=
63 //=======================================================================
64 SALOME_EvalVariantData& SALOME_EvalVariantData::operator=(const SALOME_EvalVariantData& other)
69 case SALOME_EvalVariant_String: {
70 RString& aStr=*(string *)(other.myValue.myPtr);
71 RString *pStr=new RString(aStr);
72 myValue.myPtr=(void*)pStr;
76 case SALOME_EvalVariant_List: {
77 SALOME_ListOfEvalVariant& aX=*(SALOME_ListOfEvalVariant*)(other.myValue.myPtr);
78 SALOME_ListOfEvalVariant *p=new SALOME_ListOfEvalVariant(aX);
79 myValue.myPtr=(void*)p;
84 myValue=other.myValue;
89 //=======================================================================
90 //function : operator==
92 //=======================================================================
93 bool SALOME_EvalVariantData::operator==(const SALOME_EvalVariantData& theOther) const
97 bRet=myType==SALOME_EvalVariant_Invalid || theOther.myType==SALOME_EvalVariant_Invalid;
102 bRet=myType==theOther.myType;
108 case SALOME_EvalVariant_Boolean:
109 bRet=myValue.myBoolean==theOther.myValue.myBoolean;
112 case SALOME_EvalVariant_Int:
113 bRet=myValue.myInt==theOther.myValue.myInt;
116 case SALOME_EvalVariant_UInt:
117 bRet=myValue.myUInt==theOther.myValue.myUInt;
120 case SALOME_EvalVariant_Double:
121 bRet=myValue.myDouble==theOther.myValue.myDouble;
124 case SALOME_EvalVariant_String: {
125 bool bIsNull, bIsNullOther;
127 bIsNull=!myValue.myPtr;
128 bIsNullOther=!theOther.myValue.myPtr;
129 if (bIsNull && bIsNullOther) {
132 else if (bIsNull && !bIsNullOther) {
135 else if (!bIsNull && bIsNullOther) {
139 RString& myStr=*(RString *)(myValue.myPtr);
140 RString& aOther=*(RString *)(theOther.myValue.myPtr);
146 case SALOME_EvalVariant_List: {
147 bool bIsNull, bIsNullOther;
149 bIsNull=!myValue.myPtr;
150 bIsNullOther=!theOther.myValue.myPtr;
151 if (bIsNull && bIsNullOther) {
154 else if (bIsNull && !bIsNullOther) {
157 else if (!bIsNull && bIsNullOther) {
163 const SALOME_ListOfEvalVariant& aL1=*(SALOME_ListOfEvalVariant*)(myValue.myPtr);
164 const SALOME_ListOfEvalVariant& aL2=*(SALOME_ListOfEvalVariant*)(theOther.myValue.myPtr);
172 SALOME_ListOfEvalVariant::const_iterator aIt1 = aL1.begin();
173 SALOME_ListOfEvalVariant::const_iterator aIt2 = aL2.begin();
174 for ( ; aIt1 != aL1.end(); ++aIt1, ++aIt2 ) {
175 const SALOME_EvalVariant& aV1=*aIt1;
176 const SALOME_EvalVariant& aV2=*aIt2;
177 const SALOME_EvalVariantData& aD1=aV1.Data();
178 const SALOME_EvalVariantData& aD2=aV2.Data();
194 /////////////////////////////////////////////////////////////////////////
196 // class: SALOME_EvalVariant
200 //=======================================================================
201 //function : SALOME_EvalVariant
203 //=======================================================================
204 SALOME_EvalVariant::SALOME_EvalVariant(bool theValue)
206 ChangeDataType()=SALOME_EvalVariant_Boolean;
207 ChangeDataValue().myBoolean=theValue;
209 //=======================================================================
210 //function : SALOME_EvalVariant
212 //=======================================================================
213 SALOME_EvalVariant::SALOME_EvalVariant(int theValue)
215 ChangeDataType()=SALOME_EvalVariant_Int;
216 ChangeDataValue().myInt=theValue;
218 //=======================================================================
219 //function : SALOME_EvalVariant
221 //=======================================================================
222 SALOME_EvalVariant::SALOME_EvalVariant(uint theValue)
224 ChangeDataType()=SALOME_EvalVariant_UInt;
225 ChangeDataValue().myUInt=theValue;
227 //=======================================================================
228 //function : SALOME_EvalVariant
230 //=======================================================================
231 SALOME_EvalVariant::SALOME_EvalVariant(double theValue)
233 ChangeDataType()=SALOME_EvalVariant_Double;
234 ChangeDataValue().myDouble=theValue;
236 //=======================================================================
237 //function : SALOME_EvalVariant
239 //=======================================================================
240 SALOME_EvalVariant::SALOME_EvalVariant(const RString& theValue)
242 ChangeDataType()=SALOME_EvalVariant_String;
243 RString *p=new RString(theValue);
244 ChangeDataValue().myPtr=(void*)p;
246 //=======================================================================
247 //function : SALOME_EvalVariant
249 //=======================================================================
250 SALOME_EvalVariant::SALOME_EvalVariant(const SALOME_ListOfEvalVariant& theValue)
252 ChangeDataType()=SALOME_EvalVariant_List;
253 SALOME_ListOfEvalVariant *p=new SALOME_ListOfEvalVariant(theValue);
254 ChangeDataValue().myPtr=(void*)p;
256 //=======================================================================
257 //function : operator=
259 //=======================================================================
260 void SALOME_EvalVariant::operator=(const RString& theValue)
264 ChangeDataType()=SALOME_EvalVariant_String;
265 RString *p=new RString(theValue);
266 ChangeDataValue().myPtr=(void*)p;
268 //=======================================================================
269 //function : operator=
271 //=======================================================================
272 void SALOME_EvalVariant::operator=(const bool theValue)
276 ChangeDataType()=SALOME_EvalVariant_Boolean;
277 ChangeDataValueBoolean()=theValue;
279 //=======================================================================
280 //function : operator=
282 //=======================================================================
283 void SALOME_EvalVariant::operator=(const int theValue)
287 ChangeDataType()=SALOME_EvalVariant_Int;
288 ChangeDataValueInt()=theValue;
290 //=======================================================================
291 //function : operator=
293 //=======================================================================
294 void SALOME_EvalVariant::operator=(const uint theValue)
298 ChangeDataType()=SALOME_EvalVariant_UInt;
299 ChangeDataValueUInt()=theValue;
301 //=======================================================================
302 //function : operator=
304 //=======================================================================
305 void SALOME_EvalVariant::operator=(const double theValue)
309 ChangeDataType()=SALOME_EvalVariant_Double;
310 ChangeDataValueDouble()=theValue;
312 //=======================================================================
313 //function : operator=
315 //=======================================================================
316 void SALOME_EvalVariant::operator=(const char* theValue)
320 ChangeDataType()=SALOME_EvalVariant_String;
321 RString *p=new RString(theValue);
322 ChangeDataValue().myPtr=(void*)p;
324 //=======================================================================
327 //=======================================================================
328 bool SALOME_EvalVariant::toBool() const
330 SALOME_EvalVariantType aType=type();
332 if ( aType == SALOME_EvalVariant_Boolean ) {
333 return DataValueBoolean();
335 else if ( aType == SALOME_EvalVariant_Int ) {
336 return DataValueInt() != 0;
338 else if ( aType == SALOME_EvalVariant_UInt ) {
339 return DataValueUInt() != 0;
341 else if ( aType == SALOME_EvalVariant_Double ) {
342 return DataValueDouble() != 0.;
344 else if ( aType == SALOME_EvalVariant_String ) {
345 RString aZero("0"), aFalse("false");
346 const RString& aStr=DataValueString();
347 return !(aStr==aZero || aStr==aFalse || aStr.empty());
351 //=======================================================================
354 //=======================================================================
355 int SALOME_EvalVariant::toInt(bool *ok) const
359 SALOME_EvalVariantType aType=type();
361 if (aType == SALOME_EvalVariant_Boolean ) {
362 return (int)DataValueBoolean();
364 else if (aType == SALOME_EvalVariant_Int ) {
365 return DataValueInt();
367 else if (aType == SALOME_EvalVariant_UInt ) {
368 return (int)DataValueUInt();
370 else if (aType == SALOME_EvalVariant_Double ) {
371 return (int)DataValueDouble();
373 else if (aType == SALOME_EvalVariant_String) {
376 const RString& aStr=DataValueString();
377 const char *pStr=aStr.c_str();
383 //=======================================================================
386 //=======================================================================
387 uint SALOME_EvalVariant::toUInt(bool *ok) const
395 //=======================================================================
396 //function : toDouble
398 //=======================================================================
399 double SALOME_EvalVariant::toDouble(bool *ok) const
403 SALOME_EvalVariantType aType=type();
405 if (aType == SALOME_EvalVariant_Boolean ) {
406 return (double)DataValueBoolean();
408 else if (aType == SALOME_EvalVariant_Int ) {
409 return (double)DataValueInt();
411 else if (aType == SALOME_EvalVariant_UInt ) {
412 return (double)DataValueUInt();
414 else if (aType == SALOME_EvalVariant_Double ) {
415 return (double)DataValueDouble();
417 else if (aType == SALOME_EvalVariant_String) {
420 const RString& aStr=DataValueString();
421 const char *pStr=aStr.c_str();
428 //=======================================================================
429 //function : toString
431 //=======================================================================
432 RString SALOME_EvalVariant::toString() const
437 SALOME_EvalVariantType aType=type();
439 if (aType == SALOME_EvalVariant_Boolean) {
443 aS= iX? "true" : "false";
445 else if (aType == SALOME_EvalVariant_Int) {
446 sprintf(buffer, "%d", DataValueInt());
449 else if (aType == SALOME_EvalVariant_UInt ) {
450 sprintf(buffer, "%d", (int)DataValueUInt());
453 else if (aType == SALOME_EvalVariant_Double ) {
457 aX=DataValueDouble();
458 gcvt(aX, 12, buffer);
461 else if (aType == SALOME_EvalVariant_String) {
462 const RString& aStr=DataValueString();
467 //=======================================================================
470 //=======================================================================
471 SALOME_ListOfEvalVariant SALOME_EvalVariant::toList() const
473 SALOME_ListOfEvalVariant aS;
475 SALOME_EvalVariantType aType=type();
477 if (aType == SALOME_EvalVariant_List) {
482 //=======================================================================
483 //function : contains
485 //=======================================================================
486 bool SALOME_EvalVariant::contains(const SALOME_ListOfEvalVariant& aL,
487 const SALOME_EvalVariant& aV)
492 SALOME_ListOfEvalVariant::const_iterator aIt = aL.begin();
493 for ( ; aIt != aL.end(); ++aIt) {
494 const SALOME_EvalVariant& aVx=*aIt;