git repos / blockattack-game

blame: source/code/common.cc

normal view · raw

89c4a3a6 sago007 2008-08-29 14:32 1
/*
89c4a3a6 sago007 2008-08-29 14:32 2
Block Attack - Rise of the Blocks, SDL game, besed on Nintendo's Tetris Attack
89c4a3a6 sago007 2008-08-29 14:32 3
Copyright (C) 2008 Poul Sander
89c4a3a6 sago007 2008-08-29 14:32 4
89c4a3a6 sago007 2008-08-29 14:32 5
    This program is free software; you can redistribute it and/or modify
89c4a3a6 sago007 2008-08-29 14:32 6
    it under the terms of the GNU General Public License as published by
89c4a3a6 sago007 2008-08-29 14:32 7
    the Free Software Foundation; either version 2 of the License, or
89c4a3a6 sago007 2008-08-29 14:32 8
    (at your option) any later version.
89c4a3a6 sago007 2008-08-29 14:32 9
89c4a3a6 sago007 2008-08-29 14:32 10
    This program is distributed in the hope that it will be useful,
89c4a3a6 sago007 2008-08-29 14:32 11
    but WITHOUT ANY WARRANTY; without even the implied warranty of
89c4a3a6 sago007 2008-08-29 14:32 12
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
89c4a3a6 sago007 2008-08-29 14:32 13
    GNU General Public License for more details.
89c4a3a6 sago007 2008-08-29 14:32 14
89c4a3a6 sago007 2008-08-29 14:32 15
    You should have received a copy of the GNU General Public License
89c4a3a6 sago007 2008-08-29 14:32 16
    along with this program; if not, write to the Free Software
89c4a3a6 sago007 2008-08-29 14:32 17
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
89c4a3a6 sago007 2008-08-29 14:32 18
89c4a3a6 sago007 2008-08-29 14:32 19
    Poul Sander
89c4a3a6 sago007 2008-08-29 14:32 20
    R�vehjvej 36, V. 1111
89c4a3a6 sago007 2008-08-29 14:32 21
    2800 Kgs. Lyngby
89c4a3a6 sago007 2008-08-29 14:32 22
    DENMARK
89c4a3a6 sago007 2008-08-29 14:32 23
    blockattack@poulsander.com
89c4a3a6 sago007 2008-08-29 14:32 24
    http://blockattack.sf.net
89c4a3a6 sago007 2008-08-29 14:32 25
*/
89c4a3a6 sago007 2008-08-29 14:32 26
89c4a3a6 sago007 2008-08-29 14:32 27
#include "common.h"
769a41a0 sago007 2008-09-24 12:54 28
#include <sstream>
769a41a0 sago007 2008-09-24 12:54 29
769a41a0 sago007 2008-09-24 12:54 30
//Function to convert numbers to string
769a41a0 sago007 2008-09-24 12:54 31
string itoa(int num)
769a41a0 sago007 2008-09-24 12:54 32
{
769a41a0 sago007 2008-09-24 12:54 33
    stringstream converter;
769a41a0 sago007 2008-09-24 12:54 34
    converter << num;
769a41a0 sago007 2008-09-24 12:54 35
    return converter.str();
769a41a0 sago007 2008-09-24 12:54 36
}
769a41a0 sago007 2008-09-24 12:54 37
769a41a0 sago007 2008-09-24 12:54 38
string double2str(double num)
769a41a0 sago007 2008-09-24 12:54 39
{
769a41a0 sago007 2008-09-24 12:54 40
    stringstream converter;
769a41a0 sago007 2008-09-24 12:54 41
    converter << num;
769a41a0 sago007 2008-09-24 12:54 42
    return converter.str();
769a41a0 sago007 2008-09-24 12:54 43
}        
769a41a0 sago007 2008-09-24 12:54 44
d07b805e sago007 2009-01-27 13:15 45
/**
d07b805e sago007 2009-01-27 13:15 46
 * str2double parses a string and returns a double with the value of the string.
fcd5a134 sago007 2008-12-19 01:11 47
 * if the string is not a double then 0.0 is returned instead of throing an error
fcd5a134 sago007 2008-12-19 01:11 48
 * in that way this function will always return a useable value.
fcd5a134 sago007 2008-12-19 01:11 49
 */
