Changeset 726
- Timestamp:
- Dec 30, 2007, 1:50:02 AM (17 years ago)
- Location:
- code/branches/FICN/src
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
code/branches/FICN/src/misc/Convert.h
r724 r726 20 20 * 21 21 * Author: 22 * Benjamin Grauer 23 * Co-authors: 22 24 * Fabian 'x3n' Landau 23 * Co-authors:24 * ...25 *26 25 */ 27 26 … … 37 36 #include <sstream> 38 37 39 //! The Convert class has some static member functions to convert strings to values and values to strings. 40 class Convert 38 39 // DEFAULT CLASS 40 template <typename FromType, typename ToType> 41 class Converter 41 42 { 42 public: 43 /** 44 @brief Converts a value of any type to a string. 45 @param output The string to write the result in 46 @param input The variable to convert 47 @return True if the conversion succeded 48 49 @example 50 float f = 3.14; 51 std::string output; 52 bool success = Convert::ToString(output, f); 53 */ 54 template <typename T> 55 static bool ToString(std::string* output, T input) 56 { 57 std::ostringstream oss; 58 if (oss << input) 59 { 60 (*output) = oss.str(); 61 return true; 62 } 63 64 return false; 65 } 66 67 /** 68 @brief Converts a value of any type to a string and assigns a defaultvalue if the conversion fails. 69 @param output The string to write the result in 70 @param input The variable to convert 71 @param fallbackString The assigned string if the conversion fails. 72 @return True if the conversion succeeded 73 74 @example 75 float f = 3.14; 76 std::string output; 77 bool success = Convert::ToString(output, f, "0.000000"); 78 */ 79 template <typename T> 80 static bool ToString(std::string* output, T input, const std::string& fallbackString) 81 { 82 if (Convert::ToString(output, input)) 83 return true; 84 85 (*output) = fallbackString; 86 return false; 87 } 88 89 /** 90 @brief Converts a string to a value of any type. 91 @param output The variable to assign the result to 92 @param input The string to convert 93 @return True if the conversion succeeded 94 95 @example 96 std::string input = "3.14"; 97 float f; 98 bool success = string2Number(f, input); 99 */ 100 template <typename T> 101 static bool FromString(T* output, const std::string& input) 102 { 103 std::istringstream iss(input); 104 if (iss >> (*output)) 105 return true; 106 107 return false; 108 } 109 110 /** 111 @brief Converts a string to a value of any type. 112 @param output The variable to assign the result to 113 @param input The string to convert 114 @param fallbackValue The assigned value if the conversion fails 115 @return True if the conversion succeeded 116 117 @example 118 std::string input = "3.14"; 119 float f; 120 bool success = string2Number(f, input, 0.000000); 121 */ 122 template <typename T> 123 static bool FromString(T* output, const std::string& input, T fallbackValue) 124 { 125 if (Convert::FromString(output, input)) 126 return true; 127 128 (*output) = fallbackValue; 129 return false; 130 } 43 public: 44 bool operator()(ToType* output, const FromType& input) const 45 { 46 return false; 47 } 131 48 }; 132 49 50 // PARTIAL SPECIALIZATION TO CONVERT TO STRINGS 51 template<typename FromType> 52 class Converter<FromType, std::string> 53 { 54 public: 55 bool operator()(std::string* output, const FromType& input) const 56 { 57 std::ostringstream oss; 58 if (oss << input) 59 { 60 (*output) = oss.str(); 61 return true; 62 } 63 else 64 return false; 65 } 66 }; 67 68 // PARTIAL SPECIALIZATION TO CONVERT FROM STRING 69 template<typename ToType> 70 class Converter<std::string, ToType> 71 { 72 public: 73 bool operator()(ToType* output, const std::string& input) const 74 { 75 std::istringstream iss(input); 76 if (iss >> (*output)) 77 return true; 78 else 79 return false; 80 } 81 }; 82 83 // FUNCTION SO WE DO NOT HAVE TO TELL THE COMPILER ABOUT THE TYPE 84 template<typename FromType, typename ToType> 85 static bool ConvertValue(ToType* output, const FromType& input) 86 { 87 Converter<FromType, ToType> converter; 88 return converter(output, input); 89 } 90 91 // THE SAME, BUT WITH DEFAULT VALUE 92 template<typename FromType, typename ToType> 93 static bool ConvertValue(ToType* output, const FromType& input, const ToType& fallback) 94 { 95 Converter<FromType, ToType> converter; 96 if (converter(output, input)) 97 return true; 98 99 (*output) = fallback; 100 return false; 101 } 102 133 103 #endif /* _Convert_H__ */ -
code/branches/FICN/src/orxonox/core/ConfigValueContainer.cc
r725 r726 50 50 this->type_ = VT_Int; 51 51 52 Convert ::ToString(&this->defvalueString_, defvalue, "0");// Try to convert the default-value to a string52 ConvertValue(&this->defvalueString_, defvalue, std::string("0")); // Try to convert the default-value to a string 53 53 this->searchConfigFileLine(); // Search the entry in the config-file 54 54 … … 72 72 this->type_ = VT_uInt; 73 73 74 Convert ::ToString(&this->defvalueString_, defvalue, "0");// Try to convert the default-value to a string74 ConvertValue(&this->defvalueString_, defvalue, std::string("0")); // Try to convert the default-value to a string 75 75 this->searchConfigFileLine(); // Search the entry in the config-file 76 76 … … 94 94 this->type_ = VT_Char; 95 95 96 Convert ::ToString(&this->defvalueString_, (int)defvalue, "0");// Try to convert the default-value to a string96 ConvertValue(&this->defvalueString_, (int)defvalue, std::string("0")); // Try to convert the default-value to a string 97 97 this->searchConfigFileLine(); // Search the entry in the config-file 98 98 … … 116 116 this->type_ = VT_uChar; 117 117 118 Convert ::ToString(&this->defvalueString_, (unsigned int)defvalue, "0"); // Try to convert the default-value to a string118 ConvertValue(&this->defvalueString_, (unsigned int)defvalue, std::string("0")); // Try to convert the default-value to a string 119 119 this->searchConfigFileLine(); // Search the entry in the config-file 120 120 … … 138 138 this->type_ = VT_Float; 139 139 140 Convert ::ToString(&this->defvalueString_, defvalue, "0.000000");// Try to convert the default-value to a string140 ConvertValue(&this->defvalueString_, defvalue, std::string("0.000000")); // Try to convert the default-value to a string 141 141 this->searchConfigFileLine(); // Search the entry in the config-file 142 142 … … 160 160 this->type_ = VT_Double; 161 161 162 Convert ::ToString(&this->defvalueString_, defvalue, "0.000000");// Try to convert the default-value to a string162 ConvertValue(&this->defvalueString_, defvalue, std::string("0.000000")); // Try to convert the default-value to a string 163 163 this->searchConfigFileLine(); // Search the entry in the config-file 164 164 … … 182 182 this->type_ = VT_LongDouble; 183 183 184 Convert ::ToString(&this->defvalueString_, defvalue, "0.000000");// Try to convert the default-value to a string184 ConvertValue(&this->defvalueString_, defvalue, std::string("0.000000")); // Try to convert the default-value to a string 185 185 this->searchConfigFileLine(); // Search the entry in the config-file 186 186 … … 384 384 bool ConfigValueContainer::parseSting(const std::string& input, int defvalue) 385 385 { 386 return Convert ::FromString(&this->value_.value_int_, input, defvalue);386 return ConvertValue(&this->value_.value_int_, input, defvalue); 387 387 } 388 388 … … 395 395 bool ConfigValueContainer::parseSting(const std::string& input, unsigned int defvalue) 396 396 { 397 return Convert ::FromString(&this->value_.value_uint_, input, defvalue);397 return ConvertValue(&this->value_.value_uint_, input, defvalue); 398 398 } 399 399 … … 407 407 { 408 408 // I used value_int_ instead of value_char_ to avoid number <-> char confusion in the config-file 409 return Convert ::FromString(&this->value_.value_int_, input, (int)defvalue);409 return ConvertValue(&this->value_.value_int_, input, (int)defvalue); 410 410 } 411 411 … … 419 419 { 420 420 // I used value_uint_ instead of value_uchar_ to avoid number <-> char confusion in the config-file 421 return Convert ::FromString(&this->value_.value_uint_, input, (unsigned int)defvalue);421 return ConvertValue(&this->value_.value_uint_, input, (unsigned int)defvalue); 422 422 } 423 423 … … 430 430 bool ConfigValueContainer::parseSting(const std::string& input, float defvalue) 431 431 { 432 return Convert ::FromString(&this->value_.value_float_, input, defvalue);432 return ConvertValue(&this->value_.value_float_, input, defvalue); 433 433 } 434 434 … … 441 441 bool ConfigValueContainer::parseSting(const std::string& input, double defvalue) 442 442 { 443 return Convert ::FromString(&this->value_.value_double_, input, defvalue);443 return ConvertValue(&this->value_.value_double_, input, defvalue); 444 444 } 445 445 … … 452 452 bool ConfigValueContainer::parseSting(const std::string& input, long double defvalue) 453 453 { 454 return Convert ::FromString(&this->value_.value_long_double_, input, defvalue);454 return ConvertValue(&this->value_.value_long_double_, input, defvalue); 455 455 } 456 456 … … 477 477 { 478 478 // Its not a known word - is it a number? 479 return Convert ::FromString(&this->value_.value_bool_, input, defvalue);479 return ConvertValue(&this->value_.value_bool_, input, defvalue); 480 480 } 481 481 … … 549 549 { 550 550 std::vector<std::string> tokens = tokenize(input.substr(pos1, pos2 - pos1), ","); 551 if (!Convert ::FromString(&this->value_vector2_.x, tokens[0], defvalue.x))551 if (!ConvertValue(&this->value_vector2_.x, tokens[0])) 552 552 { 553 553 this->value_vector2_ = defvalue; 554 554 return false; 555 555 } 556 if (!Convert ::FromString(&this->value_vector2_.y, tokens[1], defvalue.y))556 if (!ConvertValue(&this->value_vector2_.y, tokens[1])) 557 557 { 558 558 this->value_vector2_ = defvalue; … … 583 583 { 584 584 std::vector<std::string> tokens = tokenize(input.substr(pos1, pos2 - pos1), ","); 585 if (!Convert ::FromString(&this->value_vector3_.x, tokens[0], defvalue.x))585 if (!ConvertValue(&this->value_vector3_.x, tokens[0])) 586 586 { 587 587 this->value_vector3_ = defvalue; 588 588 return false; 589 589 } 590 if (!Convert ::FromString(&this->value_vector3_.y, tokens[1], defvalue.y))590 if (!ConvertValue(&this->value_vector3_.y, tokens[1])) 591 591 { 592 592 this->value_vector3_ = defvalue; 593 593 return false; 594 594 } 595 if (!Convert ::FromString(&this->value_vector3_.z, tokens[2], defvalue.z))595 if (!ConvertValue(&this->value_vector3_.z, tokens[2])) 596 596 { 597 597 this->value_vector3_ = defvalue; … … 622 622 { 623 623 std::vector<std::string> tokens = tokenize(input.substr(pos1, pos2 - pos1), ","); 624 if (!Convert ::FromString(&this->value_colourvalue_.r, tokens[0], defvalue.r))624 if (!ConvertValue(&this->value_colourvalue_.r, tokens[0])) 625 625 { 626 626 this->value_colourvalue_ = defvalue; 627 627 return false; 628 628 } 629 if (!Convert ::FromString(&this->value_colourvalue_.g, tokens[1], defvalue.g))629 if (!ConvertValue(&this->value_colourvalue_.g, tokens[1])) 630 630 { 631 631 this->value_colourvalue_ = defvalue; 632 632 return false; 633 633 } 634 if (!Convert ::FromString(&this->value_colourvalue_.b, tokens[2], defvalue.b))634 if (!ConvertValue(&this->value_colourvalue_.b, tokens[2])) 635 635 { 636 636 this->value_colourvalue_ = defvalue; 637 637 return false; 638 638 } 639 if (!Convert ::FromString(&this->value_colourvalue_.a, tokens[3], defvalue.a))639 if (!ConvertValue(&this->value_colourvalue_.a, tokens[3])) 640 640 { 641 641 this->value_colourvalue_ = defvalue; -
code/branches/FICN/src/orxonox/core/ConfigValueContainer.h
r717 r726 124 124 inline ConfigValueContainer& getValue(const char* value) { value = this->value_string_.c_str(); return *this; } 125 125 /** @returns the value. @param value This is only needed to determine the right type. */ 126 inline ConfigValueContainer& getValue(Vector2& value) { value = this->value_vector2_; return *this; }126 inline ConfigValueContainer& getValue(Vector2& value) { value = this->value_vector2_; return *this; } 127 127 /** @returns the value. @param value This is only needed to determine the right type. */ 128 inline ConfigValueContainer& getValue(Vector3& value) { value = this->value_vector3_; return *this; }128 inline ConfigValueContainer& getValue(Vector3& value) { value = this->value_vector3_; return *this; } 129 129 /** @returns the value. @param value This is only needed to determine the right type. */ 130 inline ConfigValueContainer& getValue(ColourValue& value) { value = this->value_colourvalue_; return *this; }130 inline ConfigValueContainer& getValue(ColourValue& value) { value = this->value_colourvalue_; return *this; } 131 131 132 132 void description(const std::string& description);
Note: See TracChangeset
for help on using the changeset viewer.