1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
|
#include "Config.h"
const string Config::SCREEN_WIDTH_KEY("screen_width");
const string Config::SCREEN_HEIGHT_KEY("screen_height");
const string Config::FULLSCREEN_KEY("fullscreen");
const string Config::SCREEN_WIDTH_DEFAULT("800");
const string Config::SCREEN_HEIGHT_DEFAULT("600");
const string Config::FULLSCREEN_DEFAULT("false");
Config::Config(const string& filename)
:_screenWidth(0),
_screenHeight(0)
{
ifstream inStream(filename.c_str(), fstream::in);
map<string, string> readValues;
map<string, string> unfoundValues;
readFile(inStream, readValues);
fillValues(readValues, unfoundValues);
inStream.close();
ofstream outStream(filename.c_str(), fstream::app);
writeUnfoundValues(outStream, unfoundValues);
outStream.close();
}
unsigned int Config::screenWidth() const
{
return _screenWidth;
}
unsigned int Config::screenHeight() const
{
return _screenHeight;
}
bool Config::fullscreen() const
{
return _fullscreen;
}
void Config::readFile(ifstream& file, map<string,string>& map)
{
if (!file.is_open()) return;
string nextEntry;
while(!file.eof())
{
file >> nextEntry;
string::size_type equalsIndex = nextEntry.find("=",0);
if (equalsIndex!=string::npos)
{
string key = nextEntry.substr(0,equalsIndex);
string value = nextEntry.substr(equalsIndex+1);
map[key] = value;
}
}
}
void Config::fillValues(const map<string, string>& readValues, map<string, string>& unfoundValues)
{
setScreenWidth(extractValue(readValues, unfoundValues, SCREEN_WIDTH_KEY, SCREEN_WIDTH_DEFAULT));
setScreenHeight(extractValue(readValues, unfoundValues, SCREEN_HEIGHT_KEY, SCREEN_HEIGHT_DEFAULT));
setFullscreen(extractValue(readValues, unfoundValues, FULLSCREEN_KEY, FULLSCREEN_DEFAULT));
}
string Config::extractValue(const map<string, string>& readValues, map<string, string>& unfoundValues, const string& key, const string& defaultValue)
{
map<string, string>::const_iterator findIter = readValues.find(key);
if (findIter != readValues.end())
{
return findIter->second;
}
else
{
unfoundValues[key] = defaultValue;
return defaultValue;
}
}
void Config::writeUnfoundValues(ofstream& file, const map<string, string>& unfoundValues)
{
for (map<string, string>::const_iterator iter = unfoundValues.begin(); iter!=unfoundValues.end(); ++iter)
{
file << iter->first << "=" << iter->second << endl;
}
}
void Config::setScreenWidth(const string& screenWidthStr)
{
_screenWidth = atoi(screenWidthStr.c_str());
}
void Config::setScreenHeight(const string& screenHeightStr)
{
_screenHeight = atoi(screenHeightStr.c_str());
}
void Config::setFullscreen(const string& fullscreenStr)
{
_fullscreen = fullscreenStr=="true";
}
|