769a41a0 sago007 2008-09-24 12:54 50
double str2double(string str2parse)
769a41a0 sago007 2008-09-24 12:54 51
{
769a41a0 sago007 2008-09-24 12:54 52
    try{
769a41a0 sago007 2008-09-24 12:54 53
        stringstream converter(str2parse);
769a41a0 sago007 2008-09-24 12:54 54
        double val = 0.0;
769a41a0 sago007 2008-09-24 12:54 55
        converter >> val;
769a41a0 sago007 2008-09-24 12:54 56
        return val;
769a41a0 sago007 2008-09-24 12:54 57
    }catch(ios_base::failure f)
769a41a0 sago007 2008-09-24 12:54 58
    {
769a41a0 sago007 2008-09-24 12:54 59
        return 0.0;
769a41a0 sago007 2008-09-24 12:54 60
    }
769a41a0 sago007 2008-09-24 12:54 61
}
769a41a0 sago007 2008-09-24 12:54 62
d07b805e sago007 2009-01-27 13:15 63
/**
d07b805e sago007 2009-01-27 13:15 64
 * str2int parses a string and returns an int with the value of the string.
fcd5a134 sago007 2008-12-19 01:11 65
 * if the string is not an int then 0 is returned instead of throing an error
fcd5a134 sago007 2008-12-19 01:11 66
 * in that way this function will always return a useable value.
fcd5a134 sago007 2008-12-19 01:11 67
 */
769a41a0 sago007 2008-09-24 12:54 68
int str2int(string str2parse)
769a41a0 sago007 2008-09-24 12:54 69
{
769a41a0 sago007 2008-09-24 12:54 70
    try{
769a41a0 sago007 2008-09-24 12:54 71
        stringstream converter(str2parse);
769a41a0 sago007 2008-09-24 12:54 72
        int val = 0;
769a41a0 sago007 2008-09-24 12:54 73
        converter >> val;
769a41a0 sago007 2008-09-24 12:54 74
        return val;
769a41a0 sago007 2008-09-24 12:54 75
    }catch(ios_base::failure f)
769a41a0 sago007 2008-09-24 12:54 76
    {
769a41a0 sago007 2008-09-24 12:54 77
        return 0;
769a41a0 sago007 2008-09-24 12:54 78
    }
769a41a0 sago007 2008-09-24 12:54 79
}
89c4a3a6 sago007 2008-08-29 14:32 80
89c4a3a6 sago007 2008-08-29 14:32 81
#ifdef WIN32
89c4a3a6 sago007 2008-08-29 14:32 82
//Returns path to "my Documents" in windows:
89c4a3a6 sago007 2008-08-29 14:32 83
string getMyDocumentsPath()
89c4a3a6 sago007 2008-08-29 14:32 84
{
89c4a3a6 sago007 2008-08-29 14:32 85
    TCHAR pszPath[MAX_PATH];
eec83b7d sago007 2009-03-29 15:46 86
    //if (SUCCEEDED(SHGetSpecialFolderPath(NULL, pszPath, CSIDL_PERSONAL, FALSE))) {
eec83b7d sago007 2009-03-29 15:46 87
    if (SUCCEEDED(SHGetFolderPath(NULL, CSIDL_PERSONAL, NULL, 0, pszPath))) {
89c4a3a6 sago007 2008-08-29 14:32 88
        // pszPath is now the path that you want
724439a5 sago007 2008-09-11 15:52 89
#if DEBUG
89c4a3a6 sago007 2008-08-29 14:32 90
        cout << "MyDocuments Located: " << pszPath << endl;
89c4a3a6 sago007 2008-08-29 14:32 91
#endif
89c4a3a6 sago007 2008-08-29 14:32 92
        string theResult= pszPath;
89c4a3a6 sago007 2008-08-29 14:32 93
        return theResult;
89c4a3a6 sago007 2008-08-29 14:32 94
    }
89c4a3a6 sago007 2008-08-29 14:32 95
    else
89c4a3a6 sago007 2008-08-29 14:32 96
    {
89c4a3a6 sago007 2008-08-29 14:32 97
        cout << "Warning: My Documents not found!" << endl;
89c4a3a6 sago007 2008-08-29 14:32 98
        string theResult ="";
89c4a3a6 sago007 2008-08-29 14:32 99
        return theResult;
89c4a3a6 sago007 2008-08-29 14:32 100
    }
89c4a3a6 sago007 2008-08-29 14:32 101
}
89c4a3a6 sago007 2008-08-29 14:32 102
89c4a3a6 sago007 2008-08-29 14:32 103
#endif
89c4a3a6 sago007 2008-08-29 14:32 104
d07b805e sago007 2009-01-27 13:15 105
/**
d07b805e sago007 2009-01-27 13:15 106
 * Returns the path to where all settings must be saved.
d07b805e sago007 2009-01-27 13:15 107
 * On unix-like systems this is the home-folder under: ~/.gamesaves/GAMENAME
d07b805e sago007 2009-01-27 13:15 108
 * In Windows it is My Documents/My Games
d07b805e sago007 2009-01-27 13:15 109
 * Consider changing this for Vista that has a special save games folder
d07b805e sago007 2009-01-27 13:15 110
 */
