Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/externals/g4tools/include/tools/tokenize

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

  1 // Copyright (C) 2010, Guy Barrand. All rights reserved.
  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::string& a_cmd,std::string::size_type a_begIdx,
 13                                     std::string::size_type& a_endIdx,std::string& a_token) {
 14   while ( a_cmd[a_begIdx] == ' ') ++a_begIdx; // Loop checking, 23.06.2015, I. Hrivnacova
 15   if ( a_cmd[a_begIdx] == '"' ) {
 16     a_endIdx = a_cmd.find('"', a_begIdx+1);
 17     if ( a_endIdx == std::string::npos ) a_endIdx = a_cmd.length();
 18     a_token = a_cmd.substr(a_begIdx+1, (a_endIdx-1)-a_begIdx);
 19     ++a_endIdx;
 20   }
 21   else {
 22     a_endIdx = a_cmd.find(' ', a_begIdx);
 23     if ( a_endIdx == std::string::npos ) a_endIdx = a_cmd.length();
 24     a_token = a_cmd.substr(a_begIdx, a_endIdx-a_begIdx);
 25   }
 26   return ( a_token.length() > 0 );
 27 }
 28 
 29 //  From a string, double_quotes_tokenize permits to get arguments
 30 // by taking into account strings enclosed by double quotes and potentially
 31 // containing spaces (for example to specify a file path containing spaces).
 32 //  Example:
 33 //    if a_cmd is the string: aa bbb "ccc ddd" ee "fff gg"
 34 //  Returned a_args string list will be:
 35 //    "aa", "bb", "ccc ddd", "ee", "fff gg"
 36 //  Algorithm from Geant4/G4AnalysisUtilities.cc/Tokenize() done by Ivana Hrivnacova.
 37 
 38 inline void double_quotes_tokenize(const std::string& a_cmd, std::vector<std::string>& a_args) {
 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, endIdx, token) ) {
 44       a_args.push_back(token);
 45     }
 46     begIdx = endIdx + 1;
 47   }
 48   while ( endIdx < a_cmd.length() ); // Loop checking, 23.06.2015, I. Hrivnacova
 49 }
 50 
 51 }
 52 
 53 #endif