Geant4 Cross Reference |
1 // Copyright (C) 2010, Guy Barrand. All rights 2 // See the file tools.license for terms. 3 4 #ifndef tools_tokenize 5 #define tools_tokenize 6 7 #include <string> 8 #include <vector> 9 10 namespace tools { 11 12 inline bool double_quotes_get_token(const std: 13 std::strin 14 while ( a_cmd[a_begIdx] == ' ') ++a_begIdx; 15 if ( a_cmd[a_begIdx] == '"' ) { 16 a_endIdx = a_cmd.find('"', a_begIdx+1); 17 if ( a_endIdx == std::string::npos ) a_end 18 a_token = a_cmd.substr(a_begIdx+1, (a_endI 19 ++a_endIdx; 20 } 21 else { 22 a_endIdx = a_cmd.find(' ', a_begIdx); 23 if ( a_endIdx == std::string::npos ) a_end 24 a_token = a_cmd.substr(a_begIdx, a_endIdx- 25 } 26 return ( a_token.length() > 0 ); 27 } 28 29 // From a string, double_quotes_tokenize perm 30 // by taking into account strings enclosed by 31 // containing spaces (for example to specify a 32 // Example: 33 // if a_cmd is the string: aa bbb "ccc ddd" 34 // Returned a_args string list will be: 35 // "aa", "bb", "ccc ddd", "ee", "fff gg" 36 // Algorithm from Geant4/G4AnalysisUtilities. 37 38 inline void double_quotes_tokenize(const std:: 39 std::string::size_type begIdx = 0; 40 std::string::size_type endIdx = 0; 41 std::string token; 42 do { 43 if ( double_quotes_get_token(a_cmd, begIdx 44 a_args.push_back(token); 45 } 46 begIdx = endIdx + 1; 47 } 48 while ( endIdx < a_cmd.length() ); // Loop c 49 } 50 51 } 52 53 #endif