89c4a3a6 sago007 2008-08-29 14:32 111
string getPathToSaveFiles()
89c4a3a6 sago007 2008-08-29 14:32 112
{
89c4a3a6 sago007 2008-08-29 14:32 113
#ifdef __unix__
89c4a3a6 sago007 2008-08-29 14:32 114
    return (string)getenv("HOME")+(string)"/.gamesaves/"+GAMENAME;
89c4a3a6 sago007 2008-08-29 14:32 115
#elif WIN32
89c4a3a6 sago007 2008-08-29 14:32 116
    return getMyDocumentsPath()+(string)"/My Games/"+GAMENAME;
89c4a3a6 sago007 2008-08-29 14:32 117
#else
89c4a3a6 sago007 2008-08-29 14:32 118
    return ".";
89c4a3a6 sago007 2008-08-29 14:32 119
#endif
89c4a3a6 sago007 2008-08-29 14:32 120
}
89c4a3a6 sago007 2008-08-29 14:32 121
d07b805e sago007 2009-01-27 13:15 122
/**
d07b805e sago007 2009-01-27 13:15 123
 * Takes a number of milliseconds and returns the value in commonTime format.
d07b805e sago007 2009-01-27 13:15 124
 */
cd12e0fe sago007 2009-01-29 08:47 125
commonTime TimeHandler::ms2ct(unsigned int milliseconds)
c09d0e4f sago007 2009-01-27 01:15 126
{
c09d0e4f sago007 2009-01-27 01:15 127
    commonTime ct;
c09d0e4f sago007 2009-01-27 01:15 128
    ct.days = 0;
c09d0e4f sago007 2009-01-27 01:15 129
    unsigned int time = milliseconds;
c09d0e4f sago007 2009-01-27 01:15 130
    ct.hours = time/(1000*60*60);
c09d0e4f sago007 2009-01-27 01:15 131
    time = time % (1000*60*60);
c09d0e4f sago007 2009-01-27 01:15 132
    ct.minutes = time/(1000*60);
c09d0e4f sago007 2009-01-27 01:15 133
    time = time % (1000*60);
c09d0e4f sago007 2009-01-27 01:15 134
    ct.seconds = time/1000;
d07b805e sago007 2009-01-27 13:15 135
    return ct;
c09d0e4f sago007 2009-01-27 01:15 136
}
89c4a3a6 sago007 2008-08-29 14:32 137
cd12e0fe sago007 2009-01-29 08:47 138
commonTime TimeHandler::getTime(string name)
89c4a3a6 sago007 2008-08-29 14:32 139
{
89c4a3a6 sago007 2008-08-29 14:32 140
    commonTime ct;
cd12e0fe sago007 2009-01-29 08:47 141
    ct.days = Config::getInstance()->getInt(name+"Days");
cd12e0fe sago007 2009-01-29 08:47 142
    ct.hours = Config::getInstance()->getInt(name+"Hours");
cd12e0fe sago007 2009-01-29 08:47 143
    ct.minutes = Config::getInstance()->getInt(name+"Minutes");
cd12e0fe sago007 2009-01-29 08:47 144
    ct.seconds = Config::getInstance()->getInt(name+"Seconds");
89c4a3a6 sago007 2008-08-29 14:32 145
    return ct;
89c4a3a6 sago007 2008-08-29 14:32 146
}
89c4a3a6 sago007 2008-08-29 14:32 147
d07b805e sago007 2009-01-27 13:15 148
/**
d07b805e sago007 2009-01-27 13:15 149
 * Returns the total runtime with toAdd added but without writing it to config file. 
d07b805e sago007 2009-01-27 13:15 150
 * Used for stats
c09d0e4f sago007 2009-01-27 01:15 151
 */
