Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Sep 9, 2008, 4:25:52 AM (16 years ago)
Author:
landauf
Message:

merged core3 back to trunk

Location:
code/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • code/trunk

  • code/trunk/src/util/Convert.h

    r1625 r1747  
    4141
    4242#include "Math.h"
     43#include "Debug.h"
    4344#include "SubString.h"
    44 #include "MultiTypeMath.h"
    4545#include "String.h"
    4646
     
    7575    enum { specialized = false };
    7676    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    }
    7881};
    7982
     
    9598
    9699// 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__ }; };
     100template <class T> struct ConverterLevel              { enum { level = __high__ }; };
     101template <> struct ConverterLevel<std::string>        { enum { level = __mid__ }; };
     102template <> struct ConverterLevel<orxonox::Radian>    { enum { level = __mid__ }; };
     103template <> struct ConverterLevel<orxonox::Degree>    { enum { level = __mid__ }; };
     104template <> struct ConverterLevel<int>                { enum { level = __low__ }; };
     105template <> struct ConverterLevel<unsigned int>       { enum { level = __low__ }; };
     106template <> struct ConverterLevel<char>               { enum { level = __low__ }; };
     107template <> struct ConverterLevel<unsigned char>      { enum { level = __low__ }; };
     108template <> struct ConverterLevel<short>              { enum { level = __low__ }; };
     109template <> struct ConverterLevel<unsigned short>     { enum { level = __low__ }; };
     110template <> struct ConverterLevel<long>               { enum { level = __low__ }; };
     111template <> struct ConverterLevel<unsigned long>      { enum { level = __low__ }; };
     112template <> struct ConverterLevel<long long>          { enum { level = __low__ }; };
     113template <> struct ConverterLevel<unsigned long long> { enum { level = __low__ }; };
     114template <> struct ConverterLevel<float>              { enum { level = __low__ }; };
     115template <> struct ConverterLevel<double>             { enum { level = __low__ }; };
     116template <> struct ConverterLevel<long double>        { enum { level = __low__ }; };
     117template <> struct ConverterLevel<bool>               { enum { level = __low__ }; };
    113118
    114119
     
    140145    static bool convert(ToType* output, const FromType& input)
    141146    {
     147        COUT(2) << "Warning: Couldn't convert a value: From \"" << typeid(FromType).name() << "\" to \"" << typeid(ToType).name() << "\"" << std::endl;
    142148        return false;
    143149    }
     
    330336
    331337
    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
     342template <class FromType>
     343struct 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
     356template <class FromType>
     357struct 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;
    413366    }
    414367};
Note: See TracChangeset for help on using the changeset viewer.