Changeset 490 for cpp/frams/util
- Timestamp:
- 03/30/16 17:08:08 (9 years ago)
- Location:
- cpp/frams/util
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
cpp/frams/util/extvalue.cpp
r478 r490 357 357 } 358 358 359 void ExtValue::setError(const SString& msg) 360 { 361 ErrorObject *err=new ErrorObject; 362 err->message=msg; 363 setObject(ErrorObject::makeDynamicObject(err)); 364 } 365 359 366 static ExtValue::CompareResult longsign(paInt x) 360 367 { … … 369 376 if ((v.getType() == TInt) && (v.getInt() == 0)) return ExtValue::ResultUnequal_RelaxedEqual; 370 377 return ExtValue::ResultUnequal_RelaxedUnequal; //comparing anything else with null is valid but null is neither higher nor lower than numbers or strings 378 } 379 380 static ExtValue::CompareResult compareInvalid(const ExtValue& v) 381 { 382 if (v.getType()==TInvalid) return ExtValue::ResultEqualUnordered; 383 if ((v.getType() == TInt) && (v.getInt() == 0)) return ExtValue::ResultUnequal_RelaxedEqual; 384 return ExtValue::ResultMismatch; //comparing anything else with invalid is invalid 371 385 } 372 386 … … 392 406 else if (src.isNull()) 393 407 return compareNull(*this); 408 if (getType()==TInvalid) 409 return compareInvalid(src); 410 else if (src.getType()==TInvalid) 411 return compareInvalid(*this); 394 412 switch (type) 395 413 { … … 1121 1139 return in + 5; 1122 1140 } 1123 else if (!strncmp(in, "invalid", 9))1141 else if (!strncmp(in, "invalid", 7)) 1124 1142 { 1125 1143 setInvalid(); 1126 return in + 9;1144 return in + 7; 1127 1145 } 1128 1146 else if (*in == '<') 1129 1147 { //unserializable object 1130 setInvalid(); 1131 while (*in) 1132 if (*in == '>') 1133 return in + 1; 1134 else in++; 1135 return in; 1148 const char* end=in+1; 1149 while (*end) 1150 if (*end == '>') 1151 { 1152 setError(SString("Unserializable class: ")+SString(in+1,end-in-1)); 1153 return end+1; 1154 } 1155 else 1156 end++; 1157 logPrintf("ExtValue", "deserialize", LOG_ERROR, "Missing '>'"); 1158 return NULL; 1136 1159 } 1137 1160 else if (*in == '^') … … 1236 1259 return v.toString(); 1237 1260 } 1261 1262 #define FIELDSTRUCT ErrorObject 1263 static ParamEntry errorobject_paramtab[]= 1264 { 1265 {"Error",1,3,"Error",}, 1266 {"message",0,0,"Message","s",FIELD(message),}, 1267 {"newFromString",0,0,"create new object","p oError(s message)",PROCEDURE(p_newfromstring),}, 1268 {"toString",0,PARAM_READONLY | PARAM_NOSTATIC,"Textual form","s",GETONLY(toString),}, 1269 {0,0,0,}, 1270 }; 1271 #undef FIELDSTRUCT 1272 1273 Param& ErrorObject::getParam() 1274 { 1275 static Param param(errorobject_paramtab); 1276 return param; 1277 } 1278 1279 ExtObject ErrorObject::makeDynamicObject(ErrorObject* e) 1280 { 1281 return ExtObject(&getParam(), (DestrBase*)e); 1282 } 1283 1284 const SString ErrorObject::TO_STRING_PREFIX="Error: "; 1285 1286 void ErrorObject::get_toString(ExtValue* ret) 1287 { 1288 ret->setString(TO_STRING_PREFIX+message); 1289 } 1290 1291 void ErrorObject::p_newfromstring(ExtValue *args, ExtValue *ret) 1292 { 1293 ErrorObject *err=new ErrorObject(); 1294 err->message=args[0].getString(); 1295 if (err->message.startsWith(TO_STRING_PREFIX.c_str())) 1296 err->message=err->message.substr(TO_STRING_PREFIX.len()); 1297 *ret = makeDynamicObject(err); 1298 } 1299 1300 REGISTER_DESERIALIZABLE(ErrorObject) -
cpp/frams/util/extvalue.h
r482 r490 185 185 void setEmpty(); 186 186 void setInvalid() { setEmpty(); type = TInvalid; } 187 void setError(const SString& msg); 187 188 bool makeUnique() { return (type == TObj) && odata().makeUnique(); } //< @return false if nothing has changed 188 189 ExtPType getType() const { return type; } … … 243 244 #define REGISTER_DESERIALIZABLE(name) ExtValue::AddDeserializable<name> deserializable_autoinit_ ## name; 244 245 245 #endif 246 class ErrorObject: public DestrBase 247 { 248 public: 249 SString message; 250 static Param& getParam(); 251 static Param& getStaticParam() {return getParam();} 252 static ExtObject makeDynamicObject(ErrorObject* e); 253 static const SString TO_STRING_PREFIX; 254 #define STATRICKCLASS ErrorObject 255 PARAMGETDEF(toString); 256 PARAMPROCDEF(p_newfromstring); 257 #undef STATRICKCLASS 258 }; 259 260 #endif
Note: See TracChangeset
for help on using the changeset viewer.