otsdaq  3.10.00
StringMacros.h
1 #ifndef _ots_StringMacros_h_
2 #define _ots_StringMacros_h_
3 
4 #include "otsdaq/Macros/CoutMacros.h"
5 
6 #include <chrono>
7 #include <map>
8 #include <memory> //shared_ptr
9 #include <set>
10 #include <typeinfo> // operator typeid
11 #include <vector>
12 
13 namespace ots
14 {
16 {
17  // clang-format off
18 
19  private:
20  // this class
21  StringMacros (void);
22  ~StringMacros (void);
23 
24  public:
25 
26  //========================================================================================================================
66  //========================================================================================================================
67 
68  static bool wildCardMatch (const std::string& needle, const std::string& haystack, unsigned int* priorityIndex = 0);
69  static bool inWildCardSet (const std::string& needle, const std::set<std::string>& haystack);
70 
71  //========================================================================================================================
76  template<class T>
78  const std::string& needle,
79  std::map<std::string, T>& haystack,
80  std::string* foundKey = 0);
81 
82  static std::string decodeURIComponent (const std::string& data);
83  static std::string encodeURIComponent (const std::string& data);
84  static void sanitizeForSQL (std::string& data);
85  static std::string escapeString (std::string inString, bool allowWhiteSpace = false, bool forHtml = false);
86  static std::string escapeJSONStringEntities (const std::string& str);
87  static std::string restoreJSONStringEntities (const std::string& str);
88  static const std::string& trim (std::string& s);
89  static std::string convertEnvironmentVariables (const std::string& data);
90  static std::map<std::string /* system variable */,
91  std::map<std::string /* property */,
92  std::string /* value */>> systemVariables_;
93  static const std::string TBD; //for to-be-defined system variables (so there is a value in wiz mode, before configuration, etc.)
94  static unsigned int getConcurrencyCount (void);
95  static std::string getPersistentSystemVariablesFilePath(void);
96  static bool loadPersistentSystemVariables(void);
97 
98  static bool isNumber (const std::string& stringToCheck);
99  static std::string getNumberType (const std::string& stringToCheck);
100  template<class T>
101  static bool getNumber (const std::string& s, T& retValue);
103  static bool getNumber (const std::string& s, bool& retValue);
104 
105  static std::string getTimestampString (const std::string& linuxTimeInSeconds);
106  static std::string getTimestampString (const time_t linuxTimeInSeconds = time(0));
107  static std::string getTimeDurationString (const time_t durationInSeconds = time(0));
108  static uint64_t nowEpochMs (void);
109 
110  //========================================================================================================================
113  template<class T>
115  const std::string& value,
116  bool doConvertEnvironmentVariables = true);
117  static std::string validateValueForDefaultStringDataType (
118  const std::string& value,
119  bool doConvertEnvironmentVariables = true);
120 
121  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'});
122 
123  //========================================================================================================================
125  template<class T /*value type*/,
126  class S = std::string /*name string or const string*/>
127  static void getMapFromString (
128  const std::string& inputString,
129  std::map<S, T>& mapToReturn,
130  const std::set<char>& pairPairDelimiter = {',', '|', '&'},
131  const std::set<char>& nameValueDelimiter = {'=', ':'},
132  const std::set<char>& whitespace = {' ', '\t', '\n', '\r'});
133  static void getMapFromString (
134  const std::string& inputString,
135  std::map<std::string, std::string>& mapToReturn,
136  const std::set<char>& pairPairDelimiter = {',', '|', '&'},
137  const std::set<char>& nameValueDelimiter = {'=', ':'},
138  const std::set<char>& whitespace = {' ', '\t', '\n', '\r'});
139  static void getVectorFromString (
140  const std::string& inputString,
141  std::vector<std::string>& listToReturn,
142  const std::set<char>& delimiter = {',', '|', '&'},
143  const std::set<char>& whitespace = {' ', '\t', '\n', '\r'},
144  std::vector<char>* listOfDelimiters = 0,
145  bool decodeURIComponents = false);
146  static std::vector<std::string> getVectorFromString (
147  const std::string& inputString,
148  const std::set<char>& delimiter = {',', '|', '&'},
149  const std::set<char>& whitespace = {' ', '\t', '\n', '\r'},
150  std::vector<char>* listOfDelimiters = 0,
151  bool decodeURIComponents = false);
152 
153  //========================================================================================================================
156  template<class T>
157  static std::string mapToString (
158  const std::map<std::string, T>& mapToReturn,
159  const std::string& primaryDelimeter = ", ",
160  const std::string& secondaryDelimeter = ": ");
161  template<class S, class T>
162  static std::string mapToString (
163  const std::map<S, T>& mapToReturn,
164  const std::string& primaryDelimeter = ", ",
165  const std::string& secondaryDelimeter = ": ");
166  template<class T>
167  static std::string mapToString (
168  const std::map<std::pair<std::string, std::string>, T>& mapToReturn,
169  const std::string& primaryDelimeter = ", ",
170  const std::string& secondaryDelimeter = ": ");
171  template<class T>
172  static std::string mapToString (
173  const std::map<std::pair<std::string, std::pair<std::string, std::string>>, T>&
174  mapToReturn,
175  const std::string& primaryDelimeter = ", ",
176  const std::string& secondaryDelimeter = ": ");
177  template<class T>
178  static std::string mapToString (
179  const std::map<std::string, std::pair<std::string, T>>& mapToReturn,
180  const std::string& primaryDelimeter = ", ",
181  const std::string& secondaryDelimeter = ": ");
182  template<class T>
183  static std::string mapToString (
184  const std::map<std::string, std::map<std::string, T>>& mapToReturn,
185  const std::string& primaryDelimeter = ", ",
186  const std::string& secondaryDelimeter = ": ");
187  template<class T>
188  static std::string mapToString (
189  const std::map<std::string, std::set<T>>& mapToReturn,
190  const std::string& primaryDelimeter = ", ",
191  const std::string& secondaryDelimeter = ": ");
192  template<class T>
193  static std::string mapToString (
194  const std::map<std::string, std::vector<T>>& mapToReturn,
195  const std::string& primaryDelimeter = ", ",
196  const std::string& secondaryDelimeter = ": ");
197  static std::string mapToString (
198  const std::map<std::string, uint8_t>& mapToReturn,
199  const std::string& primaryDelimeter = ", ",
200  const std::string& secondaryDelimeter = ": ");
201 
202 
203  //========================================================================================================================
205  template<class T>
206  static std::string setToString (
207  const std::set<T>& setToReturn,
208  const std::string& delimeter = ", ");
209  static std::string setToString (
210  const std::set<uint8_t>& setToReturn,
211  const std::string& delimeter = ", ");
212  template<class S, class T>
213  static std::string setToString (
214  const std::set<std::pair<S, T>>& setToReturn,
215  const std::string& primaryDelimeter = ", ",
216  const std::string& secondaryDelimeter = ":");
217 
218 
219  //========================================================================================================================
221  template<class T>
222  static std::string vectorToString (
223  const std::vector<T>& setToReturn,
224  const std::string& delimeter = ", ");
225  static std::string vectorToString (
226  const std::vector<uint8_t>& setToReturn,
227  const std::string& delimeter = ", ");
228  template<class S, class T>
229  static std::string vectorToString (
230  const std::vector<std::pair<S, T>>& setToReturn,
231  const std::string& primaryDelimeter = "; ",
232  const std::string& secondaryDelimeter = ":");
233 
234  static bool extractCommonChunks (const std::vector<std::string>& haystack, std::vector<std::string>& commonChunksToReturn, std::vector<std::string>& wildcardStrings, unsigned int& fixedWildcardLength);
235 
236  static std::string demangleTypeName (const char* name);
237  template<class T>
238  static std::string getTypeName (void) {return StringMacros::demangleTypeName(typeid(T).name());}
239  static std::string stackTrace (void);
240  static std::string exec (const char* cmd);
241 
242  static char* otsGetEnvironmentVarable (const char* name, const std::string& location, const unsigned int& line);
243 
244 
245 
246  static std::string extractXmlField (const std::string &xml,
247  const std::string &field,
248  uint32_t occurrence, size_t after,
249  size_t *returnFindPos = nullptr,
250  const std::string &valueField = "value=",
251  const std::string &quoteType = "'");
252  static std::string rextractXmlField (const std::string &xml,
253  const std::string &field,
254  uint32_t occurrence,
255  size_t before,
256  size_t *returnFindPos = nullptr,
257  const std::string &valueField = "value=",
258  const std::string &quoteType = "'");
259  static void coutSplit (const std::string &str,
260  uint8_t traceLevel = TLVL_DEBUG,
261  const std::set<char>& delimiter = {',', '\n', ';'});
262 
264  bool operator() (const std::string& lhs, const std::string& rhs) const;
265  }; //end IgnoreCaseCompareStruct
266 
267  // clang-format on
268 }; // end StringMarcos static class
269 
270 #include "otsdaq/Macros/StringMacros.icc" //define template functions
271 
272 } // namespace ots
273 #endif
defines used also by OtsConfigurationWizardSupervisor
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 std::string mapToString(const std::map< S, T > &mapToReturn, const std::string &primaryDelimeter=", ", const std::string &secondaryDelimeter=": ")
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 std::string escapeString(std::string inString, bool allowWhiteSpace=false, bool forHtml=false)
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 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 escapeJSONStringEntities(const std::string &str)
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)
static bool loadPersistentSystemVariables(void)
loads persisted 'artdaq' namespace systemVariables_; returns false if no file found
Definition: StringMacros.cc:49
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 restoreJSONStringEntities(const std::string &str)
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:94
static std::string decodeURIComponent(const std::string &data)
static std::string stackTrace(void)
static bool getNumber(const std::string &s, T &retValue)