Changeset 1494 for code/branches/network/src/util/MultiTypeMath.h
- Timestamp:
- May 31, 2008, 11:24:44 PM (16 years ago)
- 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 39 2 #if ORXONOX_COMPILER == ORXONOX_COMPILER_MSVC 40 3 #pragma warning(push) 41 4 #pragma warning(disable:4522) 42 5 #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 6 class _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 191 7 #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.