Warning, /include/Geant4/tools/strip is written in an unsupported language. File is not indexed.
0001 // Copyright (C) 2010, Guy Barrand. All rights reserved.
0002 // See the file tools.license for terms.
0003
0004 #ifndef tools_strip
0005 #define tools_strip
0006
0007 #include <vector>
0008 #include <string>
0009
0010 namespace tools {
0011
0012 enum what { leading, trailing, both };
0013
0014 inline bool strip(std::string& a_string,what a_type = both,char a_char = ' '){
0015 //return true = some stripping had been done.
0016
0017 std::string::size_type l = a_string.length();
0018 if(l==0) return false;
0019
0020 switch ( a_type ) {
0021 case leading:{
0022 char* pos = (char*)a_string.c_str();
0023 for(std::string::size_type i=0;i<l;i++,pos++) {
0024 if(*pos!=a_char) {
0025 a_string = a_string.substr(i,l-i);
0026 return (i?true:false); //i=0 : same string.
0027 }
0028 }
0029 // all chars are a_char :
0030 a_string.clear();
0031 return true;
0032 }break;
0033 case trailing:{
0034 char* pos = (char*)a_string.c_str();
0035 pos += (l-1);
0036 std::string::size_type i = l-1;
0037 std::string::const_reverse_iterator it;
0038 for(it=a_string.rbegin();it!=a_string.rend();++it,i--,pos--) {
0039 if(*pos!=a_char) {
0040 a_string = a_string.substr(0,i+1);
0041 return (i==(l-1)?false:true); //i==l-1 : same string.
0042 }
0043 }
0044 // all chars are a_char :
0045 a_string.clear();
0046 return true;
0047 }break;
0048 case both:{
0049 bool stat_lead = strip(a_string,leading,a_char);
0050 bool stat_trail = strip(a_string,trailing,a_char);
0051 if(stat_lead) return true;
0052 if(stat_trail) return true;
0053 }break;
0054 //default:break;
0055 }
0056 return false; //nothing done.
0057 }
0058
0059 #ifdef TOOLS_DEPRECATED
0060 inline std::string strp(const std::string& a_string,what a_type = both,char a_char = ' '){
0061 std::string _s(a_string);
0062 strip(_s,a_type,a_char);
0063 return _s;
0064 }
0065 #endif //TOOLS_DEPRECATED
0066
0067 inline bool strip(std::vector<std::string>& a_strings,what a_type = both,char a_char = ' ') {
0068 bool some_done = false;
0069 std::vector<std::string>::iterator it;
0070 for(it=a_strings.begin();it!=a_strings.end();++it) {
0071 if(strip(*it,a_type,a_char)) some_done = true;
0072 }
0073 return some_done;
0074 }
0075
0076 }
0077
0078 #endif