xref: /phasta/phSolver/common/ValType.cc (revision 7acde132a6def0fe2daaec0d1a712dff0e5c6636)
159599516SKenneth E. Jansen #include <string>
259599516SKenneth E. Jansen #include <vector>
359599516SKenneth E. Jansen //MR CHANGE
459599516SKenneth E. Jansen #include <cstring>
559599516SKenneth E. Jansen #include <cmath>
659599516SKenneth E. Jansen #include <cstdlib>
759599516SKenneth E. Jansen //MR CHANGE END
859599516SKenneth E. Jansen 
959599516SKenneth E. Jansen #include "ValType.h"
1059599516SKenneth E. Jansen 
operator int()1159599516SKenneth E. Jansen ValType::operator int()
1259599516SKenneth E. Jansen {
1359599516SKenneth E. Jansen   used = true;
1459599516SKenneth E. Jansen   return get_int(str);
1559599516SKenneth E. Jansen }
1659599516SKenneth E. Jansen 
operator vector<double>()1759599516SKenneth E. Jansen ValType::operator vector<double>()
1859599516SKenneth E. Jansen {
1959599516SKenneth E. Jansen   used = true;
2059599516SKenneth E. Jansen   return get_vector(str);
2159599516SKenneth E. Jansen }
2259599516SKenneth E. Jansen 
operator vector<int>()2359599516SKenneth E. Jansen ValType::operator vector<int>()
2459599516SKenneth E. Jansen {
2559599516SKenneth E. Jansen   used = true;
2659599516SKenneth E. Jansen   return get_ivector(str);
2759599516SKenneth E. Jansen }
2859599516SKenneth E. Jansen 
operator double()2959599516SKenneth E. Jansen ValType::operator double()
3059599516SKenneth E. Jansen {
3159599516SKenneth E. Jansen   used = true;
3259599516SKenneth E. Jansen   return get_double(str);
3359599516SKenneth E. Jansen }
3459599516SKenneth E. Jansen 
operator double*()3559599516SKenneth E. Jansen ValType::operator double*()
3659599516SKenneth E. Jansen {
3759599516SKenneth E. Jansen   used = true;
3859599516SKenneth E. Jansen   return get_double_array(str);
3959599516SKenneth E. Jansen }
4059599516SKenneth E. Jansen 
operator string()4159599516SKenneth E. Jansen ValType::operator string()
4259599516SKenneth E. Jansen {
4359599516SKenneth E. Jansen   used = true;
4459599516SKenneth E. Jansen   return get_string(str);
4559599516SKenneth E. Jansen }
4659599516SKenneth E. Jansen 
4759599516SKenneth E. Jansen //
4859599516SKenneth E. Jansen //  function implementations for type specific conversions
4959599516SKenneth E. Jansen //
5059599516SKenneth E. Jansen 
get_int(string str)5159599516SKenneth E. Jansen int ValType::get_int(string str)
5259599516SKenneth E. Jansen {
5359599516SKenneth E. Jansen   int i = atoi(str.c_str());
5459599516SKenneth E. Jansen   return i;
5559599516SKenneth E. Jansen }
5659599516SKenneth E. Jansen 
get_double(string str)5759599516SKenneth E. Jansen double ValType::get_double(string str)
5859599516SKenneth E. Jansen {
5959599516SKenneth E. Jansen   double x = atof(str.c_str());
6059599516SKenneth E. Jansen   return x;
6159599516SKenneth E. Jansen }
6259599516SKenneth E. Jansen 
get_double_array(string str)6359599516SKenneth E. Jansen double *ValType::get_double_array(string str)
6459599516SKenneth E. Jansen {
6559599516SKenneth E. Jansen   //istrstream ist(str.c_str(),str.length());
6659599516SKenneth E. Jansen   //vector<double> vec;
6759599516SKenneth E. Jansen   //double v;
6859599516SKenneth E. Jansen   //while ( ist >> v ) {
6959599516SKenneth E. Jansen   //  vec.push_back(v);
7059599516SKenneth E. Jansen   //}
7159599516SKenneth E. Jansen   vector<double> vec = get_vector(str);
7259599516SKenneth E. Jansen   int n = vec.size();
7359599516SKenneth E. Jansen   double *x = new double[n];
7459599516SKenneth E. Jansen   for (int i=0; i < n; i++) {
7559599516SKenneth E. Jansen     x[i] = vec[i];
7659599516SKenneth E. Jansen   }
7759599516SKenneth E. Jansen   return x;
7859599516SKenneth E. Jansen }
7959599516SKenneth E. Jansen 
get_vector(string str)8059599516SKenneth E. Jansen vector<double> ValType::get_vector(string str)
8159599516SKenneth E. Jansen {
82*ea8eaaacSCameron Smith   char* s = (char*) malloc(str.size()+1);
83*ea8eaaacSCameron Smith   strcpy(s,str.c_str());
84*ea8eaaacSCameron Smith   char *strTok = strtok(s," ");
8559599516SKenneth E. Jansen   vector<double> vec;
8659599516SKenneth E. Jansen   while(strTok) {
8759599516SKenneth E. Jansen     vec.push_back(atof(strTok));
8859599516SKenneth E. Jansen     strTok = strtok(NULL," ");
8959599516SKenneth E. Jansen   }
90*ea8eaaacSCameron Smith   free(s);
9159599516SKenneth E. Jansen   return vec;
9259599516SKenneth E. Jansen }
9359599516SKenneth E. Jansen 
get_ivector(string str)9459599516SKenneth E. Jansen vector<int> ValType::get_ivector(string str)
9559599516SKenneth E. Jansen {
96*ea8eaaacSCameron Smith   char* s = (char*) malloc(str.size()+1);
97*ea8eaaacSCameron Smith   strcpy(s,str.c_str());
98*ea8eaaacSCameron Smith   char *strTok = strtok(s," ");
9959599516SKenneth E. Jansen   vector<int> vec;
10059599516SKenneth E. Jansen   while(strTok) {
10159599516SKenneth E. Jansen     vec.push_back(atoi(strTok));
10259599516SKenneth E. Jansen     strTok = strtok(NULL," ");
10359599516SKenneth E. Jansen   }
104*ea8eaaacSCameron Smith   free(s);
10559599516SKenneth E. Jansen   return vec;
10659599516SKenneth E. Jansen }
10759599516SKenneth E. Jansen 
get_string(string str)10859599516SKenneth E. Jansen string ValType::get_string(string str)
10959599516SKenneth E. Jansen {
11059599516SKenneth E. Jansen   return str;
11159599516SKenneth E. Jansen }
112