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_get_lines 4 #ifndef tools_get_lines 5 #define tools_get_lines 5 #define tools_get_lines 6 6 7 #include "cstr" 7 #include "cstr" 8 8 9 #include <string> 9 #include <string> 10 #include <vector> 10 #include <vector> 11 11 12 namespace tools { 12 namespace tools { 13 13 14 inline void get_lines(const std::string& a_str 14 inline void get_lines(const std::string& a_string,std::vector<std::string>& a_lines){ 15 // a_string is a list separated by "\n" or " 15 // a_string is a list separated by "\n" or "\\n". 16 // For "xxx\n\nxxx", {"xxx","","xxx"} will b 16 // For "xxx\n\nxxx", {"xxx","","xxx"} will be created. 17 // WARNING : if a_string is a Windows file n 17 // WARNING : if a_string is a Windows file name, it may 18 // contains a \n which is not a delimiter ; 18 // contains a \n which is not a delimiter ; like ..\data\ntuples.hbook. 19 a_lines.clear(); 19 a_lines.clear(); 20 size_t length = a_string.length(); 20 size_t length = a_string.length(); 21 if(!length) return; 21 if(!length) return; 22 char* cstring = str_dup(a_string.c_str()); 22 char* cstring = str_dup(a_string.c_str()); 23 if(!cstring) return; 23 if(!cstring) return; 24 size_t pos = 0; 24 size_t pos = 0; 25 length++; 25 length++; 26 for(size_t count=0;count<length;count++) { 26 for(size_t count=0;count<length;count++) { 27 if( (cstring[count]=='\n') || 27 if( (cstring[count]=='\n') || 28 (cstring[count]=='\0') || 28 (cstring[count]=='\0') || 29 ( (cstring[count]=='\\') && (cstring[c 29 ( (cstring[count]=='\\') && (cstring[count+1]=='n') ) ) { 30 char shift_one = (cstring[count]=='\n' ? 30 char shift_one = (cstring[count]=='\n' ? 1 : 0); 31 cstring[count] = '\0'; 31 cstring[count] = '\0'; 32 a_lines.push_back(cstring+pos); 32 a_lines.push_back(cstring+pos); 33 if(shift_one==1) { 33 if(shift_one==1) { 34 pos = count+1; 34 pos = count+1; 35 } else { 35 } else { 36 pos = count+2; 36 pos = count+2; 37 count++; 37 count++; 38 } 38 } 39 } 39 } 40 } 40 } 41 str_del(cstring); 41 str_del(cstring); 42 } 42 } 43 43 44 } 44 } 45 45 46 #endif 46 #endif