g4tools  5.4.0
strip
Go to the documentation of this file.
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 
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
tools::leading
@ leading
Definition: strip:12
tools::trailing
@ trailing
Definition: strip:12
tools::both
@ both
Definition: strip:12
tools
inlined C code : ///////////////////////////////////
Definition: aida_ntuple:26
tools::strip
bool strip(std::string &a_string, what a_type=both, char a_char=' ')
Definition: strip:14
tools::what
what
Definition: strip:12