Changeset 9222 for code/branches/testing/src/libraries/util/MultiType.h
- Timestamp:
- May 19, 2012, 11:27:07 AM (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
code/branches/testing/src/libraries/util/MultiType.h
r9221 r9222 111 111 { 112 112 /** 113 @brief Enum of all possible types of a MultiType.114 */115 namespace MT_Type116 {117 enum Value118 {119 Null,120 Char,121 UnsignedChar,122 Short,123 UnsignedShort,124 Int,125 UnsignedInt,126 Long,127 UnsignedLong,128 LongLong,129 UnsignedLongLong,130 Float,131 Double,132 LongDouble,133 Bool,134 VoidPointer,135 String,136 Vector2,137 Vector3,138 Vector4,139 ColourValue,140 Quaternion,141 Radian,142 Degree143 };144 }145 146 /**147 113 @brief The MultiType can hold a value of many possible types and convert them to other types. 148 114 … … 165 131 template <typename T> friend class MT_Value; 166 132 133 struct Type 134 { 135 /** 136 @brief Enum of all possible types of a MultiType. 137 */ 138 enum Enum 139 { 140 Null, 141 Char, 142 UnsignedChar, 143 Short, 144 UnsignedShort, 145 Int, 146 UnsignedInt, 147 Long, 148 UnsignedLong, 149 LongLong, 150 UnsignedLongLong, 151 Float, 152 Double, 153 LongDouble, 154 Bool, 155 VoidPointer, 156 String, 157 Vector2, 158 Vector3, 159 Vector4, 160 ColourValue, 161 Quaternion, 162 Radian, 163 Degree 164 }; 165 }; 166 167 167 public: 168 168 /** … … 173 173 { 174 174 public: 175 MT_ValueBase( MT_Type::Valuetype) : type_(type), bHasDefaultValue_(false) {}175 MT_ValueBase(Type::Enum type) : type_(type), bHasDefaultValue_(false) {} 176 176 virtual ~MT_ValueBase() {} 177 177 … … 182 182 183 183 /// Returns the type of the current value. 184 const MT_Type::Value& getType() const { return this->type_; }184 const Type::Enum& getType() const { return this->type_; } 185 185 186 186 /// Checks whether the value is a default one. … … 265 265 virtual uint8_t getSize() const=0; 266 266 267 MT_Type::Value type_;///< The type of the current value267 Type::Enum type_; ///< The type of the current value 268 268 bool bHasDefaultValue_; ///< True if the last conversion wasn't successful 269 269 }; 270 270 271 271 public: 272 static const MultiType Null; 273 272 274 inline MultiType() : value_(0) {} ///< Default constructor: Assigns no value and no type. The type will be determined by the first assignment of a value. 273 275 inline MultiType(const char& value) : value_(0) { this->assignValue(value); } ///< Constructor: Assigns the given value and sets the type. … … 297 299 inline MultiType(const char* value) : value_(0) { this->setValue(std::string(value)); } ///< Constructor: Converts the char array to a std::string, assigns the value and sets the type. 298 300 inline MultiType(const MultiType& other) : value_(0) { this->setValue(other); } ///< Copyconstructor: Assigns value and type of the other MultiType. 299 inline MultiType(MT_Type::Value type) : value_(0) { this->setType(type); } ///< Constructor: Sets the type, the next assignment will determine the value.300 301 301 302 /// Destructor: Deletes the MT_Value. … … 305 306 template <typename V> inline MultiType& operator=(V* value) { this->setValue(value); return (*this); } ///< Assigns a pointer. 306 307 inline MultiType& operator=(const MultiType& other) { this->setValue(other); return (*this); } ///< Assigns the value of the other MultiType and converts it to the current type of the MultiType. 307 inline MultiType& operator=(MT_Type::Value type) { this->setType(type); return (*this); } ///< Resets the value and changes the type.308 308 309 309 inline bool setValue(const char& value); … … 346 346 347 347 /// Copies the other MultiType by assigning value and type. 348 inline void copy(const MultiType& other) 348 inline void copy(const MultiType& other) { if (this == &other) { return; } if (this->value_) { delete this->value_; } this->value_ = (other.value_) ? other.value_->clone() : 0; } 349 349 350 350 /// Converts the current value to type T. 351 template <typename T> inline bool convert() { return this->setValue<T>((typename Loki::TypeTraits<T>::UnqualifiedReferredType)(*this)); } 352 /// Converts the current value to the type of the other MultiType. 353 inline bool convert(const MultiType& other) { return this->convert(other.getType()); } 354 bool convert(MT_Type::Value type); 355 356 /// Current content gets deleted. New type is MT_Type::Null 357 inline void reset() { if (this->value_) delete this->value_; this->value_ = 0; } 351 template <typename T> inline bool convert() { return this->setValue<T>((typename Loki::TypeTraits<T>::UnqualifiedReferredType)(*this)); } 352 353 /// Resets value and type. Type will be void afterwards and null() returns true. 354 inline void reset() { if (this->value_) delete this->value_; this->value_ = 0; } 358 355 /// Current content gets overridden with default zero value 359 inline void resetValue() 356 inline void resetValue() { if (this->value_) this->value_->reset(); } 360 357 361 358 /// Resets the value and changes the internal type to T. 362 template <typename T> inline void setType() { this->assignValue(typename Loki::TypeTraits<T>::UnqualifiedReferredType()); } 363 /// Resets the value and changes the internal type to the type of the other MultiType. 364 inline void setType(const MultiType& other) { this->setType(other.getType()); } 365 /// Resets the value and changes the internal type to the given type. 366 inline void setType(MT_Type::Value type) { this->reset(); this->convert(type); this->resetValue(); } 367 368 /// Returns the current type. 369 inline MT_Type::Value getType() const { return (this->value_) ? this->value_->type_ : MT_Type::Null; } 370 /// Returns true if the current type equals the given type. 371 inline bool isType(MT_Type::Value type) const { return (this->value_) ? (this->value_->type_ == type) : (type == MT_Type::Null); } 359 template <typename T> inline void setType() { this->assignValue(typename Loki::TypeTraits<T>::UnqualifiedReferredType()); } 360 372 361 /// Returns true if the current type is T. 373 template <typename T> inline bool isType() 374 std::string getTypename() 362 template <typename T> inline bool isType() const { return false; } // Only works for specialized values - see below 363 std::string getTypename() const; 375 364 376 365 /// Saves the value of the MT to a bytestream (pointed at by mem) and increases mem pointer by size of MT 377 inline void exportData(uint8_t*& mem) const { assert(sizeof( MT_Type::Value)<=8); *static_cast<uint8_t*>(mem) = this->getType(); mem+=sizeof(uint8_t); this->value_->exportData(mem); }366 inline void exportData(uint8_t*& mem) const { assert(sizeof(Type::Enum)<=8); *static_cast<uint8_t*>(mem) = this->getType(); mem+=sizeof(uint8_t); this->value_->exportData(mem); } 378 367 /// Loads the value of the MT from a bytestream (pointed at by mem) and increases mem pointer by size of MT 379 inline void importData(uint8_t*& mem) { assert(sizeof( MT_Type::Value)<=8); this->setType(static_cast<MT_Type::Value>(*static_cast<uint8_t*>(mem))); mem+=sizeof(uint8_t); this->value_->importData(mem); }368 inline void importData(uint8_t*& mem) { assert(sizeof(Type::Enum)<=8); this->setType(static_cast<Type::Enum>(*static_cast<uint8_t*>(mem))); mem+=sizeof(uint8_t); this->value_->importData(mem); } 380 369 /// Saves the value of the MT to a bytestream and increases pointer to bytestream by size of MT 381 370 inline uint8_t*& operator << (uint8_t*& mem) { importData(mem); return mem; } … … 466 455 467 456 private: 468 inline bool assignValue(const char& value) { if (this->value_ && this->value_->type_ == MT_Type::Char) { return this->value_->setValue(value); } else { this->changeValueContainer<char>(value); return true; } } ///< Assigns a new value by changing type and creating a new container. 469 inline bool assignValue(const unsigned char& value) { if (this->value_ && this->value_->type_ == MT_Type::UnsignedChar) { return this->value_->setValue(value); } else { this->changeValueContainer<unsigned char>(value); return true; } } ///< Assigns a new value by changing type and creating a new container. 470 inline bool assignValue(const short& value) { if (this->value_ && this->value_->type_ == MT_Type::Short) { return this->value_->setValue(value); } else { this->changeValueContainer<short>(value); return true; } } ///< Assigns a new value by changing type and creating a new container. 471 inline bool assignValue(const unsigned short& value) { if (this->value_ && this->value_->type_ == MT_Type::UnsignedShort) { return this->value_->setValue(value); } else { this->changeValueContainer<unsigned short>(value); return true; } } ///< Assigns a new value by changing type and creating a new container. 472 inline bool assignValue(const int& value) { if (this->value_ && this->value_->type_ == MT_Type::Int) { return this->value_->setValue(value); } else { this->changeValueContainer<int>(value); return true; } } ///< Assigns a new value by changing type and creating a new container. 473 inline bool assignValue(const unsigned int& value) { if (this->value_ && this->value_->type_ == MT_Type::UnsignedInt) { return this->value_->setValue(value); } else { this->changeValueContainer<unsigned int>(value); return true; } } ///< Assigns a new value by changing type and creating a new container. 474 inline bool assignValue(const long& value) { if (this->value_ && this->value_->type_ == MT_Type::Long) { return this->value_->setValue(value); } else { this->changeValueContainer<long>(value); return true; } } ///< Assigns a new value by changing type and creating a new container. 475 inline bool assignValue(const unsigned long& value) { if (this->value_ && this->value_->type_ == MT_Type::UnsignedLong) { return this->value_->setValue(value); } else { this->changeValueContainer<unsigned long>(value); return true; } } ///< Assigns a new value by changing type and creating a new container. 476 inline bool assignValue(const long long& value) { if (this->value_ && this->value_->type_ == MT_Type::LongLong) { return this->value_->setValue(value); } else { this->changeValueContainer<long long>(value); return true; } } ///< Assigns a new value by changing type and creating a new container. 477 inline bool assignValue(const unsigned long long& value) { if (this->value_ && this->value_->type_ == MT_Type::UnsignedLongLong) { return this->value_->setValue(value); } else { this->changeValueContainer<unsigned long long>(value); return true; } } ///< Assigns a new value by changing type and creating a new container. 478 inline bool assignValue(const float& value) { if (this->value_ && this->value_->type_ == MT_Type::Float) { return this->value_->setValue(value); } else { this->changeValueContainer<float>(value); return true; } } ///< Assigns a new value by changing type and creating a new container. 479 inline bool assignValue(const double& value) { if (this->value_ && this->value_->type_ == MT_Type::Double) { return this->value_->setValue(value); } else { this->changeValueContainer<double>(value); return true; } } ///< Assigns a new value by changing type and creating a new container. 480 inline bool assignValue(const long double& value) { if (this->value_ && this->value_->type_ == MT_Type::LongDouble) { return this->value_->setValue(value); } else { this->changeValueContainer<long double>(value); return true; } } ///< Assigns a new value by changing type and creating a new container. 481 inline bool assignValue(const bool& value) { if (this->value_ && this->value_->type_ == MT_Type::Bool) { return this->value_->setValue(value); } else { this->changeValueContainer<bool>(value); return true; } } ///< Assigns a new value by changing type and creating a new container. 482 inline bool assignValue( void* const& value) { if (this->value_ && this->value_->type_ == MT_Type::VoidPointer) { return this->value_->setValue(value); } else { this->changeValueContainer<void*>(value); return true; } } ///< Assigns a new value by changing type and creating a new container. 483 inline bool assignValue(const std::string& value) { if (this->value_ && this->value_->type_ == MT_Type::String) { return this->value_->setValue(value); } else { this->changeValueContainer<std::string>(value); return true; } } ///< Assigns a new value by changing type and creating a new container. 484 inline bool assignValue(const orxonox::Vector2& value) { if (this->value_ && this->value_->type_ == MT_Type::Vector2) { return this->value_->setValue(value); } else { this->changeValueContainer<orxonox::Vector2>(value); return true; } } ///< Assigns a new value by changing type and creating a new container. 485 inline bool assignValue(const orxonox::Vector3& value) { if (this->value_ && this->value_->type_ == MT_Type::Vector3) { return this->value_->setValue(value); } else { this->changeValueContainer<orxonox::Vector3>(value); return true; } } ///< Assigns a new value by changing type and creating a new container. 486 inline bool assignValue(const orxonox::Vector4& value) { if (this->value_ && this->value_->type_ == MT_Type::Vector4) { return this->value_->setValue(value); } else { this->changeValueContainer<orxonox::Vector4>(value); return true; } } ///< Assigns a new value by changing type and creating a new container. 487 inline bool assignValue(const orxonox::ColourValue& value) { if (this->value_ && this->value_->type_ == MT_Type::ColourValue) { return this->value_->setValue(value); } else { this->changeValueContainer<orxonox::ColourValue>(value); return true; } } ///< Assigns a new value by changing type and creating a new container. 488 inline bool assignValue(const orxonox::Quaternion& value) { if (this->value_ && this->value_->type_ == MT_Type::Quaternion) { return this->value_->setValue(value); } else { this->changeValueContainer<orxonox::Quaternion>(value); return true; } } ///< Assigns a new value by changing type and creating a new container. 489 inline bool assignValue(const orxonox::Radian& value) { if (this->value_ && this->value_->type_ == MT_Type::Radian) { return this->value_->setValue(value); } else { this->changeValueContainer<orxonox::Radian>(value); return true; } } ///< Assigns a new value by changing type and creating a new container. 490 inline bool assignValue(const orxonox::Degree& value) { if (this->value_ && this->value_->type_ == MT_Type::Degree) { return this->value_->setValue(value); } else { this->changeValueContainer<orxonox::Degree>(value); return true; } } ///< Assigns a new value by changing type and creating a new container. 457 inline bool assignValue(const char& value) { if (this->value_ && this->value_->type_ == Type::Char) { return this->value_->setValue(value); } else { this->changeValueContainer<char>(value); return true; } } ///< Assigns a new value by changing type and creating a new container. 458 inline bool assignValue(const unsigned char& value) { if (this->value_ && this->value_->type_ == Type::UnsignedChar) { return this->value_->setValue(value); } else { this->changeValueContainer<unsigned char>(value); return true; } } ///< Assigns a new value by changing type and creating a new container. 459 inline bool assignValue(const short& value) { if (this->value_ && this->value_->type_ == Type::Short) { return this->value_->setValue(value); } else { this->changeValueContainer<short>(value); return true; } } ///< Assigns a new value by changing type and creating a new container. 460 inline bool assignValue(const unsigned short& value) { if (this->value_ && this->value_->type_ == Type::UnsignedShort) { return this->value_->setValue(value); } else { this->changeValueContainer<unsigned short>(value); return true; } } ///< Assigns a new value by changing type and creating a new container. 461 inline bool assignValue(const int& value) { if (this->value_ && this->value_->type_ == Type::Int) { return this->value_->setValue(value); } else { this->changeValueContainer<int>(value); return true; } } ///< Assigns a new value by changing type and creating a new container. 462 inline bool assignValue(const unsigned int& value) { if (this->value_ && this->value_->type_ == Type::UnsignedInt) { return this->value_->setValue(value); } else { this->changeValueContainer<unsigned int>(value); return true; } } ///< Assigns a new value by changing type and creating a new container. 463 inline bool assignValue(const long& value) { if (this->value_ && this->value_->type_ == Type::Long) { return this->value_->setValue(value); } else { this->changeValueContainer<long>(value); return true; } } ///< Assigns a new value by changing type and creating a new container. 464 inline bool assignValue(const unsigned long& value) { if (this->value_ && this->value_->type_ == Type::UnsignedLong) { return this->value_->setValue(value); } else { this->changeValueContainer<unsigned long>(value); return true; } } ///< Assigns a new value by changing type and creating a new container. 465 inline bool assignValue(const long long& value) { if (this->value_ && this->value_->type_ == Type::LongLong) { return this->value_->setValue(value); } else { this->changeValueContainer<long long>(value); return true; } } ///< Assigns a new value by changing type and creating a new container. 466 inline bool assignValue(const unsigned long long& value) { if (this->value_ && this->value_->type_ == Type::UnsignedLongLong) { return this->value_->setValue(value); } else { this->changeValueContainer<unsigned long long>(value); return true; } } ///< Assigns a new value by changing type and creating a new container. 467 inline bool assignValue(const float& value) { if (this->value_ && this->value_->type_ == Type::Float) { return this->value_->setValue(value); } else { this->changeValueContainer<float>(value); return true; } } ///< Assigns a new value by changing type and creating a new container. 468 inline bool assignValue(const double& value) { if (this->value_ && this->value_->type_ == Type::Double) { return this->value_->setValue(value); } else { this->changeValueContainer<double>(value); return true; } } ///< Assigns a new value by changing type and creating a new container. 469 inline bool assignValue(const long double& value) { if (this->value_ && this->value_->type_ == Type::LongDouble) { return this->value_->setValue(value); } else { this->changeValueContainer<long double>(value); return true; } } ///< Assigns a new value by changing type and creating a new container. 470 inline bool assignValue(const bool& value) { if (this->value_ && this->value_->type_ == Type::Bool) { return this->value_->setValue(value); } else { this->changeValueContainer<bool>(value); return true; } } ///< Assigns a new value by changing type and creating a new container. 471 inline bool assignValue( void* const& value) { if (this->value_ && this->value_->type_ == Type::VoidPointer) { return this->value_->setValue(value); } else { this->changeValueContainer<void*>(value); return true; } } ///< Assigns a new value by changing type and creating a new container. 472 inline bool assignValue(const std::string& value) { if (this->value_ && this->value_->type_ == Type::String) { return this->value_->setValue(value); } else { this->changeValueContainer<std::string>(value); return true; } } ///< Assigns a new value by changing type and creating a new container. 473 inline bool assignValue(const orxonox::Vector2& value) { if (this->value_ && this->value_->type_ == Type::Vector2) { return this->value_->setValue(value); } else { this->changeValueContainer<orxonox::Vector2>(value); return true; } } ///< Assigns a new value by changing type and creating a new container. 474 inline bool assignValue(const orxonox::Vector3& value) { if (this->value_ && this->value_->type_ == Type::Vector3) { return this->value_->setValue(value); } else { this->changeValueContainer<orxonox::Vector3>(value); return true; } } ///< Assigns a new value by changing type and creating a new container. 475 inline bool assignValue(const orxonox::Vector4& value) { if (this->value_ && this->value_->type_ == Type::Vector4) { return this->value_->setValue(value); } else { this->changeValueContainer<orxonox::Vector4>(value); return true; } } ///< Assigns a new value by changing type and creating a new container. 476 inline bool assignValue(const orxonox::ColourValue& value) { if (this->value_ && this->value_->type_ == Type::ColourValue) { return this->value_->setValue(value); } else { this->changeValueContainer<orxonox::ColourValue>(value); return true; } } ///< Assigns a new value by changing type and creating a new container. 477 inline bool assignValue(const orxonox::Quaternion& value) { if (this->value_ && this->value_->type_ == Type::Quaternion) { return this->value_->setValue(value); } else { this->changeValueContainer<orxonox::Quaternion>(value); return true; } } ///< Assigns a new value by changing type and creating a new container. 478 inline bool assignValue(const orxonox::Radian& value) { if (this->value_ && this->value_->type_ == Type::Radian) { return this->value_->setValue(value); } else { this->changeValueContainer<orxonox::Radian>(value); return true; } } ///< Assigns a new value by changing type and creating a new container. 479 inline bool assignValue(const orxonox::Degree& value) { if (this->value_ && this->value_->type_ == Type::Degree) { return this->value_->setValue(value); } else { this->changeValueContainer<orxonox::Degree>(value); return true; } } ///< Assigns a new value by changing type and creating a new container. 480 481 /// Resets the value and changes the internal type to the given type. 482 inline void setType(Type::Enum type) { this->reset(); this->convert(type); this->resetValue(); } 483 /// Returns the current type. 484 inline Type::Enum getType() const { return (this->value_) ? this->value_->type_ : Type::Null; } 485 /// Converts the current value to the given type. 486 bool convert(Type::Enum type); 491 487 492 488 /// Changes the value container. … … 502 498 503 499 template <> inline bool MultiType::isType<void>() const { return this->null(); } ///< Returns true if the current type equals the given type. 504 template <> inline bool MultiType::isType<char>() const { return (this->value_ && this->value_->type_ == MT_Type::Char); } ///< Returns true if the current type equals the given type.505 template <> inline bool MultiType::isType<unsigned char>() const { return (this->value_ && this->value_->type_ == MT_Type::UnsignedChar); } ///< Returns true if the current type equals the given type.506 template <> inline bool MultiType::isType<short>() const { return (this->value_ && this->value_->type_ == MT_Type::Short); } ///< Returns true if the current type equals the given type.507 template <> inline bool MultiType::isType<unsigned short>() const { return (this->value_ && this->value_->type_ == MT_Type::UnsignedShort); } ///< Returns true if the current type equals the given type.508 template <> inline bool MultiType::isType<int>() const { return (this->value_ && this->value_->type_ == MT_Type::Int); } ///< Returns true if the current type equals the given type.509 template <> inline bool MultiType::isType<unsigned int>() const { return (this->value_ && this->value_->type_ == MT_Type::UnsignedInt); } ///< Returns true if the current type equals the given type.510 template <> inline bool MultiType::isType<long>() const { return (this->value_ && this->value_->type_ == MT_Type::Long); } ///< Returns true if the current type equals the given type.511 template <> inline bool MultiType::isType<unsigned long>() const { return (this->value_ && this->value_->type_ == MT_Type::UnsignedLong); } ///< Returns true if the current type equals the given type.512 template <> inline bool MultiType::isType<long long>() const { return (this->value_ && this->value_->type_ == MT_Type::LongLong); } ///< Returns true if the current type equals the given type.513 template <> inline bool MultiType::isType<unsigned long long>() const { return (this->value_ && this->value_->type_ == MT_Type::UnsignedLongLong); } ///< Returns true if the current type equals the given type.514 template <> inline bool MultiType::isType<float>() const { return (this->value_ && this->value_->type_ == MT_Type::Float); } ///< Returns true if the current type equals the given type.515 template <> inline bool MultiType::isType<double>() const { return (this->value_ && this->value_->type_ == MT_Type::Double); } ///< Returns true if the current type equals the given type.516 template <> inline bool MultiType::isType<long double>() const { return (this->value_ && this->value_->type_ == MT_Type::LongDouble); } ///< Returns true if the current type equals the given type.517 template <> inline bool MultiType::isType<bool>() const { return (this->value_ && this->value_->type_ == MT_Type::Bool); } ///< Returns true if the current type equals the given type.518 template <> inline bool MultiType::isType<void*>() const { return (this->value_ && this->value_->type_ == MT_Type::VoidPointer); } ///< Returns true if the current type equals the given type.519 template <> inline bool MultiType::isType<std::string>() const { return (this->value_ && this->value_->type_ == MT_Type::String); } ///< Returns true if the current type equals the given type.520 template <> inline bool MultiType::isType<orxonox::Vector2>() const { return (this->value_ && this->value_->type_ == MT_Type::Vector2); } ///< Returns true if the current type equals the given type.521 template <> inline bool MultiType::isType<orxonox::Vector3>() const { return (this->value_ && this->value_->type_ == MT_Type::Vector3); } ///< Returns true if the current type equals the given type.522 template <> inline bool MultiType::isType<orxonox::Vector4>() const { return (this->value_ && this->value_->type_ == MT_Type::Vector4); } ///< Returns true if the current type equals the given type.523 template <> inline bool MultiType::isType<orxonox::ColourValue>() const { return (this->value_ && this->value_->type_ == MT_Type::ColourValue); } ///< Returns true if the current type equals the given type.524 template <> inline bool MultiType::isType<orxonox::Quaternion>() const { return (this->value_ && this->value_->type_ == MT_Type::Quaternion); } ///< Returns true if the current type equals the given type.525 template <> inline bool MultiType::isType<orxonox::Radian>() const { return (this->value_ && this->value_->type_ == MT_Type::Radian); } ///< Returns true if the current type equals the given type.526 template <> inline bool MultiType::isType<orxonox::Degree>() const { return (this->value_ && this->value_->type_ == MT_Type::Degree); } ///< Returns true if the current type equals the given type.527 528 /// Deletes the content, type becomes MT_Type::Null.500 template <> inline bool MultiType::isType<char>() const { return (this->value_ && this->value_->type_ == Type::Char); } ///< Returns true if the current type equals the given type. 501 template <> inline bool MultiType::isType<unsigned char>() const { return (this->value_ && this->value_->type_ == Type::UnsignedChar); } ///< Returns true if the current type equals the given type. 502 template <> inline bool MultiType::isType<short>() const { return (this->value_ && this->value_->type_ == Type::Short); } ///< Returns true if the current type equals the given type. 503 template <> inline bool MultiType::isType<unsigned short>() const { return (this->value_ && this->value_->type_ == Type::UnsignedShort); } ///< Returns true if the current type equals the given type. 504 template <> inline bool MultiType::isType<int>() const { return (this->value_ && this->value_->type_ == Type::Int); } ///< Returns true if the current type equals the given type. 505 template <> inline bool MultiType::isType<unsigned int>() const { return (this->value_ && this->value_->type_ == Type::UnsignedInt); } ///< Returns true if the current type equals the given type. 506 template <> inline bool MultiType::isType<long>() const { return (this->value_ && this->value_->type_ == Type::Long); } ///< Returns true if the current type equals the given type. 507 template <> inline bool MultiType::isType<unsigned long>() const { return (this->value_ && this->value_->type_ == Type::UnsignedLong); } ///< Returns true if the current type equals the given type. 508 template <> inline bool MultiType::isType<long long>() const { return (this->value_ && this->value_->type_ == Type::LongLong); } ///< Returns true if the current type equals the given type. 509 template <> inline bool MultiType::isType<unsigned long long>() const { return (this->value_ && this->value_->type_ == Type::UnsignedLongLong); } ///< Returns true if the current type equals the given type. 510 template <> inline bool MultiType::isType<float>() const { return (this->value_ && this->value_->type_ == Type::Float); } ///< Returns true if the current type equals the given type. 511 template <> inline bool MultiType::isType<double>() const { return (this->value_ && this->value_->type_ == Type::Double); } ///< Returns true if the current type equals the given type. 512 template <> inline bool MultiType::isType<long double>() const { return (this->value_ && this->value_->type_ == Type::LongDouble); } ///< Returns true if the current type equals the given type. 513 template <> inline bool MultiType::isType<bool>() const { return (this->value_ && this->value_->type_ == Type::Bool); } ///< Returns true if the current type equals the given type. 514 template <> inline bool MultiType::isType<void*>() const { return (this->value_ && this->value_->type_ == Type::VoidPointer); } ///< Returns true if the current type equals the given type. 515 template <> inline bool MultiType::isType<std::string>() const { return (this->value_ && this->value_->type_ == Type::String); } ///< Returns true if the current type equals the given type. 516 template <> inline bool MultiType::isType<orxonox::Vector2>() const { return (this->value_ && this->value_->type_ == Type::Vector2); } ///< Returns true if the current type equals the given type. 517 template <> inline bool MultiType::isType<orxonox::Vector3>() const { return (this->value_ && this->value_->type_ == Type::Vector3); } ///< Returns true if the current type equals the given type. 518 template <> inline bool MultiType::isType<orxonox::Vector4>() const { return (this->value_ && this->value_->type_ == Type::Vector4); } ///< Returns true if the current type equals the given type. 519 template <> inline bool MultiType::isType<orxonox::ColourValue>() const { return (this->value_ && this->value_->type_ == Type::ColourValue); } ///< Returns true if the current type equals the given type. 520 template <> inline bool MultiType::isType<orxonox::Quaternion>() const { return (this->value_ && this->value_->type_ == Type::Quaternion); } ///< Returns true if the current type equals the given type. 521 template <> inline bool MultiType::isType<orxonox::Radian>() const { return (this->value_ && this->value_->type_ == Type::Radian); } ///< Returns true if the current type equals the given type. 522 template <> inline bool MultiType::isType<orxonox::Degree>() const { return (this->value_ && this->value_->type_ == Type::Degree); } ///< Returns true if the current type equals the given type. 523 524 /// Deletes the content, type becomes void. 529 525 template <> inline bool MultiType::convert<void>() { this->reset(); return true; } 530 526
Note: See TracChangeset
for help on using the changeset viewer.