otsdaq  3.03.00
StringMacros.h
1 #ifndef _ots_StringMacros_h_
2 #define _ots_StringMacros_h_
3 
4 #include "otsdaq/Macros/CoutMacros.h"
5 
6 #include <map>
7 #include <memory> //shared_ptr
8 #include <set>
9 #include <typeinfo> // operator typeid
10 #include <vector>
11 
12 namespace ots
13 {
15 {
16  // clang-format off
17 
18  private:
19  // this class
20  StringMacros (void);
21  ~StringMacros (void);
22 
23  public:
24 
25  //========================================================================================================================
63  //========================================================================================================================
64 
65  static bool wildCardMatch (const std::string& needle, const std::string& haystack, unsigned int* priorityIndex = 0);
66  static bool inWildCardSet (const std::string& needle, const std::set<std::string>& haystack);
67 
68  //========================================================================================================================
73  template<class T>
75  const std::string& needle,
76  std::map<std::string, T>& haystack,
77  std::string* foundKey = 0);
78 
79  static std::string decodeURIComponent (const std::string& data);
80  static std::string encodeURIComponent (const std::string& data);
81  static void sanitizeForSQL (std::string& data);
82  static std::string escapeString (std::string inString, bool allowWhiteSpace = false);
83  static const std::string& trim (std::string& s);
84  static std::string convertEnvironmentVariables (const std::string& data);
85 
86  static bool isNumber (const std::string& stringToCheck);
87  static std::string getNumberType (const std::string& stringToCheck);
88  template<class T>
89  static bool getNumber (const std::string& s, T& retValue);
91  static bool getNumber (const std::string& s, bool& retValue);
92 
93  static std::string getTimestampString (const std::string& linuxTimeInSeconds);
94  static std::string getTimestampString (const time_t linuxTimeInSeconds = time(0));
95  static std::string getTimeDurationString (const time_t durationInSeconds = time(0));
96 
97  //========================================================================================================================
100  template<class T>
102  const std::string& value,
103  bool doConvertEnvironmentVariables = true);
104  static std::string validateValueForDefaultStringDataType (
105  const std::string& value,
106  bool doConvertEnvironmentVariables = true);
107 
108  static void getSetFromString (const std::string& inputString, std::set<std::string>& setToReturn, const std::set<char>& delimiter = {',', '|', '&'}, const std::set<char>& whitespace = {' ', '\t', '\n', '\r'});
109 
110  //========================================================================================================================
112  template<class T /*value type*/,
113  class S = std::string /*name string or const string*/>
114  static void getMapFromString (
115  const std::string& inputString,
116  std::map<S, T>& mapToReturn,
117  const std::set<char>& pairPairDelimiter = {',', '|', '&'},
118  const std::set<char>& nameValueDelimiter = {'=', ':'},
119  const std::set<char>& whitespace = {' ', '\t', '\n', '\r'});
120  static void getMapFromString (
121  const std::string& inputString,
122  std::map<std::string, std::string>& mapToReturn,
123  const std::set<char>& pairPairDelimiter = {',', '|', '&'},
124  const std::set<char>& nameValueDelimiter = {'=', ':'},
125  const std::set<char>& whitespace = {' ', '\t', '\n', '\r'});
126  static void getVectorFromString (
127  const std::string& inputString,
128  std::vector<std::string>& listToReturn,
129  const std::set<char>& delimiter = {',', '|', '&'},
130  const std::set<char>& whitespace = {' ', '\t', '\n', '\r'},
131  std::vector<char>* listOfDelimiters = 0,
132  bool decodeURIComponents = false);
133  static std::vector<std::string> getVectorFromString (
134  const std::string& inputString,
135  const std::set<char>& delimiter = {',', '|', '&'},
136  const std::set<char>& whitespace = {' ', '\t', '\n', '\r'},
137  std::vector<char>* listOfDelimiters = 0,
138  bool decodeURIComponents = false);
139 
140  //========================================================================================================================
143  template<class T>
144  static std::string mapToString (
145  const std::map<std::string, T>& mapToReturn,
146  const std::string& primaryDelimeter = ", ",
147  const std::string& secondaryDelimeter = ": ");
148  template<class T>
149  static std::string mapToString (
150  const std::map<std::pair<std::string, std::string>, T>& mapToReturn,
151  const std::string& primaryDelimeter = ", ",
152  const std::string& secondaryDelimeter = ": ");
153  template<class T>
154  static std::string mapToString (
155  const std::map<std::pair<std::string, std::pair<std::string, std::string>>, T>&
156  mapToReturn,
157  const std::string& primaryDelimeter = ", ",
158  const std::string& secondaryDelimeter = ": ");
159  template<class T>
160  static std::string mapToString (
161  const std::map<std::string, std::pair<std::string, T>>& mapToReturn,
162  const std::string& primaryDelimeter = ", ",
163  const std::string& secondaryDelimeter = ": ");
164  template<class T>
165  static std::string mapToString (
166  const std::map<std::string, std::map<std::string, T>>& mapToReturn,
167  const std::string& primaryDelimeter = ", ",
168  const std::string& secondaryDelimeter = ": ");
169  template<class T>
170  static std::string mapToString (
171  const std::map<std::string, std::set<T>>& mapToReturn,
172  const std::string& primaryDelimeter = ", ",
173  const std::string& secondaryDelimeter = ": ");
174  template<class T>
175  static std::string mapToString (
176  const std::map<std::string, std::vector<T>>& mapToReturn,
177  const std::string& primaryDelimeter = ", ",
178  const std::string& secondaryDelimeter = ": ");
179  static std::string mapToString (
180  const std::map<std::string, uint8_t>& mapToReturn,
181  const std::string& primaryDelimeter = ", ",
182  const std::string& secondaryDelimeter = ": ");
183 
184 
185  //========================================================================================================================
187  template<class T>
188  static std::string setToString (
189  const std::set<T>& setToReturn,
190  const std::string& delimeter = ", ");
191  static std::string setToString (
192  const std::set<uint8_t>& setToReturn,
193  const std::string& delimeter = ", ");
194  template<class S, class T>
195  static std::string setToString (
196  const std::set<std::pair<S, T>>& setToReturn,
197  const std::string& primaryDelimeter = ", ",
198  const std::string& secondaryDelimeter = ":");
199 
200 
201  //========================================================================================================================
203  template<class T>
204  static std::string vectorToString (
205  const std::vector<T>& setToReturn,
206  const std::string& delimeter = ", ");
207  static std::string vectorToString (
208  const std::vector<uint8_t>& setToReturn,
209  const std::string& delimeter = ", ");
210  template<class S, class T>
211  static std::string vectorToString (
212  const std::vector<std::pair<S, T>>& setToReturn,
213  const std::string& primaryDelimeter = "; ",
214  const std::string& secondaryDelimeter = ":");
215 
216  static bool extractCommonChunks (const std::vector<std::string>& haystack, std::vector<std::string>& commonChunksToReturn, std::vector<std::string>& wildcardStrings, unsigned int& fixedWildcardLength);
217 
218  static std::string demangleTypeName (const char* name);
219  template<class T>
220  static std::string getTypeName (void) {return StringMacros::demangleTypeName(typeid(T).name());}
221  static std::string stackTrace (void);
222  static std::string exec (const char* cmd);
223 
224  static char* otsGetEnvironmentVarable (const char* name, const std::string& location, const unsigned int& line);
225 
226 
227 
228  static std::string extractXmlField (const std::string &xml,
229  const std::string &field,
230  uint32_t occurrence, size_t after,
231  size_t *returnFindPos = nullptr,
232  const std::string &valueField = "value=",
233  const std::string &quoteType = "'");
234  static std::string rextractXmlField (const std::string &xml,
235  const std::string &field,
236  uint32_t occurrence,
237  size_t before,
238  size_t *returnFindPos = nullptr,
239  const std::string &valueField = "value=",
240  const std::string &quoteType = "'");
241  static void coutSplit (const std::string &str,
242  uint8_t traceLevel = TLVL_DEBUG,
243  const std::set<char>& delimiter = {',', '\n', ';'});
244 
246  bool operator() (const std::string& lhs, const std::string& rhs) const;
247  }; //end IgnoreCaseCompareStruct
248 
249  // clang-format on
250 }; // end StringMarcos static class
251 
252 #include "otsdaq/Macros/StringMacros.icc" //define template functions
253 
254 } // namespace ots
255 #endif
bool operator()(const std::string &lhs, const std::string &rhs) const
<get string in order ignoring letter case
static std::string getTimestampString(const std::string &linuxTimeInSeconds)
static const std::string & trim(std::string &s)
static std::string extractXmlField(const std::string &xml, const std::string &field, uint32_t occurrence, size_t after, size_t *returnFindPos=nullptr, const std::string &valueField="value=", const std::string &quoteType="'")
static void getVectorFromString(const std::string &inputString, std::vector< std::string > &listToReturn, const std::set< char > &delimiter={',', '|', '&'}, const std::set< char > &whitespace={' ', '\t', '\n', '\r'}, std::vector< char > *listOfDelimiters=0, bool decodeURIComponents=false)
static std::string exec(const char *cmd)
static void getSetFromString(const std::string &inputString, std::set< std::string > &setToReturn, const std::set< char > &delimiter={',', '|', '&'}, const std::set< char > &whitespace={' ', '\t', '\n', '\r'})
static std::string setToString(const std::set< T > &setToReturn, const std::string &delimeter=", ")
setToString ~
static T validateValueForDefaultStringDataType(const std::string &value, bool doConvertEnvironmentVariables=true)
static char * otsGetEnvironmentVarable(const char *name, const std::string &location, const unsigned int &line)
static std::string escapeString(std::string inString, bool allowWhiteSpace=false)
static void sanitizeForSQL(std::string &data)
StringMacros::sanitizeForSQL.
static void coutSplit(const std::string &str, uint8_t traceLevel=TLVL_DEBUG, const std::set< char > &delimiter={',', '\n', ';'})
static std::string vectorToString(const std::vector< T > &setToReturn, const std::string &delimeter=", ")
vectorToString ~
static std::string convertEnvironmentVariables(const std::string &data)
static T & getWildCardMatchFromMap(const std::string &needle, std::map< std::string, T > &haystack, std::string *foundKey=0)
defined in included .icc source
static std::string getNumberType(const std::string &stringToCheck)
Note: before call consider use of stringToCheck = StringMacros::convertEnvironmentVariables(stringToC...
static std::string demangleTypeName(const char *name)
static std::string rextractXmlField(const std::string &xml, const std::string &field, uint32_t occurrence, size_t before, size_t *returnFindPos=nullptr, const std::string &valueField="value=", const std::string &quoteType="'")
static bool extractCommonChunks(const std::vector< std::string > &haystack, std::vector< std::string > &commonChunksToReturn, std::vector< std::string > &wildcardStrings, unsigned int &fixedWildcardLength)
static bool inWildCardSet(const std::string &needle, const std::set< std::string > &haystack)
Definition: StringMacros.cc:95
static bool isNumber(const std::string &stringToCheck)
Note: before call consider use of stringToCheck = StringMacros::convertEnvironmentVariables(stringToC...
static std::string mapToString(const std::map< std::string, T > &mapToReturn, const std::string &primaryDelimeter=", ", const std::string &secondaryDelimeter=": ")
static void getMapFromString(const std::string &inputString, std::map< S, T > &mapToReturn, const std::set< char > &pairPairDelimiter={',', '|', '&'}, const std::set< char > &nameValueDelimiter={'=', ':'}, const std::set< char > &whitespace={' ', '\t', '\n', '\r'})
getMapFromString ~
static std::string getTimeDurationString(const time_t durationInSeconds=time(0))
static bool wildCardMatch(const std::string &needle, const std::string &haystack, unsigned int *priorityIndex=0)
Definition: StringMacros.cc:19
static std::string decodeURIComponent(const std::string &data)
static std::string stackTrace(void)
static bool getNumber(const std::string &s, T &retValue)