tdaq-develop-2025-02-12
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  //========================================================================================================================
58  //========================================================================================================================
59 
60  static bool wildCardMatch (const std::string& needle, const std::string& haystack, unsigned int* priorityIndex = 0);
61  static bool inWildCardSet (const std::string& needle, const std::set<std::string>& haystack);
62 
63  //========================================================================================================================
68  template<class T>
70  const std::string& needle,
71  std::map<std::string, T>& haystack,
72  std::string* foundKey = 0);
73 
74  static std::string decodeURIComponent (const std::string& data);
75  static std::string encodeURIComponent (const std::string& data);
76  static void sanitizeForSQL (std::string& data);
77  static std::string escapeString (std::string inString, bool allowWhiteSpace = false);
78  static std::string convertEnvironmentVariables (const std::string& data);
79 
80  static bool isNumber (const std::string& stringToCheck);
81  static std::string getNumberType (const std::string& stringToCheck);
82  template<class T>
83  static bool getNumber (const std::string& s, T& retValue);
85  static bool getNumber (const std::string& s, bool& retValue);
86 
87  static std::string getTimestampString (const std::string& linuxTimeInSeconds);
88  static std::string getTimestampString (const time_t linuxTimeInSeconds = time(0));
89  static std::string getTimeDurationString (const time_t durationInSeconds = time(0));
90 
91  //========================================================================================================================
94  template<class T>
96  const std::string& value,
97  bool doConvertEnvironmentVariables = true);
98  static std::string validateValueForDefaultStringDataType (
99  const std::string& value,
100  bool doConvertEnvironmentVariables = true);
101 
102  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'});
103 
104  //========================================================================================================================
106  template<class T /*value type*/,
107  class S = std::string /*name string or const string*/>
108  static void getMapFromString (
109  const std::string& inputString,
110  std::map<S, T>& mapToReturn,
111  const std::set<char>& pairPairDelimiter = {',', '|', '&'},
112  const std::set<char>& nameValueDelimiter = {'=', ':'},
113  const std::set<char>& whitespace = {' ', '\t', '\n', '\r'});
114  static void getMapFromString (
115  const std::string& inputString,
116  std::map<std::string, std::string>& 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 getVectorFromString (
121  const std::string& inputString,
122  std::vector<std::string>& listToReturn,
123  const std::set<char>& delimiter = {',', '|', '&'},
124  const std::set<char>& whitespace = {' ', '\t', '\n', '\r'},
125  std::vector<char>* listOfDelimiters = 0,
126  bool decodeURIComponents = false);
127  static std::vector<std::string> getVectorFromString (
128  const std::string& inputString,
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 
134  //========================================================================================================================
137  template<class T>
138  static std::string mapToString (
139  const std::map<std::string, T>& mapToReturn,
140  const std::string& primaryDelimeter = ", ",
141  const std::string& secondaryDelimeter = ": ");
142  template<class T>
143  static std::string mapToString (
144  const std::map<std::pair<std::string, std::string>, T>& mapToReturn,
145  const std::string& primaryDelimeter = ", ",
146  const std::string& secondaryDelimeter = ": ");
147  template<class T>
148  static std::string mapToString (
149  const std::map<std::pair<std::string, std::pair<std::string, std::string>>, T>&
150  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::string, std::pair<std::string, T>>& mapToReturn,
156  const std::string& primaryDelimeter = ", ",
157  const std::string& secondaryDelimeter = ": ");
158  template<class T>
159  static std::string mapToString (
160  const std::map<std::string, std::map<std::string, T>>& mapToReturn,
161  const std::string& primaryDelimeter = ", ",
162  const std::string& secondaryDelimeter = ": ");
163  template<class T>
164  static std::string mapToString (
165  const std::map<std::string, std::set<T>>& mapToReturn,
166  const std::string& primaryDelimeter = ", ",
167  const std::string& secondaryDelimeter = ": ");
168  template<class T>
169  static std::string mapToString (
170  const std::map<std::string, std::vector<T>>& mapToReturn,
171  const std::string& primaryDelimeter = ", ",
172  const std::string& secondaryDelimeter = ": ");
173  static std::string mapToString (
174  const std::map<std::string, uint8_t>& mapToReturn,
175  const std::string& primaryDelimeter = ", ",
176  const std::string& secondaryDelimeter = ": ");
177 
178 
179  //========================================================================================================================
181  template<class T>
182  static std::string setToString (
183  const std::set<T>& setToReturn,
184  const std::string& delimeter = ", ");
185  static std::string setToString (
186  const std::set<uint8_t>& setToReturn,
187  const std::string& delimeter = ", ");
188  template<class S, class T>
189  static std::string setToString (
190  const std::set<std::pair<S, T>>& setToReturn,
191  const std::string& primaryDelimeter = ", ",
192  const std::string& secondaryDelimeter = ":");
193 
194 
195  //========================================================================================================================
197  template<class T>
198  static std::string vectorToString (
199  const std::vector<T>& setToReturn,
200  const std::string& delimeter = ", ");
201  static std::string vectorToString (
202  const std::vector<uint8_t>& setToReturn,
203  const std::string& delimeter = ", ");
204  template<class S, class T>
205  static std::string vectorToString (
206  const std::vector<std::pair<S, T>>& setToReturn,
207  const std::string& primaryDelimeter = "; ",
208  const std::string& secondaryDelimeter = ":");
209 
210  static bool extractCommonChunks (const std::vector<std::string>& haystack, std::vector<std::string>& commonChunksToReturn, std::vector<std::string>& wildcardStrings, unsigned int& fixedWildcardLength);
211 
212  static std::string demangleTypeName (const char* name);
213  template<class T>
214  static std::string getTypeName (void) {return StringMacros::demangleTypeName(typeid(T).name());}
215  static std::string stackTrace (void);
216  static std::string exec (const char* cmd);
217 
218  static char* otsGetEnvironmentVarable (const char* name, const std::string& location, const unsigned int& line);
219 
220 
221 
222  static std::string extractXmlField (const std::string &xml,
223  const std::string &field,
224  uint32_t occurrence, size_t after,
225  size_t *returnFindPos = nullptr,
226  const std::string &valueField = "value=",
227  const std::string &quoteType = "'");
228  static std::string rextractXmlField (const std::string &xml,
229  const std::string &field,
230  uint32_t occurrence,
231  size_t before,
232  size_t *returnFindPos = nullptr,
233  const std::string &valueField = "value=",
234  const std::string &quoteType = "'");
235 
236 
238  bool operator() (const std::string& lhs, const std::string& rhs) const;
239  }; //end IgnoreCaseCompareStruct
240 
241  // clang-format on
242 }; // end StringMarcos static class
243 
244 #include "otsdaq/Macros/StringMacros.icc" //define template functions
245 
246 } // namespace ots
247 #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 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 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:94
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:18
static std::string decodeURIComponent(const std::string &data)
static std::string stackTrace(void)
static bool getNumber(const std::string &s, T &retValue)