Changeset 1747 for code/trunk/src/util/Convert.h
- Timestamp:
- Sep 9, 2008, 4:25:52 AM (17 years ago)
- Location:
- code/trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
code/trunk
- Property svn:mergeinfo changed
/code/branches/core3 (added) merged: 1573-1574,1583-1586,1591-1594,1596-1597,1603,1606-1607,1610-1611,1655,1658,1676-1679,1681-1685,1687,1716-1723,1725-1729,1736
- Property svn:mergeinfo changed
-
code/trunk/src/util/Convert.h
r1625 r1747 41 41 42 42 #include "Math.h" 43 #include "Debug.h" 43 44 #include "SubString.h" 44 #include "MultiTypeMath.h"45 45 #include "String.h" 46 46 … … 75 75 enum { specialized = false }; 76 76 static bool convert(ToType* output, const FromType& input) 77 { return false; } 77 { 78 COUT(2) << "Warning: Couldn't convert a value: From \"" << typeid(FromType).name() << "\" to \"" << typeid(ToType).name() << "\"" << std::endl; 79 return false; 80 } 78 81 }; 79 82 … … 95 98 96 99 // Defines the levels of all types: Default is __high__ so you don't have to define every high-level type 97 template <class T> struct ConverterLevel { enum { level = __high__ }; }; 98 template <> struct ConverterLevel<std::string> { enum { level = __mid__ }; }; 99 template <> struct ConverterLevel<orxonox::Radian> { enum { level = __mid__ }; }; 100 template <> struct ConverterLevel<orxonox::Degree> { enum { level = __mid__ }; }; 101 template <> struct ConverterLevel<int> { enum { level = __low__ }; }; 102 template <> struct ConverterLevel<unsigned int> { enum { level = __low__ }; }; 103 template <> struct ConverterLevel<char> { enum { level = __low__ }; }; 104 template <> struct ConverterLevel<unsigned char> { enum { level = __low__ }; }; 105 template <> struct ConverterLevel<short> { enum { level = __low__ }; }; 106 template <> struct ConverterLevel<unsigned short> { enum { level = __low__ }; }; 107 template <> struct ConverterLevel<long> { enum { level = __low__ }; }; 108 template <> struct ConverterLevel<unsigned long> { enum { level = __low__ }; }; 109 template <> struct ConverterLevel<float> { enum { level = __low__ }; }; 110 template <> struct ConverterLevel<double> { enum { level = __low__ }; }; 111 template <> struct ConverterLevel<long double> { enum { level = __low__ }; }; 112 template <> struct ConverterLevel<bool> { enum { level = __low__ }; }; 100 template <class T> struct ConverterLevel { enum { level = __high__ }; }; 101 template <> struct ConverterLevel<std::string> { enum { level = __mid__ }; }; 102 template <> struct ConverterLevel<orxonox::Radian> { enum { level = __mid__ }; }; 103 template <> struct ConverterLevel<orxonox::Degree> { enum { level = __mid__ }; }; 104 template <> struct ConverterLevel<int> { enum { level = __low__ }; }; 105 template <> struct ConverterLevel<unsigned int> { enum { level = __low__ }; }; 106 template <> struct ConverterLevel<char> { enum { level = __low__ }; }; 107 template <> struct ConverterLevel<unsigned char> { enum { level = __low__ }; }; 108 template <> struct ConverterLevel<short> { enum { level = __low__ }; }; 109 template <> struct ConverterLevel<unsigned short> { enum { level = __low__ }; }; 110 template <> struct ConverterLevel<long> { enum { level = __low__ }; }; 111 template <> struct ConverterLevel<unsigned long> { enum { level = __low__ }; }; 112 template <> struct ConverterLevel<long long> { enum { level = __low__ }; }; 113 template <> struct ConverterLevel<unsigned long long> { enum { level = __low__ }; }; 114 template <> struct ConverterLevel<float> { enum { level = __low__ }; }; 115 template <> struct ConverterLevel<double> { enum { level = __low__ }; }; 116 template <> struct ConverterLevel<long double> { enum { level = __low__ }; }; 117 template <> struct ConverterLevel<bool> { enum { level = __low__ }; }; 113 118 114 119 … … 140 145 static bool convert(ToType* output, const FromType& input) 141 146 { 147 COUT(2) << "Warning: Couldn't convert a value: From \"" << typeid(FromType).name() << "\" to \"" << typeid(ToType).name() << "\"" << std::endl; 142 148 return false; 143 149 } … … 330 336 331 337 332 //////////////// 333 // MULTITYPES // 334 //////////////// 335 336 // convert from MultiTypePrimitive 337 template <class ToType> 338 struct ConverterSpecialized<MultiTypePrimitive, ToType, _FromType_> 339 { 340 enum { specialized = true }; 341 static bool convert(ToType* output, const MultiTypePrimitive& input) 342 { 343 if (input.getType() == MT_void) 344 return ConvertValue(output, input.getVoid()); 345 else if (input.getType() == MT_int) 346 return ConvertValue(output, input.getInt()); 347 else if (input.getType() == MT_uint) 348 return ConvertValue(output, input.getUnsignedInt()); 349 else if (input.getType() == MT_char) 350 return ConvertValue(output, input.getChar()); 351 else if (input.getType() == MT_uchar) 352 return ConvertValue(output, input.getUnsignedChar()); 353 else if (input.getType() == MT_short) 354 return ConvertValue(output, input.getShort()); 355 else if (input.getType() == MT_ushort) 356 return ConvertValue(output, input.getUnsignedShort()); 357 else if (input.getType() == MT_long) 358 return ConvertValue(output, input.getLong()); 359 else if (input.getType() == MT_ulong) 360 return ConvertValue(output, input.getUnsignedLong()); 361 else if (input.getType() == MT_float) 362 return ConvertValue(output, input.getFloat()); 363 else if (input.getType() == MT_double) 364 return ConvertValue(output, input.getDouble()); 365 else if (input.getType() == MT_longdouble) 366 return ConvertValue(output, input.getLongDouble()); 367 else if (input.getType() == MT_bool) 368 return ConvertValue(output, input.getBool()); 369 else 370 return false; 371 } 372 }; 373 374 // convert from MultiTypeString 375 template <class ToType> 376 struct ConverterSpecialized<MultiTypeString, ToType, _FromType_> 377 { 378 enum { specialized = true }; 379 static bool convert(ToType* output, const MultiTypeString& input) 380 { 381 if (input.getType() == MT_constchar) 382 return ConvertValue(output, input.getConstChar()); 383 else if (input.getType() == MT_string) 384 return ConvertValue(output, input.getString()); 385 else 386 return ConvertValue(output, (MultiTypePrimitive)input); 387 } 388 }; 389 390 // convert from MultiTypeMath 391 template <class ToType> 392 struct ConverterSpecialized<MultiTypeMath, ToType, _FromType_> 393 { 394 enum { specialized = true }; 395 static bool convert(ToType* output, const MultiTypeMath& input) 396 { 397 if (input.getType() == MT_vector2) 398 return ConvertValue(output, input.getVector2()); 399 else if (input.getType() == MT_vector3) 400 return ConvertValue(output, input.getVector3()); 401 else if (input.getType() == MT_vector4) 402 return ConvertValue(output, input.getVector4()); 403 else if (input.getType() == MT_quaternion) 404 return ConvertValue(output, input.getQuaternion()); 405 else if (input.getType() == MT_colourvalue) 406 return ConvertValue(output, input.getColourValue()); 407 else if (input.getType() == MT_radian) 408 return ConvertValue(output, input.getRadian()); 409 else if (input.getType() == MT_degree) 410 return ConvertValue(output, input.getDegree()); 411 else 412 return ConvertValue(output, (MultiTypeString)input); 338 ////////// 339 // MATH // 340 ////////// 341 // convert everything to Degree 342 template <class FromType> 343 struct ConverterSpecialized<FromType, Ogre::Degree, _ToType_> 344 { 345 enum { specialized = true }; 346 static bool convert(Ogre::Degree* output, const FromType& input) 347 { 348 float angle = 0; 349 bool success = ConvertValue<FromType, float>(&angle, input); 350 (*output) = angle; 351 return success; 352 } 353 }; 354 355 // convert everything to Radian 356 template <class FromType> 357 struct ConverterSpecialized<FromType, Ogre::Radian, _ToType_> 358 { 359 enum { specialized = true }; 360 static bool convert(Ogre::Radian* output, const FromType& input) 361 { 362 float angle = 0; 363 bool success = ConvertValue<FromType, float>(&angle, input); 364 (*output) = angle; 365 return success; 413 366 } 414 367 };
Note: See TracChangeset
for help on using the changeset viewer.