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 // class Parameter
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 // Konstruktion/Destruktion
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 //----------------------------Get  ---------------------------------------------
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 //----------------------------Operators  ---------------------------------------------
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 &paramVal)
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 //----------------------------IO private---------------------------------------------
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                         //parameterscopy[idx]->printParameterDetailed(std::cerr);
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                                 // die nichtbenutzten Parameter werden auskommentiert, damit sie 
00330                                 // in Macaulay beim Einlesen nicht ausgewertet werden!
00331                                 os << "-- " << * (parameters_m[idx]) ; 
00332                         }
00333                 }
00334                 return;
00335         }
00336 
00337 
00338 
00339 //----------------------------get private---------------------------------------------
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; // not found
00357                 }
00358         }
00359 
00360 
00361 
Generated on Tue Nov 23 13:10:52 2010 for centerfocus by  doxygen 1.6.3