ConfigFile.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef _WSET_CONFIG_H_
00013 #define _WSET_CONFIG_H_
00014
00015 #include <string.h>
00016 #include <sstream>
00017 #include <iostream>
00018 #include <map>
00019 #include <stdlib.h>
00020
00021 using namespace std;
00022
00024 struct ltstr
00025 {
00026 bool operator()(const string& s1, const string& s2) const
00027 {
00028 return strcmp(s1.c_str(), s2.c_str()) < 0;
00029 }
00030 };
00031
00032
00034
00038 class Value
00039 {
00040 public:
00042 Value() {}
00044
00047 Value( const char* v) : theValue(v) { }
00049
00052 Value( int n ) {
00053 stringstream s;
00054 s << n << '\0' << flush;
00055 theValue = string(s.str());
00056 }
00057
00059
00062 operator int( ) const { return atoi(theValue.c_str()); }
00064
00067 operator double( ) const { return atof(theValue.c_str()); }
00069
00072 operator string( ) const { return theValue; }
00074 friend istream& operator >> (istream& in, Value& v){
00075 in >> v.theValue;
00076 return in;
00077 }
00078
00079 private:
00080 string theValue;
00081 };
00082
00083
00085 typedef map<string, Value, ltstr> ParameterType;
00086
00087
00088
00089
00090
00092
00111 class ConfigFile
00112 {
00113
00114 public:
00115
00117
00118
00119
00121
00123 ConfigFile();
00125
00130 ConfigFile(const string& f_name);
00131
00132
00133
00134
00135
00137
00138
00139
00141
00143
00150 void setVariable( const char* p_name, const Value& p_value );
00151
00152
00153
00155
00164 const Value& getValue(const char* p_name);
00165
00166
00168
00169
00170
00172
00173
00174
00176
00179 friend ostream& operator << ( ostream& ostr, const ConfigFile& C )
00180 {
00181 C.printOn(ostr);
00182 return ostr;
00183 }
00184
00185
00186 private:
00187
00189
00190
00191
00193
00194 void readFrom( istream& istr );
00195
00196 void printOn( ostream& ostr ) const;
00197
00198 void rtrim(char* ch);
00199 void ltrim(char* ch);
00200 void trim(char* ch);
00201
00203
00204
00205
00207
00208 ParameterType parameters;
00209
00210
00211 };
00212 #endif