Parameterlist.cc
Go to the documentation of this file.00001 #include <stdio.h>
00002 #include "Parameterlist.h"
00003 #include "parseTools.h"
00004 #include <assert.h>
00005 #include <algorithm>
00006
00008
00010 Parameter::Parameter( const string &name,
00011 const string &value,
00012 const string &comment,
00013 bool fromDefault) : name_m(name),
00014 value_m(value),
00015 comment_m(comment),
00016 bUsed_m(false),
00017 bDefaultValue_m(fromDefault),
00018 order_m(0)
00019 {
00020 }
00021
00022 ostream & Parameter::printParameter(ostream & os) const
00023 {
00024 os << name_m << " = " << value_m <<"; " << std::endl;
00025 return os;
00026 }
00027
00028 ostream & Parameter::printParameterWithComment(ostream & os) const
00029 {
00030 os << name_m << " = " << value_m <<"; -- " << comment_m << std::endl;
00031 return os;
00032 }
00033
00034 ostream & Parameter::printParameterDetailed(ostream & os) const
00035 {
00036 os << name_m << " = " << value_m <<"; -- " << comment_m << std::endl;
00037 os << "--order( " <<name_m << ")= " << order_m << std::endl;
00038 return os;
00039 }
00040
00041 void Parameter::setPrintOrder(unsigned short order)
00042 {
00043 order_m = order;
00044 }
00045
00046 unsigned short Parameter::getPrintOrder( ) const
00047 {
00048 return order_m;
00049 }
00050
00051 void Parameter::markUsed()
00052 {
00053 bUsed_m = true;
00054 }
00055
00056 void Parameter::setValue( const string & value)
00057 {
00058 value_m = value;
00059 }
00060
00061 string & Parameter::getValue( )
00062 {
00063 return value_m;
00064 }
00065
00066
00067 std::ostream & operator<<(std::ostream & out, const Parameter & z)
00068 {
00069 z.printParameter(out);
00070 return out;
00071 }
00072
00073 std::string & Parameter::getValueAsString( )
00074 {
00075 return value_m;
00076 }
00077
00078
00080 std::string Parameter::getName( )
00081 {
00082 return name_m;
00083
00084 }
00085
00086 bool Parameter::isUsed() const
00087 {
00088 return bUsed_m;
00089 }
00090
00091 bool Parameter::isDefaultValue() const
00092 {
00093 return bDefaultValue_m;
00094 }
00095
00096
00097
00098
00099
00100 const string Parameterlist::emptyString("");
00102
00104
00105 Parameterlist::Parameterlist()
00106 {
00107 parameters_m.resize(0);
00108
00109 }
00110
00111
00112 Parameterlist::~Parameterlist()
00113 {
00114 for (size_t idx=0; idx< parameters_m.size() ; idx++)
00115 {
00116 delete parameters_m[idx];
00117 }
00118 }
00119
00120
00121
00122
00123 size_t Parameterlist::getParameterCount() const
00124 {
00125 return parameters_m.size();
00126 }
00127
00128
00129 Parameter& Parameterlist::getParameterRef(unsigned int idx)
00130 {
00131
00132 if (idx >= parameters_m.size())
00133 {
00134 cerr << " parameter indes " << idx ;
00135 throw (" Parameter does not exist !");
00136 }
00137 else
00138 return *parameters_m[idx] ;
00139 }
00140
00145 string & Parameterlist::getParameterValueByName(const string & paramName )
00146 {
00147 int idx = getParameterIdx(paramName);
00148
00149 if (idx==-1)
00150 {
00151 cerr << paramName ;
00152 throw (" Parameter does not exist !");
00153 }
00154 else
00155 return parameters_m[idx]->value_m;
00156 }
00157
00158
00159 Parameter& Parameterlist::getParameterRefByName(const string & paramName )
00160 {
00161 int idx = getParameterIdx(paramName);
00162 if (idx==-1)
00163 {
00164 cerr << paramName ;
00165 throw (" Parameter does not exist !");
00166 }
00167 return *(parameters_m[idx] );
00168 }
00169
00170 string & Parameterlist::getParameterValueByName(const char * paramName )
00171 {
00172 return getParameterValueByName( string(paramName) );
00173 }
00174
00175 Parameter & Parameterlist::getParameterRefByName (const char * paramName )
00176 {
00177 return getParameterRefByName( string(paramName) );
00178 }
00179
00180
00181
00182
00186 bool Parameterlist::paramExists(const string & paramName ) const
00187 {
00188 int pos = getParameterIdx(paramName);
00189
00190 if ( pos == -1 )
00191 return false;
00192 return true;
00193 }
00194
00195
00197 void Parameterlist::addParameter( const string & paramname,
00198 const string & paramValue,
00199 const string & pcomment )
00200 {
00201 string realParamName = eatWS(paramname);
00202 assert( realParamName.length() !=0 );
00203 if ( paramExists(paramname ))
00204 {
00205 std::cerr <<"Error: multiple parameter definition (parameter " << paramname << ")" << endl;
00206 assert(! paramExists(paramname ));
00207 }
00208 Parameter * tmp = new Parameter( realParamName, paramValue, pcomment );
00209
00210 parameters_m.push_back (tmp );
00211
00212 return;
00213 }
00214
00216 void Parameterlist::addDefaultParameter( const string & paramname,
00217 const string & paramValue,
00218 const string & pcomment )
00219 {
00220 std::cerr <<"addDefaultParameter" << endl;
00221 std::cerr <<"paramname " <<paramname<< endl;
00222 if ( paramExists(paramname ))
00223 {
00224 std::cerr <<"Error: multiple parameter definition (parameter " << paramname << ")" << endl;
00225 assert(! paramExists(paramname ));
00226 }
00227
00228
00229 string realParamName = eatWS(paramname);
00230 assert( realParamName.length() !=0 );
00231 bool bDefault = true;
00232 Parameter * tmp = new Parameter( realParamName, paramValue, pcomment, bDefault );
00233 tmp->markUsed();
00234 parameters_m.push_back (tmp );
00235
00236 return;
00237 }
00238
00239
00240 void Parameterlist::markAsUsed(const string & paramName)
00241 {
00242 int index = getParameterIdx(paramName);
00243
00244 assert( index!=-1 );
00245
00246 if ( index!=-1 )
00247 parameters_m[index]->bUsed_m=true;
00248 }
00249
00250
00251
00256 void Parameterlist::setParameterValue(const string & paramName, const string ¶mVal)
00257 {
00258 int index = getParameterIdx(paramName);
00259
00260 assert( index!=-1 );
00261
00262 if ( index!=-1 )
00263 parameters_m[index]->setValue( paramVal );
00264
00265 }
00266
00267
00268
00269
00270 void Parameterlist::resetUsedStatus()
00271 {
00272 for (size_t idx=0; idx< parameters_m.size() ; idx++)
00273 parameters_m[idx]->bUsed_m=false;
00274 }
00275
00276
00277
00278
00279
00280
00281
00282 void Parameterlist::printUsedParameters(ostream & os) const
00283 {
00284
00285 ParamListType parameterscopy ;
00286 parameterscopy.resize( 0 );
00287
00288
00289 for (size_t idx=0; idx< parameters_m.size() ; idx++)
00290 {
00291 assert( parameters_m[idx] != NULL ) ;
00292 parameterscopy.push_back( parameters_m[idx]) ;
00293
00294 }
00295
00296 std::sort(parameterscopy.begin(), parameterscopy.end() , Parameter::compareParameterOrder ) ;
00297
00298 os << std::endl<< "---- not defined parameters (default values are used): " << std::endl;
00299 for (size_t idx=0; idx<parameterscopy.size() ; idx++)
00300 {
00301 if ( parameterscopy[idx]->bUsed_m && parameterscopy[idx]->bDefaultValue_m )
00302 {
00303 os << * (parameterscopy[idx]) ;
00304 }
00305 }
00306 os << std::endl<< "---- used parameters: " << std::endl;
00307 for (size_t idx=0; idx<parameterscopy.size() ; idx++)
00308 {
00309 if ( parameterscopy[idx]->bUsed_m && ! parameterscopy[idx]->bDefaultValue_m )
00310 {
00311 os << * (parameterscopy[idx]) ;
00312 }
00313 }
00314 return;
00315 }
00316
00317
00318
00321 void Parameterlist::printNotUsedParameters(ostream & os) const
00322 {
00323 os << std::endl << "---- not used parameters: " << std::endl;
00324
00325 for (size_t idx=0; idx<parameters_m.size() ; idx++)
00326 {
00327 if ( ! parameters_m[idx]->bUsed_m )
00328 {
00329
00330
00331 os << "-- " << * (parameters_m[idx]) ;
00332 }
00333 }
00334 return;
00335 }
00336
00337
00338
00339
00340
00341
00346 int Parameterlist::getParameterIdx(const string & paramName) const
00347 {
00348 if ( paramName.length()==0 )
00349 return -1;
00350 else
00351 {
00352 for (size_t idx = 0 ; idx< parameters_m.size(); idx++)
00353 if ( paramName.compare(parameters_m[idx]->name_m) == 0 )
00354 return idx;
00355
00356 return -1;
00357 }
00358 }
00359
00360
00361