Changeset 144 for cpp/frams/util
- Timestamp:
- 02/26/14 20:04:49 (11 years ago)
- Location:
- cpp/frams/util
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
cpp/frams/util/extvalue.cpp
r121 r144 250 250 } 251 251 252 static long compareNull(const ExtValue& v) 253 { 254 switch(v.type) 255 { 256 case TDouble: return v.getDouble()!=0.0; 257 case TInt: return v.getInt()?1:0; 258 case TString: return 1; 259 default: return !v.isNull(); 260 } 261 } 262 252 263 long ExtValue::compare(const ExtValue& src) const 253 264 { 254 265 if (type==TUnknown) 255 { 256 if (src.type==TDouble) 257 return (src.getDouble()!=0.0); 258 if (src.type==TString) 259 return 1; 260 return src.getInt()?1:0; 261 } 266 return compareNull(src); 262 267 else if (src.type==TUnknown) 263 { 264 if (type==TDouble) 265 return (getDouble()!=0.0); 266 if (type==TString) 267 return 1; 268 return getInt()?1:0; 269 } 268 return compareNull(*this); 270 269 switch(type) 271 270 { … … 545 544 } 546 545 546 long ExtValue::getInt(const char* s) 547 { 548 if ((s[0]=='0')&&(s[1]=='x')) 549 { 550 long val; 551 sscanf(s+2,"%lx",&val); 552 return val; 553 } 554 else 555 { 556 if (strchr(s,'e')||(strchr(s,'E'))) 557 return (long)atof(s); 558 else 559 return atol(s); 560 } 561 } 562 563 double ExtValue::getDouble(const char* s) 564 { 565 if ((s[0]=='0')&&(s[1]=='x')) 566 { 567 long val; 568 sscanf(s+2,"%lx",&val); 569 return val; 570 } 571 else 572 return atof(s); 573 } 574 547 575 long ExtValue::getInt() const 548 576 { … … 551 579 case TInt: return idata(); 552 580 case TDouble: return (int)ddata(); 553 case TString: 554 { 555 const char* s=(const char*)sdata(); 556 if ((s[0]=='0')&&(s[1]=='x')) 557 { 558 long val; 559 sscanf(s+2,"%lx",&val); 560 return val; 561 } 562 else 563 { 564 if (strchr(s,'e')||(strchr(s,'E'))) 565 return (long)atof(s); 566 else 567 return atol(s); 568 } 569 } 570 case TObj: return (long)odata().param; 581 case TString: return getInt((const char*)sdata()); 582 case TObj: 583 FMprintf("ExtValue","getInt",FMLV_WARN,"Getting integer value from object reference (%s)",(const char*)getString()); 584 return (long)odata().param; 571 585 default:; 572 586 } 573 587 return 0; 574 588 } 589 575 590 double ExtValue::getDouble() const 576 591 { … … 579 594 case TDouble: return ddata(); 580 595 case TInt: return (double)idata(); 581 case TString: 582 { 583 const char* s=(const char*)sdata(); 584 if ((s[0]=='0')&&(s[1]=='x')) 585 { 586 long val; 587 sscanf(s+2,"%lx",&val); 588 return val; 589 } 590 else 591 return atof(s); 592 } 593 case TObj: return (double)(long)odata().param; 596 case TString: return getDouble((const char*)sdata()); 597 case TObj: 598 FMprintf("ExtValue","getDouble",FMLV_WARN,"Getting floating point value from object reference (%s)",(const char*)getString()); 599 return (double)(long)odata().param; 594 600 default:; 595 601 } -
cpp/frams/util/extvalue.h
r121 r144 147 147 void setString(const SString &v) {if (type!=TString) setrs(v); else sdata()=v;} 148 148 void setObject(const ExtObject &src) {if (type!=TObj) setro(src); else odata()=src;} 149 static long getInt(const char* s); 150 static double getDouble(const char* s); 149 151 long getInt() const; 150 152 double getDouble() const; … … 153 155 SString serialize() const; 154 156 ExtObject getObject() const; 157 bool isNull() const {return (type==TUnknown)||((type==TObj)&&odata().isEmpty());} 155 158 const char* parseNumber(const char* in); 156 159 const char* deserialize(const char* in);//< @return first character after the succesfully parsed string or NULL if failed
Note: See TracChangeset
for help on using the changeset viewer.