diff options
author | Bjørn Lindeijer <bjorn@lindeijer.nl> | 2005-01-05 22:29:21 +0000 |
---|---|---|
committer | Bjørn Lindeijer <bjorn@lindeijer.nl> | 2005-01-05 22:29:21 +0000 |
commit | b15fcd7592e33b5a837047d0810e5b523fa4a7ad (patch) | |
tree | 79500c31f7ea81128accb3332e356ba16fccbb4a | |
parent | b1acd70f999fcd981512829cf6100ad9d358d0e6 (diff) | |
download | mana-b15fcd7592e33b5a837047d0810e5b523fa4a7ad.tar.gz mana-b15fcd7592e33b5a837047d0810e5b523fa4a7ad.tar.bz2 mana-b15fcd7592e33b5a837047d0810e5b523fa4a7ad.tar.xz mana-b15fcd7592e33b5a837047d0810e5b523fa4a7ad.zip |
Small fix in handling spaces around delimiter in ini file.
-rw-r--r-- | src/configuration.cpp | 78 | ||||
-rw-r--r-- | src/configuration.h | 69 |
2 files changed, 86 insertions, 61 deletions
diff --git a/src/configuration.cpp b/src/configuration.cpp index 75d28b8f..0a1bd551 100644 --- a/src/configuration.cpp +++ b/src/configuration.cpp @@ -23,43 +23,49 @@ #include "configuration.h" #include <math.h> -/** - \brief read INI file and parse all options into memory - \param filename full path to INI file (~/.manaworld/tmw.ini) - - NOTE: - first a line is checked wether it is a comment or not by - looking for INI_COMMENTER. after this another check is - done for INI_DELIMITER if the previous check failed. - if this line is a valid option all spaces in it get - stripped away (including the value) and it is added to - the list iniOptions. -*/ +Configuration::OptionValue::OptionValue(): + numericValue(0.0f) +{ +} + void Configuration::init(std::string filename) { + /* NOTE: + * first a line is checked wether it is a comment or not by + * looking for INI_COMMENTER. after this another check is + * done for INI_DELIMITER if the previous check failed. + * if this line is a valid option all spaces in it get + * stripped away (including the value) and it is added to + * the list iniOptions. + */ std::ifstream inFile(filename.c_str(), std::ifstream::in); std::string inBuffer; unsigned int position; - INI_OPTION optionTmp; + OptionValue optionTmp; iniOptions.clear(); while (inFile.good()) { getline(inFile, inBuffer, '\n'); + std::cout << inBuffer << std::endl; if (inBuffer.substr(0, 1) != INI_COMMENTER) { + // Replace spaces with void + while (inBuffer.find(" ", 0) != std::string::npos) { + inBuffer.replace(inBuffer.find(" ", 0), 1, ""); + } + position = inBuffer.find(INI_DELIMITER, 0); if (position != std::string::npos) { - // replace spaces with void :) - while (inBuffer.find(" ", 0) != std::string::npos) { - inBuffer.replace(inBuffer.find(" ", 0), 1, ""); - } + std::cout << inBuffer << std::endl; std::string key = inBuffer.substr(0, position); - optionTmp.stringValue = inBuffer.substr(position + 1, - inBuffer.length()); - inBuffer = inBuffer.substr(position+1, inBuffer.length()); - optionTmp.numericValue = atof(inBuffer.c_str()); + if (inBuffer.length() > position + 1) { + optionTmp.stringValue = inBuffer.substr( + position + 1, inBuffer.length()); + optionTmp.numericValue = atof( + optionTmp.stringValue.c_str()); + } iniOptions[key] = optionTmp; @@ -74,16 +80,12 @@ void Configuration::init(std::string filename) { inFile.close(); } -/** - \brief write the current settings back to an ini-file - \param filename full path to INI file (~/.manaworld/tmw.ini) -*/ bool Configuration::write(std::string filename) { std::ofstream out(filename.c_str(), std::ofstream::out | std::ofstream::trunc); char tmp[20]; - INI_OPTION optionTmp; + OptionValue optionTmp; for (iter = iniOptions.begin(); iter != iniOptions.end(); iter++) { out.write(iter->first.c_str(), iter->first.length()); out.write("=", 1); @@ -114,13 +116,8 @@ bool Configuration::write(std::string filename) { return true; } -/** - \brief set an option using a string value - \param key option identifier - \param value value -*/ void Configuration::setValue(std::string key, std::string value) { - INI_OPTION optionTmp; + OptionValue optionTmp; #ifdef __DEBUG std::cout << "Configuration::setValue(" << key << ", " << value << ")\n"; @@ -130,13 +127,8 @@ void Configuration::setValue(std::string key, std::string value) { iniOptions[key] = optionTmp; } -/** - \brief set an option using a numeric value - \param key option identifier - \param value value -*/ void Configuration::setValue(std::string key, float value) { - INI_OPTION optionTmp; + OptionValue optionTmp; #ifdef __DEBUG std::cout << "Configuration::setValue(" << key << ", " << value << ")\n"; @@ -146,11 +138,6 @@ void Configuration::setValue(std::string key, float value) { iniOptions[key] = optionTmp; } -/** - \brief get a value as string - \param key option identifier - \param deflt default option if not there or error -*/ std::string Configuration::getValue(std::string key, std::string deflt) { iter = iniOptions.find(key); if (iter != iniOptions.end()) { @@ -159,11 +146,6 @@ std::string Configuration::getValue(std::string key, std::string deflt) { return deflt; } -/** - \brief get a value as numeric (float) - \param key option identifier - \param deflt default option if not there or error -*/ float Configuration::getValue(std::string key, float deflt) { iter = iniOptions.find(key); if (iter != iniOptions.end()) { diff --git a/src/configuration.h b/src/configuration.h index e4239ef0..bae60af3 100644 --- a/src/configuration.h +++ b/src/configuration.h @@ -31,31 +31,74 @@ #include <fstream> /** - * INI configuration handler for reading (and writing) + * INI configuration handler for reading (and writing). * * \ingroup CORE */ class Configuration { public: - void init(std::string); + /** + * \brief Reads INI file and parse all options into memory. + * \param filename Full path to INI file (~/.manaworld/tmw.ini) + */ + void init(std::string filename); - bool write(std::string); + /** + * \brief Writes the current settings back to an ini-file. + * \param filename Full path to INI file (~/.manaworld/tmw.ini) + */ + bool write(std::string filename); - void setValue(std::string, std::string); - void setValue(std::string, float); + /** + * \brief Sets an option using a string value. + * \param key Option identifier. + * \param value Value. + */ + void setValue(std::string key, std::string value); - std::string getValue(std::string, std::string); - float getValue(std::string, float); + /** + * \brief Sets an option using a numeric value. + * \param key Option identifier. + * \param value Value. + */ + void setValue(std::string key, float value); + + /** + * \brief Gets a value as string. + * \param key Option identifier. + * \param deflt Default option if not there or error. + */ + std::string getValue(std::string key, std::string deflt); + + /** + * \brief Gets a value as numeric (float). + * \param key Option identifier. + * \param deflt Default option if not there or error. + */ + float getValue(std::string key, float delflt); private: - bool keyExists(std::string); + /** + * Returns wether they given key exists. + */ + bool keyExists(std::string key); + + /** + * A simple data structure to store the value of a configuration + * option. + */ + class OptionValue { + public: + /** + * Constructor. + */ + OptionValue(); - typedef struct INI_OPTION { - std::string stringValue; - float numericValue; + std::string stringValue; + float numericValue; }; - std::map<std::string, INI_OPTION> iniOptions; - std::map<std::string, INI_OPTION>::iterator iter; + std::map<std::string, OptionValue> iniOptions; + std::map<std::string, OptionValue>::iterator iter; }; #endif |