Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
May 31, 2008, 11:24:44 PM (16 years ago)
Author:
rgrieder
Message:
  • set the svn:eol-style property to all files so, that where ever you check out, you'll get the right line endings (had to change every file with mixed endings to windows in order to set the property)
File:
1 edited

Legend:

Unmodified
Added
Removed
  • code/branches/network/src/util/MultiTypeMath.h

    • Property svn:eol-style set to native
    r1446 r1494  
    1 /*
    2  *   ORXONOX - the hottest 3D action shooter ever to exist
    3  *                    > www.orxonox.net <
    4  *
    5  *
    6  *   License notice:
    7  *
    8  *   This program is free software; you can redistribute it and/or
    9  *   modify it under the terms of the GNU General Public License
    10  *   as published by the Free Software Foundation; either version 2
    11  *   of the License, or (at your option) any later version.
    12  *
    13  *   This program is distributed in the hope that it will be useful,
    14  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
    15  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    16  *   GNU General Public License for more details.
    17  *
    18  *   You should have received a copy of the GNU General Public License
    19  *   along with this program; if not, write to the Free Software
    20  *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
    21  *
    22  *   Author:
    23  *      Fabian 'x3n' Landau
    24  *   Co-authors:
    25  *      ...
    26  *
    27  *   Inspiration: MultiType by Benjamin Grauer
    28  */
    29 
    30 #ifndef _MultiTypeMath_H__
    31 #define _MultiTypeMath_H__
    32 
    33 #include "UtilPrereqs.h"
    34 
    35 #include "MultiTypeString.h"
    36 #include "Math.h"
    37 
    38 // disable annoying warning about multiple assignment operators
     1/* *   ORXONOX - the hottest 3D action shooter ever to exist *                    > www.orxonox.net < * * *   License notice: * *   This program is free software; you can redistribute it and/or *   modify it under the terms of the GNU General Public License *   as published by the Free Software Foundation; either version 2 *   of the License, or (at your option) any later version. * *   This program is distributed in the hope that it will be useful, *   but WITHOUT ANY WARRANTY; without even the implied warranty of *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *   GNU General Public License for more details. * *   You should have received a copy of the GNU General Public License *   along with this program; if not, write to the Free Software *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA. * *   Author: *      Fabian 'x3n' Landau *   Co-authors: *      ... * *   Inspiration: MultiType by Benjamin Grauer */#ifndef _MultiTypeMath_H__#define _MultiTypeMath_H__#include "UtilPrereqs.h"#include "MultiTypeString.h"#include "Math.h"// disable annoying warning about multiple assignment operators
    392#if ORXONOX_COMPILER == ORXONOX_COMPILER_MSVC
    403#pragma warning(push)
    414#pragma warning(disable:4522)
    425#endif
    43 
    44 class _UtilExport MultiTypeMath : public MultiTypeString
    45 {
    46     public:
    47         MultiTypeMath(MultiType type = MT_null);
    48         inline MultiTypeMath(void*          value) : MultiTypeString(value) {}
    49         inline MultiTypeMath(int            value) : MultiTypeString(value) {}
    50         inline MultiTypeMath(unsigned int   value) : MultiTypeString(value) {}
    51         inline MultiTypeMath(char           value) : MultiTypeString(value) {}
    52         inline MultiTypeMath(unsigned char  value) : MultiTypeString(value) {}
    53         inline MultiTypeMath(short          value) : MultiTypeString(value) {}
    54         inline MultiTypeMath(unsigned short value) : MultiTypeString(value) {}
    55         inline MultiTypeMath(long           value) : MultiTypeString(value) {}
    56         inline MultiTypeMath(unsigned long  value) : MultiTypeString(value) {}
    57         inline MultiTypeMath(float          value) : MultiTypeString(value) {}
    58         inline MultiTypeMath(double         value) : MultiTypeString(value) {}
    59         inline MultiTypeMath(long double    value) : MultiTypeString(value) {}
    60         inline MultiTypeMath(bool           value) : MultiTypeString(value) {}
    61         inline MultiTypeMath(const char*             value) : MultiTypeString(value) {}
    62         inline MultiTypeMath(const std::string&      value) : MultiTypeString(value) {}
    63         inline MultiTypeMath(const orxonox::Vector2&     value) { this->setValue(value); }
    64         inline MultiTypeMath(const orxonox::Vector3&     value) { this->setValue(value); }
    65         inline MultiTypeMath(const orxonox::Vector4&     value) { this->setValue(value); }
    66         inline MultiTypeMath(const orxonox::ColourValue& value) { this->setValue(value); }
    67         inline MultiTypeMath(const orxonox::Quaternion&  value) { this->setValue(value); }
    68         inline MultiTypeMath(const orxonox::Radian&      value) { this->setValue(value); }
    69         inline MultiTypeMath(const orxonox::Degree&      value) { this->setValue(value); }
    70         inline MultiTypeMath(const MultiTypeMath& mtm)          { this->setValue(mtm);   }
    71         inline MultiTypeMath(const MultiTypeString& mts)        { this->setValue(mts);   }
    72         inline MultiTypeMath(const MultiTypePrimitive& mtp)     { this->setValue(mtp);   }
    73         virtual inline ~MultiTypeMath() {}
    74 
    75         using MultiTypeString::operator=;
    76         inline MultiTypeMath& operator=(const orxonox::Vector2&     value) { this->setValue(value); return *this; }
    77         inline MultiTypeMath& operator=(const orxonox::Vector3&     value) { this->setValue(value); return *this; }
    78         inline MultiTypeMath& operator=(const orxonox::Vector4&     value) { this->setValue(value); return *this; }
    79         inline MultiTypeMath& operator=(const orxonox::ColourValue& value) { this->setValue(value); return *this; }
    80         inline MultiTypeMath& operator=(const orxonox::Quaternion&  value) { this->setValue(value); return *this; }
    81         inline MultiTypeMath& operator=(const orxonox::Radian&      value) { this->setValue(value); return *this; }
    82         inline MultiTypeMath& operator=(const orxonox::Degree&      value) { this->setValue(value); return *this; }
    83         inline MultiTypeMath& operator=(const MultiTypeMath& mtm)          { this->setValue(mtm);   return *this; }
    84         inline MultiTypeMath& operator=(const MultiTypeString& mts)        { this->setValue(mts);   return *this; }
    85         inline MultiTypeMath& operator=(const MultiTypePrimitive mtp)      { this->setValue(mtp);   return *this; }
    86 
    87         using MultiTypeString::operator==;
    88         inline bool operator==(const orxonox::Vector2&     value) const { return (this->vector2_     == value); }
    89         inline bool operator==(const orxonox::Vector3&     value) const { return (this->vector3_     == value); }
    90         inline bool operator==(const orxonox::Vector4&     value) const { return (this->vector4_     == value); }
    91         inline bool operator==(const orxonox::ColourValue& value) const { return (this->colourvalue_ == value); }
    92         inline bool operator==(const orxonox::Quaternion&  value) const { return (this->quaternion_  == value); }
    93         inline bool operator==(const orxonox::Radian&      value) const { return (this->radian_      == value); }
    94         inline bool operator==(const orxonox::Degree&      value) const { return (this->degree_      == value); }
    95         bool operator==(const MultiTypeMath& mtm) const;
    96         bool operator==(const MultiTypeString& mts) const;
    97         bool operator==(const MultiTypePrimitive& mtp) const;
    98 
    99         using MultiTypeString::operator!=;
    100         inline bool operator!=(const orxonox::Vector2&     value) const { return (this->vector2_     != value); }
    101         inline bool operator!=(const orxonox::Vector3&     value) const { return (this->vector3_     != value); }
    102         inline bool operator!=(const orxonox::Vector4&     value) const { return (this->vector4_     != value); }
    103         inline bool operator!=(const orxonox::ColourValue& value) const { return (this->colourvalue_ != value); }
    104         inline bool operator!=(const orxonox::Quaternion&  value) const { return (this->quaternion_  != value); }
    105         inline bool operator!=(const orxonox::Radian&      value) const { return (this->radian_      != value); }
    106         inline bool operator!=(const orxonox::Degree&      value) const { return (this->degree_      != value); }
    107         bool operator!=(const MultiTypeMath& mtm) const;
    108         bool operator!=(const MultiTypeString& mts) const;
    109         bool operator!=(const MultiTypePrimitive& mtp) const;
    110 
    111         virtual operator void*()                const;
    112         virtual operator int()                  const;
    113         virtual operator unsigned int()         const;
    114         virtual operator char()                 const;
    115         virtual operator unsigned char()        const;
    116         virtual operator short()                const;
    117         virtual operator unsigned short()       const;
    118         virtual operator long()                 const;
    119         virtual operator unsigned long()        const;
    120         virtual operator float ()               const;
    121         virtual operator double ()              const;
    122         virtual operator long double()          const;
    123         virtual operator bool()                 const;
    124         virtual operator std::string()          const;
    125         virtual operator const char*()          const;
    126         virtual operator orxonox::Vector2()     const;
    127         virtual operator orxonox::Vector3()     const;
    128         virtual operator orxonox::Vector4()     const;
    129         virtual operator orxonox::ColourValue() const;
    130         virtual operator orxonox::Quaternion()  const;
    131         virtual operator orxonox::Radian()      const;
    132         virtual operator orxonox::Degree()      const;
    133 
    134         using MultiTypeString::setValue;
    135         inline void setValue(const orxonox::Vector2&     value) { this->type_ = MT_vector2;     this->vector2_     = value; }
    136         inline void setValue(const orxonox::Vector3&     value) { this->type_ = MT_vector3;     this->vector3_     = value; }
    137         inline void setValue(const orxonox::Vector4&     value) { this->type_ = MT_vector4;     this->vector4_     = value; }
    138         inline void setValue(const orxonox::ColourValue& value) { this->type_ = MT_colourvalue; this->colourvalue_ = value; }
    139         inline void setValue(const orxonox::Quaternion&  value) { this->type_ = MT_quaternion;  this->quaternion_  = value; }
    140         inline void setValue(const orxonox::Radian&      value) { this->type_ = MT_radian;      this->radian_      = value; }
    141         inline void setValue(const orxonox::Degree&      value) { this->type_ = MT_degree;      this->degree_      = value; }
    142         void setValue(const MultiTypeMath& mtm);
    143         void setValue(const MultiTypeString& mts);
    144         void setValue(const MultiTypePrimitive& mtp);
    145 
    146         inline orxonox::Vector2     getVector2()     const { return this->vector2_;     }
    147         inline orxonox::Vector3     getVector3()     const { return this->vector3_;     }
    148         inline orxonox::Vector4     getVector4()     const { return this->vector4_;     }
    149         inline orxonox::ColourValue getColourValue() const { return this->colourvalue_; }
    150         inline orxonox::Quaternion  getQuaternion()  const { return this->quaternion_;  }
    151         inline orxonox::Radian      getRadian()      const { return this->radian_;      }
    152         inline orxonox::Degree      getDegree()      const { return this->degree_;      }
    153 
    154         inline orxonox::Vector2&     getVector2()     { return this->vector2_;     }
    155         inline orxonox::Vector3&     getVector3()     { return this->vector3_;     }
    156         inline orxonox::Vector4&     getVector4()     { return this->vector4_;     }
    157         inline orxonox::ColourValue& getColourValue() { return this->colourvalue_; }
    158         inline orxonox::Quaternion&  getQuaternion()  { return this->quaternion_;  }
    159         inline orxonox::Radian&      getRadian()      { return this->radian_;      }
    160         inline orxonox::Degree&      getDegree()      { return this->degree_;      }
    161 
    162         using MultiTypeString::getValue;
    163         inline void getValue(orxonox::Vector2*     variable) const { (*variable) = orxonox::Vector2     (this->vector2_);     }
    164         inline void getValue(orxonox::Vector3*     variable) const { (*variable) = orxonox::Vector3     (this->vector3_);     }
    165         inline void getValue(orxonox::Vector4*     variable) const { (*variable) = orxonox::Vector4     (this->vector4_);     }
    166         inline void getValue(orxonox::ColourValue* variable) const { (*variable) = orxonox::ColourValue (this->colourvalue_); }
    167         inline void getValue(orxonox::Quaternion*  variable) const { (*variable) = orxonox::Quaternion  (this->quaternion_);  }
    168         inline void getValue(orxonox::Radian*      variable) const { (*variable) = orxonox::Radian      (this->radian_);      }
    169         inline void getValue(orxonox::Degree*      variable) const { (*variable) = orxonox::Degree      (this->degree_);      }
    170 
    171         virtual std::string getTypename() const;
    172 
    173         virtual std::string toString() const;
    174         virtual bool fromString(const std::string value);
    175 
    176         virtual bool assimilate(const MultiTypeMath& mtm, const MultiTypeMath& defvalue = MultiTypeMath());
    177 
    178     protected:
    179         orxonox::Vector2      vector2_;
    180         orxonox::Vector3      vector3_;
    181         orxonox::Vector4      vector4_;
    182         orxonox::ColourValue  colourvalue_;
    183         orxonox::Quaternion   quaternion_;
    184         orxonox::Radian       radian_;
    185         orxonox::Degree       degree_;
    186 };
    187 
    188 _UtilExport std::ostream& operator<<(std::ostream& out, MultiTypeMath& mtm);
    189 
    190 #if ORXONOX_COMPILER == ORXONOX_COMPILER_MSVC
     6class _UtilExport MultiTypeMath : public MultiTypeString{    public:        MultiTypeMath(MultiType type = MT_null);        inline MultiTypeMath(void*          value) : MultiTypeString(value) {}        inline MultiTypeMath(int            value) : MultiTypeString(value) {}        inline MultiTypeMath(unsigned int   value) : MultiTypeString(value) {}        inline MultiTypeMath(char           value) : MultiTypeString(value) {}        inline MultiTypeMath(unsigned char  value) : MultiTypeString(value) {}        inline MultiTypeMath(short          value) : MultiTypeString(value) {}        inline MultiTypeMath(unsigned short value) : MultiTypeString(value) {}        inline MultiTypeMath(long           value) : MultiTypeString(value) {}        inline MultiTypeMath(unsigned long  value) : MultiTypeString(value) {}        inline MultiTypeMath(float          value) : MultiTypeString(value) {}        inline MultiTypeMath(double         value) : MultiTypeString(value) {}        inline MultiTypeMath(long double    value) : MultiTypeString(value) {}        inline MultiTypeMath(bool           value) : MultiTypeString(value) {}        inline MultiTypeMath(const char*             value) : MultiTypeString(value) {}        inline MultiTypeMath(const std::string&      value) : MultiTypeString(value) {}        inline MultiTypeMath(const orxonox::Vector2&     value) { this->setValue(value); }        inline MultiTypeMath(const orxonox::Vector3&     value) { this->setValue(value); }        inline MultiTypeMath(const orxonox::Vector4&     value) { this->setValue(value); }        inline MultiTypeMath(const orxonox::ColourValue& value) { this->setValue(value); }        inline MultiTypeMath(const orxonox::Quaternion&  value) { this->setValue(value); }        inline MultiTypeMath(const orxonox::Radian&      value) { this->setValue(value); }        inline MultiTypeMath(const orxonox::Degree&      value) { this->setValue(value); }        inline MultiTypeMath(const MultiTypeMath& mtm)          { this->setValue(mtm);   }        inline MultiTypeMath(const MultiTypeString& mts)        { this->setValue(mts);   }        inline MultiTypeMath(const MultiTypePrimitive& mtp)     { this->setValue(mtp);   }        virtual inline ~MultiTypeMath() {}        using MultiTypeString::operator=;        inline MultiTypeMath& operator=(const orxonox::Vector2&     value) { this->setValue(value); return *this; }        inline MultiTypeMath& operator=(const orxonox::Vector3&     value) { this->setValue(value); return *this; }        inline MultiTypeMath& operator=(const orxonox::Vector4&     value) { this->setValue(value); return *this; }        inline MultiTypeMath& operator=(const orxonox::ColourValue& value) { this->setValue(value); return *this; }        inline MultiTypeMath& operator=(const orxonox::Quaternion&  value) { this->setValue(value); return *this; }        inline MultiTypeMath& operator=(const orxonox::Radian&      value) { this->setValue(value); return *this; }        inline MultiTypeMath& operator=(const orxonox::Degree&      value) { this->setValue(value); return *this; }        inline MultiTypeMath& operator=(const MultiTypeMath& mtm)          { this->setValue(mtm);   return *this; }        inline MultiTypeMath& operator=(const MultiTypeString& mts)        { this->setValue(mts);   return *this; }        inline MultiTypeMath& operator=(const MultiTypePrimitive mtp)      { this->setValue(mtp);   return *this; }        using MultiTypeString::operator==;        inline bool operator==(const orxonox::Vector2&     value) const { return (this->vector2_     == value); }        inline bool operator==(const orxonox::Vector3&     value) const { return (this->vector3_     == value); }        inline bool operator==(const orxonox::Vector4&     value) const { return (this->vector4_     == value); }        inline bool operator==(const orxonox::ColourValue& value) const { return (this->colourvalue_ == value); }        inline bool operator==(const orxonox::Quaternion&  value) const { return (this->quaternion_  == value); }        inline bool operator==(const orxonox::Radian&      value) const { return (this->radian_      == value); }        inline bool operator==(const orxonox::Degree&      value) const { return (this->degree_      == value); }        bool operator==(const MultiTypeMath& mtm) const;        bool operator==(const MultiTypeString& mts) const;        bool operator==(const MultiTypePrimitive& mtp) const;        using MultiTypeString::operator!=;        inline bool operator!=(const orxonox::Vector2&     value) const { return (this->vector2_     != value); }        inline bool operator!=(const orxonox::Vector3&     value) const { return (this->vector3_     != value); }        inline bool operator!=(const orxonox::Vector4&     value) const { return (this->vector4_     != value); }        inline bool operator!=(const orxonox::ColourValue& value) const { return (this->colourvalue_ != value); }        inline bool operator!=(const orxonox::Quaternion&  value) const { return (this->quaternion_  != value); }        inline bool operator!=(const orxonox::Radian&      value) const { return (this->radian_      != value); }        inline bool operator!=(const orxonox::Degree&      value) const { return (this->degree_      != value); }        bool operator!=(const MultiTypeMath& mtm) const;        bool operator!=(const MultiTypeString& mts) const;        bool operator!=(const MultiTypePrimitive& mtp) const;        virtual operator void*()                const;        virtual operator int()                  const;        virtual operator unsigned int()         const;        virtual operator char()                 const;        virtual operator unsigned char()        const;        virtual operator short()                const;        virtual operator unsigned short()       const;        virtual operator long()                 const;        virtual operator unsigned long()        const;        virtual operator float ()               const;        virtual operator double ()              const;        virtual operator long double()          const;        virtual operator bool()                 const;        virtual operator std::string()          const;        virtual operator const char*()          const;        virtual operator orxonox::Vector2()     const;        virtual operator orxonox::Vector3()     const;        virtual operator orxonox::Vector4()     const;        virtual operator orxonox::ColourValue() const;        virtual operator orxonox::Quaternion()  const;        virtual operator orxonox::Radian()      const;        virtual operator orxonox::Degree()      const;        using MultiTypeString::setValue;        inline void setValue(const orxonox::Vector2&     value) { this->type_ = MT_vector2;     this->vector2_     = value; }        inline void setValue(const orxonox::Vector3&     value) { this->type_ = MT_vector3;     this->vector3_     = value; }        inline void setValue(const orxonox::Vector4&     value) { this->type_ = MT_vector4;     this->vector4_     = value; }        inline void setValue(const orxonox::ColourValue& value) { this->type_ = MT_colourvalue; this->colourvalue_ = value; }        inline void setValue(const orxonox::Quaternion&  value) { this->type_ = MT_quaternion;  this->quaternion_  = value; }        inline void setValue(const orxonox::Radian&      value) { this->type_ = MT_radian;      this->radian_      = value; }        inline void setValue(const orxonox::Degree&      value) { this->type_ = MT_degree;      this->degree_      = value; }        void setValue(const MultiTypeMath& mtm);        void setValue(const MultiTypeString& mts);        void setValue(const MultiTypePrimitive& mtp);        inline orxonox::Vector2     getVector2()     const { return this->vector2_;     }        inline orxonox::Vector3     getVector3()     const { return this->vector3_;     }        inline orxonox::Vector4     getVector4()     const { return this->vector4_;     }        inline orxonox::ColourValue getColourValue() const { return this->colourvalue_; }        inline orxonox::Quaternion  getQuaternion()  const { return this->quaternion_;  }        inline orxonox::Radian      getRadian()      const { return this->radian_;      }        inline orxonox::Degree      getDegree()      const { return this->degree_;      }        inline orxonox::Vector2&     getVector2()     { return this->vector2_;     }        inline orxonox::Vector3&     getVector3()     { return this->vector3_;     }        inline orxonox::Vector4&     getVector4()     { return this->vector4_;     }        inline orxonox::ColourValue& getColourValue() { return this->colourvalue_; }        inline orxonox::Quaternion&  getQuaternion()  { return this->quaternion_;  }        inline orxonox::Radian&      getRadian()      { return this->radian_;      }        inline orxonox::Degree&      getDegree()      { return this->degree_;      }        using MultiTypeString::getValue;        inline void getValue(orxonox::Vector2*     variable) const { (*variable) = orxonox::Vector2     (this->vector2_);     }        inline void getValue(orxonox::Vector3*     variable) const { (*variable) = orxonox::Vector3     (this->vector3_);     }        inline void getValue(orxonox::Vector4*     variable) const { (*variable) = orxonox::Vector4     (this->vector4_);     }        inline void getValue(orxonox::ColourValue* variable) const { (*variable) = orxonox::ColourValue (this->colourvalue_); }        inline void getValue(orxonox::Quaternion*  variable) const { (*variable) = orxonox::Quaternion  (this->quaternion_);  }        inline void getValue(orxonox::Radian*      variable) const { (*variable) = orxonox::Radian      (this->radian_);      }        inline void getValue(orxonox::Degree*      variable) const { (*variable) = orxonox::Degree      (this->degree_);      }        virtual std::string getTypename() const;        virtual std::string toString() const;        virtual bool fromString(const std::string value);        virtual bool assimilate(const MultiTypeMath& mtm, const MultiTypeMath& defvalue = MultiTypeMath());    protected:        orxonox::Vector2      vector2_;        orxonox::Vector3      vector3_;        orxonox::Vector4      vector4_;        orxonox::ColourValue  colourvalue_;        orxonox::Quaternion   quaternion_;        orxonox::Radian       radian_;        orxonox::Degree       degree_;};_UtilExport std::ostream& operator<<(std::ostream& out, MultiTypeMath& mtm);#if ORXONOX_COMPILER == ORXONOX_COMPILER_MSVC
    1917#pragma warning(pop)
    192 #endif
    193 
    194 #endif /* _MultiTypeMath_H__ */
     8#endif#endif /* _MultiTypeMath_H__ */
Note: See TracChangeset for help on using the changeset viewer.