Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/trunk/src/util/MultiTypeMath.h @ 1641

Last change on this file since 1641 was 1505, checked in by rgrieder, 16 years ago

f* svn: It doesn't even inform you if you attempt to set a non existing property. It is svn:eol-style and not eol-style when using the command by the way…

  • Property svn:eol-style set to native
File size: 11.7 KB
Line 
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
39#if ORXONOX_COMPILER == ORXONOX_COMPILER_MSVC
40#pragma warning(push)
41#pragma warning(disable:4522)
42#endif
43
44class _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
191#pragma warning(pop)
192#endif
193
194#endif /* _MultiTypeMath_H__ */
Note: See TracBrowser for help on using the repository browser.