Changeset 1321
- Timestamp:
- May 19, 2008, 2:20:56 AM (17 years ago)
- Location:
- code/branches/console/src/core
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
code/branches/console/src/core/ConfigValueContainer.cc
r1313 r1321 99 99 100 100 /** 101 @brief Assigns a new value to the config-value of all objects and writes the change into the config-file. 102 @param input The new value 103 @return True if the new value was successfully assigned 104 */ 105 bool ConfigValueContainer::set(const MultiTypeMath& input) 106 { 107 if (this->bIsVector_) 108 { 109 return this->callFunctionWithIndex(&ConfigValueContainer::set, input.getString()); 110 } 111 else 112 { 113 if (this->tset(input)) 114 { 115 ConfigFileManager::getSingleton()->setValue(this->type_, this->sectionname_, this->varname_, input.getString(), this->value_.isA(MT_string)); 116 return true; 117 } 118 } 119 return false; 120 } 121 122 /** 123 @brief Assigns a new value to the config-value of all objects and writes the change into the config-file. 124 @param index The index in the vector 125 @param input The new value 126 @return True if the new value was successfully assigned 127 */ 128 bool ConfigValueContainer::set(unsigned int index, const MultiTypeMath& input) 129 { 130 if (this->bIsVector_) 131 { 132 if (this->tset(index, input)) 133 { 134 ConfigFileManager::getSingleton()->setValue(this->type_, this->sectionname_, this->varname_, index, input.getString(), this->value_.isA(MT_string)); 135 return true; 136 } 137 } 138 else 139 { 140 COUT(1) << "Error: Config-value '" << this->varname_ << "' in " << this->sectionname_ << " is not a vector." << std::endl; 141 } 142 return false; 143 } 144 145 /** 146 @brief Assigns a new value to the config-value of all objects, but doesn't change the config-file (t stands for temporary). 147 @param input The new value 148 @return True if the new value was successfully assigned 149 */ 150 bool ConfigValueContainer::tset(const MultiTypeMath& input) 151 { 152 if (this->bIsVector_) 153 { 154 return this->callFunctionWithIndex(&ConfigValueContainer::tset, input.getString()); 155 } 156 else 157 { 158 MultiTypeMath temp = this->value_; 159 if (temp.assimilate(input)) 160 { 161 this->value_ = temp; 162 163 if (this->identifier_) 164 this->identifier_->updateConfigValues(); 165 166 return true; 167 } 168 } 169 return false; 170 } 171 172 /** 173 @brief Assigns a new value to the config-value of all objects, but doesn't change the config-file (t stands for temporary). 174 @param index The index in the vector 175 @param input The new value 176 @return True if the new value was successfully assigned 177 */ 178 bool ConfigValueContainer::tset(unsigned int index, const MultiTypeMath& input) 179 { 180 if (this->bIsVector_) 181 { 182 if (index > MAX_VECTOR_INDEX) 183 { 184 COUT(1) << "Error: Index " << index << " is too large." << std::endl; 185 return false; 186 } 187 188 if (index >= this->valueVector_.size()) 189 { 190 for (unsigned int i = this->valueVector_.size(); i <= index; i++) 191 { 192 this->valueVector_.push_back(MultiTypeMath()); 193 ConfigFileManager::getSingleton()->setValue(this->type_, this->sectionname_, this->varname_, i, this->valueVector_[i], this->value_.isA(MT_string)); 194 } 195 } 196 197 MultiTypeMath temp = this->valueVector_[index]; 198 if (temp.assimilate(input)) 199 { 200 this->valueVector_[index] = temp; 201 202 if (this->identifier_) 203 this->identifier_->updateConfigValues(); 204 205 return true; 206 } 207 } 208 else 209 { 210 COUT(1) << "Error: Config-value '" << this->varname_ << "' in " << this->sectionname_ << " is not a vector." << std::endl; 211 } 212 return false; 213 } 214 215 /** 101 216 @brief Adds a new entry to the end of the vector. 102 217 @param input The new entry 103 218 @return True if the new entry was successfully added 104 219 */ 105 bool ConfigValueContainer::add(const std::string& input)220 bool ConfigValueContainer::add(const MultiTypeMath& input) 106 221 { 107 222 if (this->bIsVector_) … … 132 247 } 133 248 COUT(1) << "Error: Invalid vector-index." << std::endl; 134 }135 136 COUT(1) << "Error: Config-value '" << this->varname_ << "' in " << this->sectionname_ << " is not a vector." << std::endl;137 return false;138 }139 140 /**141 @brief Assigns a new value to the config-value of all objects and writes the change into the config-file.142 @param input The new value143 @return True if the new value was successfully assigned144 */145 bool ConfigValueContainer::set(const std::string& input)146 {147 if (this->bIsVector_)148 {149 SubString token(input, " ", "", true, '"', false, '(', ')', false, '\0');150 int index = -1;151 bool success = false;152 153 if (token.size() > 0)154 success = ConvertValue(&index, token[0]);155 156 if (!success || index < 0 || index > MAX_VECTOR_INDEX)157 {158 if (!success)159 {160 COUT(1) << "Error: Config-value '" << this->varname_ << "' in " << this->sectionname_ << " is a vector." << std::endl;161 }162 else163 {164 COUT(1) << "Error: Invalid vector-index." << std::endl;165 }166 return false;167 }168 169 if (token.size() >= 2)170 return this->set(index, token.subSet(1).join());171 else172 return this->set(index, "");173 }174 175 bool success = this->tset(input);176 ConfigFileManager::getSingleton()->setValue(this->type_, this->sectionname_, this->varname_, input, this->value_.isA(MT_string));177 return success;178 }179 180 /**181 @brief Assigns a new value to the config-value of all objects and writes the change into the config-file.182 @param index The index in the vector183 @param input The new value184 @return True if the new value was successfully assigned185 */186 bool ConfigValueContainer::set(unsigned int index, const std::string& input)187 {188 if (this->bIsVector_)189 {190 bool success = this->tset(index, input);191 ConfigFileManager::getSingleton()->setValue(this->type_, this->sectionname_, this->varname_, index, input, this->value_.isA(MT_string));192 return success;193 }194 195 COUT(1) << "Error: Config-value '" << this->varname_ << "' in " << this->sectionname_ << " is not a vector." << std::endl;196 return false;197 }198 199 /**200 @brief Assigns a new value to the config-value of all objects, but doesn't change the config-file (t stands for temporary).201 @param input The new value202 @return True if the new value was successfully assigned203 */204 bool ConfigValueContainer::tset(const std::string& input)205 {206 bool success = this->parse(input);207 if (this->identifier_)208 this->identifier_->updateConfigValues();209 return success;210 }211 212 /**213 @brief Assigns a new value to the config-value of all objects, but doesn't change the config-file (t stands for temporary).214 @param index The index in the vector215 @param input The new value216 @return True if the new value was successfully assigned217 */218 bool ConfigValueContainer::tset(unsigned int index, const std::string& input)219 {220 if (this->bIsVector_)221 {222 bool success = this->parse(index, input);223 if (this->identifier_)224 this->identifier_->updateConfigValues();225 return success;226 249 } 227 250 … … 260 283 for (unsigned int i = 0; i < ConfigFileManager::getSingleton()->getVectorSize(this->type_, this->sectionname_, this->varname_); i++) 261 284 { 262 this->value_.fromString(ConfigFileManager::getSingleton()->getValue(this->type_, this->sectionname_, this->varname_, i, this->defvalueStringVector_[i], this->value_.isA(MT_string))); 285 if (i < this->defvalueStringVector_.size()) 286 this->value_.fromString(ConfigFileManager::getSingleton()->getValue(this->type_, this->sectionname_, this->varname_, i, this->defvalueStringVector_[i], this->value_.isA(MT_string))); 287 else 288 this->value_.fromString(ConfigFileManager::getSingleton()->getValue(this->type_, this->sectionname_, this->varname_, i, MultiTypeMath(), this->value_.isA(MT_string))); 289 263 290 this->valueVector_.push_back(this->value_); 264 291 } … … 267 294 268 295 /** 269 @brief Parses a given std::string into a value of the type of the associated variable and assigns it. 270 @param input The string to convert 271 @return True if the string was successfully parsed 272 */ 273 bool ConfigValueContainer::parse(const std::string& input) 274 { 275 if (this->bIsVector_) 276 { 277 SubString token(input, " ", "", true, '"', false, '(', ')', false, '\0'); 278 int index = -1; 279 bool success = false; 280 281 if (token.size() > 0) 282 success = ConvertValue(&index, token[0]); 283 284 if (!success || index < 0 || index > MAX_VECTOR_INDEX) 285 { 286 if (!success) 287 { 288 COUT(1) << "Error: Config-value '" << this->varname_ << "' in " << this->sectionname_ << " is a vector." << std::endl; 289 } 290 else 291 { 292 COUT(1) << "Error: Invalid vector-index." << std::endl; 293 } 294 return false; 295 } 296 297 if (token.size() >= 2) 298 return this->parse(index, token.subSet(1).join()); 296 @brief Calls the given function with parsed index and the parsed argument from the input string. 297 @param function The function to call 298 @param input The input string 299 @return The returnvalue of the functioncall 300 */ 301 bool ConfigValueContainer::callFunctionWithIndex(bool (ConfigValueContainer::* function) (unsigned int, const MultiTypeMath&), const std::string& input) 302 { 303 SubString token(input, " ", SubString::WhiteSpaces, true, '\\', false, '"', false, '(', ')', false, '\0'); 304 int index = -1; 305 bool success = false; 306 307 if (token.size() > 0) 308 success = ConvertValue(&index, token[0]); 309 310 if (!success || index < 0 || index > MAX_VECTOR_INDEX) 311 { 312 if (!success) 313 { 314 COUT(1) << "Error: Config-value '" << this->varname_ << "' in " << this->sectionname_ << " is a vector." << std::endl; 315 } 299 316 else 300 return this->parse(index, ""); 301 } 302 303 MultiTypeMath temp = this->value_; 304 if (temp.fromString(input)) 305 { 306 this->value_ = temp; 307 return true; 308 } 309 return false; 310 } 311 312 /** 313 @brief Parses a given std::string into a value of the type of the associated variable and assigns it. 314 @param index The index in the vector 315 @param input The string to convert 316 @return True if the string was successfully parsed 317 */ 318 bool ConfigValueContainer::parse(unsigned int index, const std::string& input) 319 { 320 if (this->bIsVector_) 321 { 322 if (index >= this->valueVector_.size()) 323 { 324 for (unsigned int i = this->valueVector_.size(); i <= index; i++) 325 { 326 this->valueVector_.push_back(MultiTypeMath()); 327 ConfigFileManager::getSingleton()->setValue(this->type_, this->sectionname_, this->varname_, i, this->valueVector_[i], this->value_.isA(MT_string)); 328 } 329 } 330 331 MultiTypeMath temp = this->value_; 332 if (temp.fromString(input)) 333 { 334 this->valueVector_[index] = temp; 335 return true; 317 { 318 COUT(1) << "Error: Invalid vector-index." << std::endl; 336 319 } 337 320 return false; 338 321 } 339 322 340 COUT(1) << "Error: Config-value '" << this->varname_ << "' in " << this->sectionname_ << " is not a vector." << std::endl; 341 return false; 342 } 343 344 /** 345 @brief Parses a given std::string into a value of the type of the associated variable and assigns it. 346 @param input The string to convert 347 @param defvalue The default value to assign if the parsing fails 348 @return True if the string was successfully parsed 349 */ 350 bool ConfigValueContainer::parse(const std::string& input, const MultiTypeMath& defvalue) 351 { 352 if (this->parse(input)) 353 return true; 354 355 this->value_ = defvalue; 356 return false; 357 } 358 359 /** 360 @brief Parses a given std::string into a value of the type of the associated variable and assigns it. 361 @param index The index in the vector 362 @param input The string to convert 363 @param defvalue The default value to assign if the parsing fails 364 @return True if the string was successfully parsed 365 */ 366 bool ConfigValueContainer::parse(unsigned int index, const std::string& input, const MultiTypeMath& defvalue) 367 { 368 if (this->bIsVector_) 369 { 370 if (this->parse(index, input)) 371 return true; 372 373 this->valueVector_[index] = defvalue; 374 return false; 375 } 376 377 COUT(1) << "Error: Config-value '" << this->varname_ << "' in " << this->sectionname_ << " is not a vector." << std::endl; 378 return false; 323 if (token.size() >= 2) 324 return (this->*function)(index, token.subSet(1).join()); 325 else 326 return (this->*function)(index, ""); 379 327 } 380 328 -
code/branches/console/src/core/ConfigValueContainer.h
r1313 r1321 100 100 const std::string& getDescription() const; 101 101 102 bool add(const std::string& input); 102 bool set(const MultiTypeMath& input); 103 bool tset(const MultiTypeMath& input); 104 105 bool set(unsigned int index, const MultiTypeMath& input); 106 bool tset(unsigned int index, const MultiTypeMath& input); 107 bool add(const MultiTypeMath& input); 103 108 bool remove(unsigned int index); 104 bool set(const std::string& input); 105 bool tset(const std::string& input); 109 106 110 bool reset(); 107 111 void update(); 108 109 bool parse(const std::string& input);110 bool parse(const std::string& input, const MultiTypeMath& defvalue);111 112 bool set(unsigned int index, const std::string& input);113 bool tset(unsigned int index, const std::string& input);114 bool parse(unsigned int index, const std::string& input);115 bool parse(unsigned int index, const std::string& input, const MultiTypeMath& defvalue);116 112 117 113 /** @brief Converts the config-value to a string. @return The string */ … … 123 119 124 120 private: 121 bool callFunctionWithIndex(bool (ConfigValueContainer::* function) (unsigned int, const MultiTypeMath&), const std::string& input); 122 125 123 bool bIsVector_; //!< True if the container contains a std::vector 126 124
Note: See TracChangeset
for help on using the changeset viewer.