Geant4 Cross Reference |
1 // Copyright (C) 2010, Guy Barrand. All rights 1 // Copyright (C) 2010, Guy Barrand. All rights reserved. 2 // See the file tools.license for terms. 2 // See the file tools.license for terms. 3 3 4 #ifndef tools_snums 4 #ifndef tools_snums 5 #define tools_snums 5 #define tools_snums 6 6 7 #include "words" 7 #include "words" 8 #include "sto" 8 #include "sto" 9 #include "forit" 9 #include "forit" 10 10 11 namespace tools { 11 namespace tools { 12 12 13 template <class T> //T must be numbers (not st 13 template <class T> //T must be numbers (not std::string). 14 inline bool snums(const std::string& a_string, 14 inline bool snums(const std::string& a_string, 15 std::istringstream& a_iss,st 15 std::istringstream& a_iss,std::vector<std::string>& a_tmp, 16 const std::string& a_sep, 16 const std::string& a_sep, 17 std::vector<T>& a_values,boo 17 std::vector<T>& a_values,bool a_clear = true) { 18 if(a_clear) a_values.clear(); 18 if(a_clear) a_values.clear(); 19 words(a_string,a_sep,false,a_tmp); 19 words(a_string,a_sep,false,a_tmp); 20 T value; 20 T value; 21 tools_vforcit(std::string,a_tmp,it) { 21 tools_vforcit(std::string,a_tmp,it) { 22 a_iss.str(*it); 22 a_iss.str(*it); 23 a_iss.clear(); //IMPORTANT. 23 a_iss.clear(); //IMPORTANT. 24 a_iss >> value; 24 a_iss >> value; 25 if(a_iss.fail()) {a_values.clear();return 25 if(a_iss.fail()) {a_values.clear();return false;} 26 a_values.push_back(value); 26 a_values.push_back(value); 27 } 27 } 28 return true; 28 return true; 29 } 29 } 30 30 31 template <class T> //T must be numbers (not st 31 template <class T> //T must be numbers (not std::string). 32 inline bool snums(const std::string& a_string, 32 inline bool snums(const std::string& a_string,const std::string& a_sep,std::vector<T>& a_values,bool a_clear = true) { 33 std::istringstream iss; 33 std::istringstream iss; 34 std::vector<std::string> words; 34 std::vector<std::string> words; 35 return snums(a_string,iss,words,a_sep,a_valu 35 return snums(a_string,iss,words,a_sep,a_values,a_clear); 36 } 36 } 37 37 38 } 38 } 39 39 40 #endif 40 #endif