Geant4 Cross Reference |
1 // Copyright (C) 2010, Guy Barrand. All rights reserved. 2 // See the file tools.license for terms. 3 4 #ifndef tools_strip 5 #define tools_strip 6 7 #include <vector> 8 #include <string> 9 10 namespace tools { 11 12 enum what { leading, trailing, both }; 13 14 inline bool strip(std::string& a_string,what a_type = both,char a_char = ' '){ 15 //return true = some stripping had been done. 16 17 std::string::size_type l = a_string.length(); 18 if(l==0) return false; 19 20 switch ( a_type ) { 21 case leading:{ 22 char* pos = (char*)a_string.c_str(); 23 for(std::string::size_type i=0;i<l;i++,pos++) { 24 if(*pos!=a_char) { 25 a_string = a_string.substr(i,l-i); 26 return (i?true:false); //i=0 : same string. 27 } 28 } 29 // all chars are a_char : 30 a_string.clear(); 31 return true; 32 }break; 33 case trailing:{ 34 char* pos = (char*)a_string.c_str(); 35 pos += (l-1); 36 std::string::size_type i = l-1; 37 std::string::const_reverse_iterator it; 38 for(it=a_string.rbegin();it!=a_string.rend();++it,i--,pos--) { 39 if(*pos!=a_char) { 40 a_string = a_string.substr(0,i+1); 41 return (i==(l-1)?false:true); //i==l-1 : same string. 42 } 43 } 44 // all chars are a_char : 45 a_string.clear(); 46 return true; 47 }break; 48 case both:{ 49 bool stat_lead = strip(a_string,leading,a_char); 50 bool stat_trail = strip(a_string,trailing,a_char); 51 if(stat_lead) return true; 52 if(stat_trail) return true; 53 }break; 54 //default:break; 55 } 56 return false; //nothing done. 57 } 58 59 #ifdef TOOLS_DEPRECATED 60 inline std::string strp(const std::string& a_string,what a_type = both,char a_char = ' '){ 61 std::string _s(a_string); 62 strip(_s,a_type,a_char); 63 return _s; 64 } 65 #endif //TOOLS_DEPRECATED 66 67 inline bool strip(std::vector<std::string>& a_strings,what a_type = both,char a_char = ' ') { 68 bool some_done = false; 69 std::vector<std::string>::iterator it; 70 for(it=a_strings.begin();it!=a_strings.end();++it) { 71 if(strip(*it,a_type,a_char)) some_done = true; 72 } 73 return some_done; 74 } 75 76 } 77 78 #endif