cd12e0fe sago007 2009-01-29 08:47 152
commonTime TimeHandler::peekTime(string name, commonTime toAdd)
89c4a3a6 sago007 2008-08-29 14:32 153
{
cd12e0fe sago007 2009-01-29 08:47 154
    commonTime ct = getTime(name);
c09d0e4f sago007 2009-01-27 01:15 155
89c4a3a6 sago007 2008-08-29 14:32 156
    ct.seconds +=toAdd.seconds;
89c4a3a6 sago007 2008-08-29 14:32 157
    ct.minutes +=ct.seconds/60;
89c4a3a6 sago007 2008-08-29 14:32 158
    ct.seconds = ct.seconds%60;
c09d0e4f sago007 2009-01-27 01:15 159
89c4a3a6 sago007 2008-08-29 14:32 160
    ct.minutes += toAdd.minutes;
89c4a3a6 sago007 2008-08-29 14:32 161
    ct.hours += ct.minutes/60;
89c4a3a6 sago007 2008-08-29 14:32 162
    ct.minutes = ct.minutes%60;
c09d0e4f sago007 2009-01-27 01:15 163
89c4a3a6 sago007 2008-08-29 14:32 164
    ct.hours += toAdd.hours;
89c4a3a6 sago007 2008-08-29 14:32 165
    ct.days += ct.hours/24;
ddfaa92f sago007 2008-09-06 22:44 166
    ct.hours = ct.hours%24;
c09d0e4f sago007 2009-01-27 01:15 167
89c4a3a6 sago007 2008-08-29 14:32 168
    ct.days += toAdd.days;
c09d0e4f sago007 2009-01-27 01:15 169
    return ct;
c09d0e4f sago007 2009-01-27 01:15 170
}
c09d0e4f sago007 2009-01-27 01:15 171
d07b805e sago007 2009-01-27 13:15 172
/**
c09d0e4f sago007 2009-01-27 01:15 173
 * Same as peekTotalTime but writes the time to the config file.
d07b805e sago007 2009-01-27 13:15 174
 * Should only be called only once! when the program shuts down
c09d0e4f sago007 2009-01-27 01:15 175
 */
