g4tools  5.4.0
svalues
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_svalues
5 #define tools_svalues
6 
7 // See also snums.
8 
9 #include "sto"
10 #include <vector>
11 
12 namespace tools {
13 
14 template <class T>
15 inline bool values(const std::string& a_string,const std::string& a_sep,bool a_take_empty,std::vector<T>& a_values){
16  // same logic as words() function.
17 
18  a_values.clear();
19  if(a_string.empty()) return true;
20  std::string::size_type lim = (a_take_empty?0:1);
21  if(a_sep.empty()) {
22  T value;
23  if(!to<T>(a_string,value)) {
24  a_values.clear();
25  return false;
26  }
27  a_values.push_back(value);
28  } else {
29  std::string::size_type l = a_string.length();
30  std::string::size_type llimiter = a_sep.length();
31  std::string::size_type pos = 0;
32  while(true) {
33  std::string::size_type index = a_string.find(a_sep,pos);
34  if(index==std::string::npos){ // Last word.
35  if((l-pos)>=lim) {
36  T value;
37  if(!to<T>(a_string.substr(pos,l-pos),value)) {
38  a_values.clear();
39  return false;
40  }
41  a_values.push_back(value);
42  }
43  break;
44  } else {
45  // abcxxxef
46  // 0 3 67
47  if((index-pos)>=lim) {
48  T value;
49  if(!to<T>(a_string.substr(pos,index-pos),value)) {
50  a_values.clear();
51  return false;
52  }
53  a_values.push_back(value);
54  }
55  pos = index + llimiter;
56  }
57  }
58  }
59  return true;
60 }
61 
62 }
63 
64 #endif
tools::value
Definition: value:18
tools::values
bool values(const std::string &a_string, const std::string &a_sep, bool a_take_empty, std::vector< T > &a_values)
Definition: svalues:15
sto
tools
inlined C code : ///////////////////////////////////
Definition: aida_ntuple:26