summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBjørn Lindeijer <bjorn@lindeijer.nl>2005-01-05 22:29:21 +0000
committerBjørn Lindeijer <bjorn@lindeijer.nl>2005-01-05 22:29:21 +0000
commitb15fcd7592e33b5a837047d0810e5b523fa4a7ad (patch)
tree79500c31f7ea81128accb3332e356ba16fccbb4a /src
parentb1acd70f999fcd981512829cf6100ad9d358d0e6 (diff)
downloadmana-b15fcd7592e33b5a837047d0810e5b523fa4a7ad.tar.gz
mana-b15fcd7592e33b5a837047d0810e5b523fa4a7ad.tar.bz2
mana-b15fcd7592e33b5a837047d0810e5b523fa4a7ad.tar.xz
mana-b15fcd7592e33b5a837047d0810e5b523fa4a7ad.zip
Small fix in handling spaces around delimiter in ini file.
Diffstat (limited to 'src')
-rw-r--r--src/configuration.cpp78
-rw-r--r--src/configuration.h69
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