00001 #ifndef PARAMETERMAP_CC
00002 #define PARAMETERMAP_CC
00003
00004 #include "parametermap.h"
00005 #include <iostream>
00006
00007
00008 int parameter::getI(parametermap m,string key,int def)
00009 {
00010 int param;
00011 map<string,string>::iterator itr;
00012 itr = m.find(key);
00013 if(itr!=m.end()){
00014 stringstream ss(itr->second);
00015 ss>>param;
00016 }else{
00017 param = def;
00018 }
00019 return param;
00020 }
00021
00022
00023 bool parameter::getB(parametermap m,string key,bool def)
00024 {
00025 bool param;
00026 map<string,string>::iterator itr;
00027 itr = m.find(key);
00028 if(itr!=m.end()){
00029 stringstream ss(itr->second);
00030 ss>>param;
00031 }else{
00032 param = def;
00033 }
00034 return param;
00035 }
00036
00037
00038 string parameter::getS(parametermap m,string key,string def)
00039 {
00040 string param;
00041 map<string,string>::iterator itr;
00042 itr = m.find(key);
00043 if(itr!=m.end()){
00044 param = itr->second;
00045 }else{
00046 param = def;
00047 }
00048 return param;
00049 }
00050
00051
00052 double parameter::getD(parametermap m,string key,double def)
00053 {
00054 double param;
00055 map<string,string>::iterator itr;
00056 itr = m.find(key);
00057 if(itr!=m.end()){
00058 stringstream ss(itr->second);
00059 ss>>param;
00060 }else{
00061 param = def;
00062 }
00063 return param;
00064 }
00065
00066
00067 vector< double > parameter::getV(parametermap m, string key, double def){
00068 vector< double > vec(0);
00069 double tmp;
00070 map<string,string>::iterator itr;
00071 itr = m.find(key);
00072 if(itr!=m.end()){
00073 stringstream ss(itr->second);
00074 while (ss>>tmp){vec.push_back(tmp);}
00075 }else{
00076 vec.push_back(def);
00077 }
00078 return vec;
00079
00080 }
00081
00082
00083 vector< string > parameter::getVS(parametermap m, string key, string def){
00084 vector< string > vec(0);
00085 string tmp;
00086 map<string,string>::iterator itr;
00087 itr = m.find(key);
00088 if(itr!=m.end()){
00089 stringstream ss(itr->second);
00090 while (ss>>tmp){vec.push_back(tmp);}
00091 }else{
00092 vec.push_back(def);
00093 }
00094 return vec;
00095
00096 }
00097
00098
00099 vector< vector< double > > parameter::getM(parametermap m, string key, double def){
00100 vector< vector< double > > mtx;
00101 double tmp;
00102 map<string,string>::iterator itr;
00103 itr = m.find(key);
00104 if(itr!=m.end()){
00105 stringstream ss(itr->second);
00106 string line("");
00107 while (ss.good()){
00108 vector< double > vec;
00109 while ((line=="")&&ss.good()) {
00110 getline(ss,line);
00111 stringstream buf(line);
00112 while (buf>>tmp) {vec.push_back(tmp);}
00113 }
00114 line = "";
00115 if (vec.size()!=0) mtx.push_back(vec);
00116 }
00117 }else{
00118 vector< double > vec(1,0.);
00119 mtx.push_back(vec);
00120 }
00121 return mtx;
00122 }
00123
00124
00125 void parameter::set(parametermap& m,string key,double val)
00126 {
00127 string sval;
00128 stringstream ss;
00129 ss<<val;ss>>sval;
00130 set(m,key,sval);
00131 }
00132
00133 void parameter::set(parametermap& m,string key,int val)
00134 {
00135 string sval;
00136 stringstream ss;
00137 ss<<val;ss>>sval;
00138 set(m,key,sval);
00139 }
00140
00141 void parameter::set(parametermap& m,string key,bool val)
00142 {
00143 string sval;
00144 stringstream ss;
00145 ss<<val;ss>>sval;
00146 set(m,key,sval);
00147 }
00148
00149 void parameter::set(parametermap& m,string key,char* val)
00150 {
00151 string sval(val);
00152 set(m,key,sval);
00153 }
00154
00155 void parameter::set(parametermap& m,string key,string val)
00156 {
00157 map<string,string>::iterator itr;
00158 itr = m.find(key);
00159 if(itr!=m.end()){
00160 m[key]=val;
00161 } else {
00162 m.insert(make_pair(key,val));
00163 }
00164 }
00165
00166
00167 void parameter::set(parametermap& m, string key, vector< double > val){
00168 stringstream ss;
00169 for (int i=0;i<static_cast<int>(val.size());++i) {ss<<" "<<val[i]<<"\n";}
00170 set(m,key,ss.str());
00171 }
00172
00173
00174 void parameter::set(parametermap& m, string key, vector< string > val){
00175 stringstream ss;
00176 for (int i=0;i<static_cast<int>(val.size());++i) {ss<<" "<<val[i]<<"\n";}
00177 set(m,key,ss.str());
00178 }
00179
00180
00181 void parameter::set(parametermap& m, string key, vector< vector< double > > val){
00182 stringstream ss;
00183 for (int i=0;i<static_cast<int>(val.size());++i) {
00184 ss << " ";
00185 for (int j=0;j<static_cast<int>(val[i].size());++j) {ss<<val[i][j]<<" ";}
00186 ss << "\n";
00187 }
00188 set(m,key,ss.str());
00189 }
00190
00191
00192
00193
00194 void parameter::ReadParsFromFile(parametermap& m,const char *filename){
00195 ifstream parsfile;
00196 char line[150];
00197 string type,key,value;
00198 stringstream ss;
00199 parsfile.open(filename);
00200 if(! parsfile){
00201 printf("attempting to read non-existent parameter file %s\n",filename);
00202 exit(1);
00203 }
00204
00205 while(parsfile.getline(line,150)){
00206 if(line[0]!='#' && strlen(line)>4){
00207 ss << line;
00208 ss >> type >> key >> value;
00209
00210
00211 if(type=="int"){
00212 set(m,key,atoi(value.c_str()));
00213 }
00214 if(type=="double"){
00215 set(m,key,atof(value.c_str()));
00216 }
00217 if(type=="bool"){
00218 set(m,key,bool(atoi(value.c_str())));
00219 }
00220 if(type=="string"){
00221 set(m,key,value);
00222 }
00223 ss.clear();
00224 }
00225 }
00226 parsfile.close();
00227 }
00228
00229 void parameter::PrintPars(parametermap& pars){
00230 map<string,string>::iterator itr;
00231 for(itr=pars.begin(); itr !=pars.end(); ++itr){
00232 cout << itr->first << " = " << itr->second << endl;
00233 }
00234 }
00235
00236 #endif