// Copyright (C) 2010, Guy Barrand. All rights reserved. // See the file tools.license for terms. #ifndef tools_sto #define tools_sto #include namespace tools { inline bool to(const std::string& a_string,bool& a_value,bool a_def = false){ if( (a_string=="1") ||(a_string=="true")||(a_string=="TRUE")||(a_string=="True") ||(a_string=="yes")||(a_string=="YES")||(a_string=="Yes") ||(a_string=="on")||(a_string=="ON")||(a_string=="On") ){ a_value = true; return true; } else if((a_string=="0") ||(a_string=="false")||(a_string=="FALSE")||(a_string=="False") ||(a_string=="no")||(a_string=="NO")||(a_string=="No") ||(a_string=="off")||(a_string=="OFF")||(a_string=="Off") ){ a_value = false; return true; } else { a_value = a_def; return false; } } inline bool tob(const std::string& a_string,bool& a_value,bool a_def = false){ return to(a_string,a_value,a_def); } } #include namespace tools { template inline bool to(const std::string& a_s,T& a_v,const T& a_def = T()) { if(a_s.empty()) {a_v = a_def;return false;} //for TOOLS_STL istringstream. std::istringstream strm(a_s.c_str()); strm >> a_v; if(strm.fail()) {a_v = a_def;return false;} return strm.eof(); } template inline bool to(T& a_field,const std::string& a_s,bool& a_changed){ T old = a_field; //if(!tools::to(a_s,a_field)) {a_field = old;a_changed=false;return false;} if(!to(a_s,a_field)) {a_field = old;a_changed=false;return false;} a_changed = a_field==old?false:true; return true; } } #include namespace tools { template inline bool to(std::ostream& a_out,const std::string& a_string,T& a_value){ if(!to(a_string,a_value)) { a_out << "Passed value \"" << a_string << "\"" << " is of bad type." << std::endl; return false; } return true; } inline bool to(std::ostream& a_out,const std::string& a_string,bool& a_value){ if(!to(a_string,a_value)) { a_out << "Passed value \"" << a_string << "\"" << " is not a boolean." << std::endl; return false; } return true; } } #endif