cd12e0fe sago007 2009-01-29 08:47 176
commonTime TimeHandler::addTime(string name, commonTime toAdd)
c09d0e4f sago007 2009-01-27 01:15 177
{
cd12e0fe sago007 2009-01-29 08:47 178
    commonTime ct = peekTime(name,toAdd);
89c4a3a6 sago007 2008-08-29 14:32 179
    
cd12e0fe sago007 2009-01-29 08:47 180
    Config::getInstance()->setInt(name+"Days",ct.days);
cd12e0fe sago007 2009-01-29 08:47 181
    Config::getInstance()->setInt(name+"Hours",ct.hours);
cd12e0fe sago007 2009-01-29 08:47 182
    Config::getInstance()->setInt(name+"Minutes",ct.minutes);
cd12e0fe sago007 2009-01-29 08:47 183
    Config::getInstance()->setInt(name+"Seconds",ct.seconds);
89c4a3a6 sago007 2008-08-29 14:32 184
    return ct;
89c4a3a6 sago007 2008-08-29 14:32 185
}
769a41a0 sago007 2008-09-24 12:54 186
769a41a0 sago007 2008-09-24 12:54 187
Config* Config::instance = 0;
769a41a0 sago007 2008-09-24 12:54 188
769a41a0 sago007 2008-09-24 12:54 189
Config::Config()
769a41a0 sago007 2008-09-24 12:54 190
{
769a41a0 sago007 2008-09-24 12:54 191
    configMap.clear();
769a41a0 sago007 2008-09-24 12:54 192
    load();
cc3ef158 sago007 2011-07-03 16:13 193
    shuttingDown = 0; // Not shutting down
769a41a0 sago007 2008-09-24 12:54 194
}
769a41a0 sago007 2008-09-24 12:54 195
769a41a0 sago007 2008-09-24 12:54 196
void Config::load()
769a41a0 sago007 2008-09-24 12:54 197
{
769a41a0 sago007 2008-09-24 12:54 198
    string filename = getPathToSaveFiles()+"/configFile";
769a41a0 sago007 2008-09-24 12:54 199
    ifstream inFile(filename.c_str());
769a41a0 sago007 2008-09-24 12:54 200
    string key;
769a41a0 sago007 2008-09-24 12:54 201
    string previuskey;
769a41a0 sago007 2008-09-24 12:54 202
    char value[MAX_VAR_LENGTH];
769a41a0 sago007 2008-09-24 12:54 203
    if(inFile)
769a41a0 sago007 2008-09-24 12:54 204
    {
769a41a0 sago007 2008-09-24 12:54 205
        while(!inFile.eof())
769a41a0 sago007 2008-09-24 12:54 206
        {
769a41a0 sago007 2008-09-24 12:54 207
            inFile >> key;
e3e0644e sago007 2008-09-25 14:00 208
            if(key==previuskey) //the last entry will be read 2 times if a linebreak is missing in the end
e3e0644e sago007 2008-09-25 14:00 209
                    continue; 
769a41a0 sago007 2008-09-24 12:54 210
            previuskey = key;
769a41a0 sago007 2008-09-24 12:54 211
            inFile.get(); //Read the space between the key and the content
769a41a0 sago007 2008-09-24 12:54 212
            inFile.getline(value,MAX_VAR_LENGTH);
769a41a0 sago007 2008-09-24 12:54 213
            #if DEBUG
769a41a0 sago007 2008-09-24 12:54 214
                cout << "Config "<< "read: " << key << " with:\"" << value << "\"" << endl;
769a41a0 sago007 2008-09-24 12:54 215
            #endif
769a41a0 sago007 2008-09-24 12:54 216
            configMap[key] = (string)value;
769a41a0 sago007 2008-09-24 12:54 217
        }
769a41a0 sago007 2008-09-24 12:54 218
        inFile.close();
769a41a0 sago007 2008-09-24 12:54 219
    }
769a41a0 sago007 2008-09-24 12:54 220
}
769a41a0 sago007 2008-09-24 12:54 221
769a41a0 sago007 2008-09-24 12:54 222
Config* Config::getInstance()
769a41a0 sago007 2008-09-24 12:54 223
{
769a41a0 sago007 2008-09-24 12:54 224
    if(Config::instance==0)
769a41a0 sago007 2008-09-24 12:54 225
    {
769a41a0 sago007 2008-09-24 12:54 226
        Config::instance = new Config();
769a41a0 sago007 2008-09-24 12:54 227
        
769a41a0 sago007 2008-09-24 12:54 228
    }
769a41a0 sago007 2008-09-24 12:54 229
    return Config::instance; 
769a41a0 sago007 2008-09-24 12:54 230
}
769a41a0 sago007 2008-09-24 12:54 231
769a41a0 sago007 2008-09-24 12:54 232
void Config::save()
769a41a0 sago007 2008-09-24 12:54 233
{
769a41a0 sago007 2008-09-24 12:54 234
    string filename = getPathToSaveFiles()+"/configFile";
769a41a0 sago007 2008-09-24 12:54 235
    ofstream outFile(filename.c_str(),ios::trunc);
769a41a0 sago007 2008-09-24 12:54 236
    
769a41a0 sago007 2008-09-24 12:54 237
    if(outFile)
769a41a0 sago007 2008-09-24 12:54 238
    {
769a41a0 sago007 2008-09-24 12:54 239
        map<string,string>::iterator iter;
769a41a0 sago007 2008-09-24 12:54 240
        for(iter = configMap.begin(); iter != configMap.end(); iter++)
769a41a0 sago007 2008-09-24 12:54 241
        {
769a41a0 sago007 2008-09-24 12:54 242
            outFile << iter->first << " " << iter->second << endl;
769a41a0 sago007 2008-09-24 12:54 243
        }
e3e0644e sago007 2008-09-25 14:00 244
        outFile << "\n"; //The last entry in the file will be read double if a linebreak is missing
e3e0644e sago007 2008-09-25 14:00 245
        //This is checked on load too in case a user changes it himself.
769a41a0 sago007 2008-09-24 12:54 246
    }
c09d0e4f sago007 2009-01-27 01:15 247
    outFile.close();
769a41a0 sago007 2008-09-24 12:54 248
}
769a41a0 sago007 2008-09-24 12:54 249
cc3ef158 sago007 2011-07-03 16:13 250
bool Config::exists(string varName) const
769a41a0 sago007 2008-09-24 12:54 251
{
769a41a0 sago007 2008-09-24 12:54 252
    //Using that find returns an iterator to the end of the map if not found
769a41a0 sago007 2008-09-24 12:54 253
    return configMap.find(varName) != configMap.end();
769a41a0 sago007 2008-09-24 12:54 254
}
769a41a0 sago007 2008-09-24 12:54 255
42f8ed5f sago007 2009-03-05 11:47 256
void Config::setDefault(string varName,string content)
42f8ed5f sago007 2009-03-05 11:47 257
{
42f8ed5f sago007 2009-03-05 11:47 258
    if(exists(varName))
42f8ed5f sago007 2009-03-05 11:47 259
        return; //Already exists do not change
42f8ed5f sago007 2009-03-05 11:47 260
    setString(varName,content);
42f8ed5f sago007 2009-03-05 11:47 261
}
42f8ed5f sago007 2009-03-05 11:47 262
cc3ef158 sago007 2011-07-03 16:13 263
void Config::setShuttingDown(long shuttingDown) {
cc3ef158 sago007 2011-07-03 16:13 264
    this->shuttingDown = shuttingDown;
cc3ef158 sago007 2011-07-03 16:13 265
}
cc3ef158 sago007 2011-07-03 16:13 266
cc3ef158 sago007 2011-07-03 16:13 267
long Config::isShuttingDown() const {
cc3ef158 sago007 2011-07-03 16:13 268
    return shuttingDown;
cc3ef158 sago007 2011-07-03 16:13 269
}
cc3ef158 sago007 2011-07-03 16:13 270
769a41a0 sago007 2008-09-24 12:54 271
void Config::setString(string varName, string content)
769a41a0 sago007 2008-09-24 12:54 272
{
769a41a0 sago007 2008-09-24 12:54 273
    configMap[varName] = content;
769a41a0 sago007 2008-09-24 12:54 274
}
769a41a0 sago007 2008-09-24 12:54 275
769a41a0 sago007 2008-09-24 12:54 276
void Config::setInt(string varName, int content)
769a41a0 sago007 2008-09-24 12:54 277
{
769a41a0 sago007 2008-09-24 12:54 278
    configMap[varName] = itoa(content);
769a41a0 sago007 2008-09-24 12:54 279
}
769a41a0 sago007 2008-09-24 12:54 280
769a41a0 sago007 2008-09-24 12:54 281
void Config::setValue(string varName,double content)
769a41a0 sago007 2008-09-24 12:54 282
{
769a41a0 sago007 2008-09-24 12:54 283
    configMap[varName] = double2str(content);
769a41a0 sago007 2008-09-24 12:54 284
}
769a41a0 sago007 2008-09-24 12:54 285
769a41a0 sago007 2008-09-24 12:54 286
string Config::getString(string varName)
769a41a0 sago007 2008-09-24 12:54 287
{
769a41a0 sago007 2008-09-24 12:54 288
    if(exists(varName))
769a41a0 sago007 2008-09-24 12:54 289
    {
769a41a0 sago007 2008-09-24 12:54 290
        return configMap[varName];
769a41a0 sago007 2008-09-24 12:54 291
    }
769a41a0 sago007 2008-09-24 12:54 292
    else
769a41a0 sago007 2008-09-24 12:54 293
        return "";
769a41a0 sago007 2008-09-24 12:54 294
}
769a41a0 sago007 2008-09-24 12:54 295
769a41a0 sago007 2008-09-24 12:54 296
int Config::getInt(string varName)
769a41a0 sago007 2008-09-24 12:54 297
{
769a41a0 sago007 2008-09-24 12:54 298
    if(exists(varName))
769a41a0 sago007 2008-09-24 12:54 299
    {
769a41a0 sago007 2008-09-24 12:54 300
        return str2int(configMap[varName]);
769a41a0 sago007 2008-09-24 12:54 301
    }
769a41a0 sago007 2008-09-24 12:54 302
    else
769a41a0 sago007 2008-09-24 12:54 303
        return 0;
769a41a0 sago007 2008-09-24 12:54 304
}
769a41a0 sago007 2008-09-24 12:54 305
769a41a0 sago007 2008-09-24 12:54 306
double Config::getValue(string varName)
769a41a0 sago007 2008-09-24 12:54 307
{
769a41a0 sago007 2008-09-24 12:54 308
    if(exists(varName))
769a41a0 sago007 2008-09-24 12:54 309
    {
769a41a0 sago007 2008-09-24 12:54 310
        return str2double(configMap[varName]);
769a41a0 sago007 2008-09-24 12:54 311
    }
769a41a0 sago007 2008-09-24 12:54 312
    else
769a41a0 sago007 2008-09-24 12:54 313
        return 0.0;
769a41a0 sago007 2008-09-24 12:54 314
}
1970-01-01 00:00 315