Changeset 7401 for code/trunk/src/libraries/core/ConfigFileManager.h
- Timestamp:
- Sep 11, 2010, 12:34:00 AM (15 years ago)
- Location:
- code/trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
code/trunk
- Property svn:mergeinfo changed
/code/branches/doc (added) merged: 7290-7292,7296-7300,7302-7304,7306-7312,7315-7318,7323,7325,7327,7331-7332,7334-7335,7345-7347,7352-7353,7356-7357,7361,7363-7367,7371-7375,7388
- Property svn:mergeinfo changed
-
code/trunk/src/libraries/core/ConfigFileManager.h
r7284 r7401 27 27 */ 28 28 29 /** 30 @file 31 @ingroup Config ConfigFile 32 @brief Declaration of ConfigFileManager and its helper classes, used to load and save config files. 33 */ 34 29 35 #ifndef _ConfigFileManager_H__ 30 36 #define _ConfigFileManager_H__ … … 46 52 // ConfigFileEntry // 47 53 ///////////////////// 54 /** 55 @brief This class represents an entry in the config file. 56 57 This class is pure virtual. Use one of the derived classes to define the type of the entry. 58 */ 48 59 class _CoreExport ConfigFileEntry 49 60 { 50 61 public: 62 /// Destructor 51 63 virtual ~ConfigFileEntry() {}; 64 65 /// Changes the value of the entry. 52 66 virtual void setValue(const std::string& value) = 0; 67 /// Returns the value of the entry. 53 68 virtual const std::string& getValue() const = 0; 69 70 /// Returns the name of the entry 54 71 virtual const std::string& getName() const = 0; 72 73 /// Changes the comment of the entry (will be placed after the value) 55 74 virtual void setComment(const std::string& comment) = 0; 75 76 /// Returns the index of the entry in a vector (used only if it is a vector) 56 77 virtual unsigned int getIndex() const { return 0; } 78 79 /// Defines if this entry is treated as string which means some special treatment of special characters. 57 80 virtual void setString(bool bString) = 0; 81 82 /// Returns the line as it will be stored in the config file. 58 83 virtual const std::string& getFileEntry() const = 0; 59 84 }; … … 63 88 // ConfigFileEntryValue // 64 89 ////////////////////////// 90 /** 91 @brief This class represents a normal value in the config file. 92 */ 65 93 class _CoreExport ConfigFileEntryValue : public ConfigFileEntry 66 94 { 67 95 public: 96 /** 97 @brief Constructor: Initializes the entry. 98 99 @param name The name of the entry 100 @param value The value of the entry 101 @param bString If true, the value is treated as string which means some special treatment of special characters. 102 @param additionalComment An optional comment that will be placed behind the value in the config file 103 */ 68 104 inline ConfigFileEntryValue(const std::string& name, const std::string& value = "", bool bString = false, const std::string& additionalComment = "") 69 105 : name_(name) … … 73 109 { this->update(); } 74 110 111 /// Destructor 75 112 inline virtual ~ConfigFileEntryValue() {} 76 113 … … 92 129 { return this->fileEntry_; } 93 130 131 /// Returns the "key" of the value (in this case it's just the name of the entry, but for vectors it's different) 94 132 inline virtual const std::string& getKeyString() const 95 133 { return this->name_; } … … 98 136 virtual void update(); 99 137 100 const std::string name_; 101 std::string value_; 102 std::string additionalComment_; 103 std::string fileEntry_; 104 bool bString_; 138 const std::string name_; ///< The name of the value 139 std::string value_; ///< The value 140 std::string additionalComment_; ///< The additional comment 141 std::string fileEntry_; ///< The string as it will be stored in the config file 142 bool bString_; ///< If true, the value is treated as string which means some special treatment of special characters. 105 143 }; 106 144 … … 109 147 // ConfigFileEntryVectorValue // 110 148 //////////////////////////////// 149 /** 150 @brief Subclass of ConfigFileEntryValue, represents an element of a vector. 151 */ 111 152 class _CoreExport ConfigFileEntryVectorValue : public ConfigFileEntryValue 112 153 { 113 154 public: 155 /** 156 @brief Constructor: Initializes the entry. 157 158 @param name The name of the vector 159 @param index The index of the element in the vector 160 @param value The value of the element 161 @param bString If true, the value is treated as string which means some special treatment of special characters. 162 @param additionalComment An optional comment that will be placed behind the value in the config file 163 */ 114 164 inline ConfigFileEntryVectorValue(const std::string& name, unsigned int index, const std::string& value = "", bool bString = false, const std::string& additionalComment = "") 115 165 : ConfigFileEntryValue(name, value, bString, additionalComment) … … 117 167 { this->update(); /*No virtual calls in base class ctor*/ } 118 168 169 /// Destructor 119 170 inline ~ConfigFileEntryVectorValue() {} 120 171 … … 122 173 { return this->index_; } 123 174 175 /// Returns the "key" of the value (the name of the vector plus the index of the element) 124 176 inline const std::string& getKeyString() const 125 177 { return this->keyString_; } … … 128 180 void update(); 129 181 130 unsigned int index_; 131 std::string keyString_; 182 unsigned int index_; ///< The index of the element in the vector 183 std::string keyString_; ///< The full name of the entry (the name of the vector plus the index of the element) 132 184 }; 133 185 … … 136 188 // ConfigFileEntryComment // 137 189 //////////////////////////// 190 /** 191 @brief This class represents a line in the config file which contains only a comment. 192 */ 138 193 class _CoreExport ConfigFileEntryComment : public ConfigFileEntry 139 194 { 140 195 public: 196 /// Constructor: Initializes the object. 141 197 inline ConfigFileEntryComment(const std::string& comment) : comment_(comment) {} 198 199 /// Destructor 142 200 inline virtual ~ConfigFileEntryComment() {} 143 201 … … 159 217 { return this->comment_; } 160 218 161 inline virtual const std::string& getKeyString() const162 { return BLANKSTRING; }163 164 219 private: 165 std::string comment_; 220 std::string comment_; ///< The comment 166 221 }; 167 222 … … 170 225 // ConfigFileSection // 171 226 /////////////////////// 227 /** 228 @brief Represents a section in a config file. 229 230 A section has a name and a list of config values. 231 */ 172 232 class _CoreExport ConfigFileSection 173 233 { … … 176 236 177 237 public: 238 /** 239 @brief Constructor: Initializes the section. 240 241 @param name The name of the section 242 @param additionalComment An additional comment placed after the title of the section in the config file 243 */ 178 244 inline ConfigFileSection(const std::string& name, const std::string& additionalComment = "") 179 245 : name_(name) … … 183 249 ~ConfigFileSection(); 184 250 251 /// Returns the name of the section. 185 252 inline const std::string& getName() const 186 253 { return this->name_; } 187 254 255 /// Changes the comment which is placed after the title of the section in the config file. 188 256 inline void setComment(const std::string& comment) 189 257 { this->additionalComment_ = comment; } 190 258 259 /** 260 @brief Stores a value in the section. If the entry doesn't exist, it's created. 261 262 @param name The name of the entry 263 @param value The new value 264 @param bString If true, the value is treated as string which means some special treatment of special characters. 265 */ 191 266 inline void setValue(const std::string& name, const std::string& value, bool bString) 192 267 { this->getOrCreateEntry(name, value, bString)->setValue(value); } 268 /** 269 @brief Returns the value of a given entry in the section. Returns a blank string if the value doesn't exist. 270 271 @param name The name of the entry 272 @param bString If true, the value is treated as string which means some special treatment of special characters. 273 */ 193 274 inline const std::string& getValue(const std::string& name, bool bString) 194 275 { … … 196 277 if (entry) 197 278 { 198 entry->setString(bString); 279 entry->setString(bString); // if the entry was loaded from the config file, we have to tell it if it's a string 199 280 return entry->getValue(); 200 281 } 201 282 return BLANKSTRING; 202 283 } 284 /** 285 @brief Returns the value of a given entry in the section. If it doesn't exist, the entry is created using the fallback value. 286 287 @param name The name of the entry 288 @param fallback The value that will be used if the entry doesn't exist 289 @param bString If true, the value is treated as string which means some special treatment of special characters. 290 */ 203 291 inline const std::string& getOrCreateValue(const std::string& name, const std::string& fallback, bool bString) 204 292 { return this->getOrCreateEntry(name, fallback, bString)->getValue(); } 205 293 294 /** 295 @brief Stores the value of an element of a vector in the section. If the entry doesn't exist, it's created. 296 297 @param name The name of the vector 298 @param index The index of the element in the vector 299 @param value The new value 300 @param bString If true, the value is treated as string which means some special treatment of special characters. 301 */ 206 302 inline void setValue(const std::string& name, unsigned int index, const std::string& value, bool bString) 207 303 { this->getOrCreateEntry(name, index, value, bString)->setValue(value); } 304 /** 305 @brief Returns the value of a given element of a vector in the section. Returns a blank string if the value doesn't exist. 306 307 @param name The name of the vector 308 @param index The index of the element in the vector 309 @param bString If true, the value is treated as string which means some special treatment of special characters. 310 */ 208 311 inline const std::string& getValue(const std::string& name, unsigned int index, bool bString) 209 312 { … … 211 314 if (entry) 212 315 { 213 entry->setString(bString); 316 entry->setString(bString); // if the entry was loaded from the config file, we have to tell it if it's a string 214 317 return entry->getValue(); 215 318 } 216 319 return BLANKSTRING; 217 320 } 321 /** 322 @brief Returns the value of a given element of a vector in the section. If it doesn't exist, the entry is created using the fallback value. 323 324 @param name The name of the vector 325 @param index The index of the element in the vector 326 @param fallback The value that will be used if the entry doesn't exist 327 @param bString If true, the value is treated as string which means some special treatment of special characters. 328 */ 218 329 inline const std::string& getOrCreateValue(const std::string& name, unsigned int index, const std::string& fallback, bool bString) 219 330 { return this->getOrCreateEntry(name, index, fallback, bString)->getValue(); } … … 225 336 226 337 private: 338 /// Returns the list of entries in this section. 227 339 std::list<ConfigFileEntry*>& getEntries() 228 340 { return this->entries_; } 341 /// Returns the begin-iterator of the list of entries in this section. 229 342 std::list<ConfigFileEntry*>::const_iterator getEntriesBegin() const 230 343 { return this->entries_.begin(); } 344 /// Returns the end-iterator of the list of entries in this section. 231 345 std::list<ConfigFileEntry*>::const_iterator getEntriesEnd() const 232 346 { return this->entries_.end(); } … … 236 350 237 351 ConfigFileEntry* getEntry(const std::string& name) const; 352 /** 353 @brief Returns the entry with given name. If it doesn't exist, the entry is created using the fallback value. 354 355 @param name The name of the entry 356 @param fallback The value that will be used if the entry doesn't exist 357 @param bString If true, the value is treated as string which means some special treatment of special characters. 358 */ 238 359 inline ConfigFileEntry* getOrCreateEntry(const std::string& name, const std::string& fallback, bool bString) 239 360 { return (*this->getOrCreateEntryIterator(name, fallback, bString)); } 361 240 362 ConfigFileEntry* getEntry(const std::string& name, unsigned int index) const; 363 /** 364 @brief Returns the entry that contains an element of a vector with given name. If it doesn't exist, the entry is created using the fallback value. 365 366 @param name The name of the entry 367 @param index The index of the element in the vector 368 @param fallback The value that will be used if the entry doesn't exist 369 @param bString If true, the value is treated as string which means some special treatment of special characters. 370 */ 241 371 inline ConfigFileEntry* getOrCreateEntry(const std::string& name, unsigned int index, const std::string& fallback, bool bString) 242 372 { return (*this->getOrCreateEntryIterator(name, index, fallback, bString)); } 243 373 244 std::string name_; 245 std::string additionalComment_; 246 std::list<ConfigFileEntry*> entries_; 247 bool bUpdated_; 374 std::string name_; ///< The name of the section 375 std::string additionalComment_; ///< The additional comment which is placed after the title of the section in the config file 376 std::list<ConfigFileEntry*> entries_; ///< The list of entries in this section 377 bool bUpdated_; ///< True if an entry is created 248 378 }; 249 379 … … 252 382 // ConfigFile // 253 383 //////////////// 384 /** 385 @brief This class represents a config file, which is stored on the hard-disk and contains config values in different sections. 386 387 It provides an interface to manipulate the sections and values. 388 */ 254 389 class _CoreExport ConfigFile 255 390 { … … 263 398 virtual void clear(); 264 399 400 /// Returns the file-name of this config file 265 401 inline const std::string& getFilename() 266 402 { return this->filename_; } 267 403 404 /** 405 @brief Stores a value in the config file. If the entry or its section doesn't exist, it's created. 406 407 @param section The name of the section 408 @param name The name of the entry 409 @param value The new value 410 @param bString If true, the value is treated as string which means some special treatment of special characters. 411 */ 268 412 inline void setValue(const std::string& section, const std::string& name, const std::string& value, bool bString) 269 413 { … … 271 415 this->save(); 272 416 } 417 /** 418 @brief Returns the value of a given entry in the config file. Returns a blank string if the value doesn't exist. 419 420 @param section The name of the section 421 @param name The name of the entry 422 @param bString If true, the value is treated as string which means some special treatment of special characters. 423 */ 273 424 inline const std::string& getValue(const std::string& section, const std::string& name, bool bString) 274 425 { … … 276 427 return (sectionPtr ? sectionPtr->getValue(name, bString) : BLANKSTRING); 277 428 } 278 const std::string& getOrCreateValue(const std::string& section, const std::string& name, const std::string& fallback, bool bString); 279 429 /** 430 @brief Returns the value of a given entry in the config file. If it doesn't exist, the entry is created using the fallback value. 431 432 @param section The name of the section 433 @param name The name of the entry 434 @param fallback The value that will be used if the entry doesn't exist 435 @param bString If true, the value is treated as string which means some special treatment of special characters. 436 */ 437 inline const std::string& getOrCreateValue(const std::string& section, const std::string& name, const std::string& fallback, bool bString) 438 { 439 const std::string& output = this->getOrCreateSection(section)->getOrCreateValue(name, fallback, bString); 440 this->saveIfUpdated(); 441 return output; 442 } 443 444 /** 445 @brief Stores the value of an element of a vector in the config file. If the entry or its section doesn't exist, it's created. 446 447 @param section The name of the section 448 @param name The name of the vector 449 @param index The index of the element in the vector 450 @param value The new value 451 @param bString If true, the value is treated as string which means some special treatment of special characters. 452 */ 280 453 inline void setValue(const std::string& section, const std::string& name, unsigned int index, const std::string& value, bool bString) 281 454 { … … 283 456 this->save(); 284 457 } 458 /** 459 @brief Returns the value of a given element of a vector in the config file. Returns a blank string if the value doesn't exist. 460 461 @param section The name of the section 462 @param name The name of the vector 463 @param index The index of the element in the vector 464 @param bString If true, the value is treated as string which means some special treatment of special characters. 465 */ 285 466 inline const std::string& getValue(const std::string& section, const std::string& name, unsigned int index, bool bString) 286 467 { … … 288 469 return (sectionPtr ? sectionPtr->getValue(name, index, bString) : BLANKSTRING); 289 470 } 290 const std::string& getOrCreateValue(const std::string& section, const std::string& name, unsigned int index, const std::string& fallback, bool bString); 471 /** 472 @brief Returns the value of a given element of a vector in the config file. If it doesn't exist, the entry is created using the fallback value. 473 474 @param section The name of the section 475 @param name The name of the vector 476 @param index The index of the element in the vector 477 @param fallback The value that will be used if the entry doesn't exist 478 @param bString If true, the value is treated as string which means some special treatment of special characters. 479 */ 480 const std::string& getOrCreateValue(const std::string& section, const std::string& name, unsigned int index, const std::string& fallback, bool bString) 481 { 482 const std::string& output = this->getOrCreateSection(section)->getOrCreateValue(name, index, fallback, bString); 483 this->saveIfUpdated(); 484 return output; 485 } 291 486 292 487 void deleteVectorEntries(const std::string& section, const std::string& name, unsigned int startindex = 0); 488 /** 489 @brief Returns the size of a config vector. 490 @param section The section of the vector 491 @param name The name of the vector 492 */ 293 493 inline unsigned int getVectorSize(const std::string& section, const std::string& name) const 294 494 { … … 297 497 } 298 498 299 static const char* DEFAULT_CONFIG_FOLDER; 499 static const char* DEFAULT_CONFIG_FOLDER; ///< The folder where the default config files will be stored 300 500 301 501 protected: … … 303 503 ConfigFileSection* getOrCreateSection(const std::string& section); 304 504 305 std::list<ConfigFileSection*> sections_; 505 std::list<ConfigFileSection*> sections_; ///< A list of sections in this config file 306 506 307 507 private: 308 508 void saveIfUpdated(); 309 const std::string filename_; 310 const bool bCopyFallbackFile_; 311 bool bUpdated_; 509 510 const std::string filename_; ///< The filename of this config file 511 const bool bCopyFallbackFile_; ///< If true, the default config file is copied into the config-directory before loading the file 512 bool bUpdated_; ///< Becomes true if a section is added 312 513 }; 313 514 … … 316 517 // SettingsConfigFile // 317 518 //////////////////////// 519 /** 520 @brief Child class of ConfigFile, used to store the settings of the game. 521 522 In addition to ConfigFile, this class provides an interface to manipulate the settings 523 with console commands and to cache entries in instances of ConfigValueContainer. 524 525 SettingsConfigFile is a Singleton, meaning there's only one instance of this class 526 (and thus only one config file that stores settings). 527 */ 318 528 class _CoreExport SettingsConfigFile // tolua_export 319 529 : public ConfigFile, public Singleton<SettingsConfigFile> … … 338 548 void removeConfigValueContainer(ConfigValueContainer* container); 339 549 550 /// Returns a set containing the names of all sections in this config file. 340 551 inline const std::set<std::string>& getSectionNames() 341 552 { return this->sectionNames_; } 553 /// Returns the lower-bound-iterator of the @ref ConfigValueContainer "config value containers" for the given section. 342 554 inline ContainerMap::const_iterator getContainerLowerBound(const std::string section) 343 555 { return this->containers_.lower_bound(section); } 556 /// Returns the upper-bound-iterator of the @ref ConfigValueContainer "config value containers" for the given section. 344 557 inline ContainerMap::const_iterator getContainerUpperBound(const std::string section) 345 558 { return this->containers_.upper_bound(section); } … … 351 564 bool configImpl(const std::string& section, const std::string& entry, const std::string& value, bool (ConfigValueContainer::*function)(const MultiType&)); 352 565 353 ContainerMap containers_; 354 std::set<std::string> sectionNames_; 355 static SettingsConfigFile* singletonPtr_s; 566 ContainerMap containers_; ///< Stores all @ref ConfigValueContainer "config value containers" 567 std::set<std::string> sectionNames_; ///< Stores all section names 568 static SettingsConfigFile* singletonPtr_s; ///< The singleton pointer 356 569 }; // tolua_export 357 570 … … 360 573 // ConfigFileManager // 361 574 /////////////////////// 575 /** 576 @brief Manages the different config files (settings, calibration, etc). Implemented as Singleton. 577 */ 362 578 class _CoreExport ConfigFileManager : public Singleton<ConfigFileManager> 363 579 { … … 369 585 void setFilename(ConfigFileType::Value type, const std::string& filename); 370 586 587 /// Returns the config file of a given type (settings, calibration, etc.) 371 588 inline ConfigFile* getConfigFile(ConfigFileType::Value type) 372 589 { … … 376 593 377 594 private: 378 ConfigFileManager(const ConfigFileManager&); 379 380 boost::array<ConfigFile*, 3> configFiles_; 381 static ConfigFileManager* singletonPtr_s; 595 ConfigFileManager(const ConfigFileManager&); ///< Copy-constructor: not implemented 596 597 boost::array<ConfigFile*, 3> configFiles_; ///< Stores the config files for each type in an array (must have the same size like ConfigFileType::Value) 598 static ConfigFileManager* singletonPtr_s; ///< Stores the singleton-pointer 382 599 }; 383 600 } // tolua_export
Note: See TracChangeset
for help on using the changeset viewer.