1 #ifndef _ots_StringMacros_h_
2 #define _ots_StringMacros_h_
4 #include "otsdaq/Macros/CoutMacros.h"
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);
78 const std::string& needle,
79 std::map<std::string, T>& haystack,
80 std::string* foundKey = 0);
83 static std::string encodeURIComponent (
const std::string& data);
85 static std::string
escapeString (std::string inString,
bool allowWhiteSpace =
false,
bool forHtml =
false);
88 static const std::string&
trim (std::string& s);
90 static std::map<std::string ,
91 std::map<std::string ,
92 std::string >> systemVariables_;
93 static const std::string TBD;
94 static unsigned int getConcurrencyCount (
void);
95 static std::string getPersistentSystemVariablesFilePath(
void);
98 static bool isNumber (
const std::string& stringToCheck);
99 static std::string
getNumberType (
const std::string& stringToCheck);
101 static bool getNumber (
const std::string& s, T& retValue);
103 static bool getNumber (
const std::string& s,
bool& retValue);
108 static uint64_t nowEpochMs (
void);
115 const std::string& value,
116 bool doConvertEnvironmentVariables =
true);
118 const std::string& value,
119 bool doConvertEnvironmentVariables =
true);
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'});
126 class S = std::string >
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'});
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'});
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);
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);
158 const std::map<std::string, T>& mapToReturn,
159 const std::string& primaryDelimeter =
", ",
160 const std::string& secondaryDelimeter =
": ");
161 template<
class S,
class T>
163 const std::map<S, T>& mapToReturn,
164 const std::string& primaryDelimeter =
", ",
165 const std::string& secondaryDelimeter =
": ");
168 const std::map<std::pair<std::string, std::string>, T>& mapToReturn,
169 const std::string& primaryDelimeter =
", ",
170 const std::string& secondaryDelimeter =
": ");
173 const std::map<std::pair<std::string, std::pair<std::string, std::string>>, T>&
175 const std::string& primaryDelimeter =
", ",
176 const std::string& secondaryDelimeter =
": ");
179 const std::map<std::string, std::pair<std::string, T>>& mapToReturn,
180 const std::string& primaryDelimeter =
", ",
181 const std::string& secondaryDelimeter =
": ");
184 const std::map<std::string, std::map<std::string, T>>& mapToReturn,
185 const std::string& primaryDelimeter =
", ",
186 const std::string& secondaryDelimeter =
": ");
189 const std::map<std::string, std::set<T>>& mapToReturn,
190 const std::string& primaryDelimeter =
", ",
191 const std::string& secondaryDelimeter =
": ");
194 const std::map<std::string, std::vector<T>>& mapToReturn,
195 const std::string& primaryDelimeter =
", ",
196 const std::string& secondaryDelimeter =
": ");
198 const std::map<std::string, uint8_t>& mapToReturn,
199 const std::string& primaryDelimeter =
", ",
200 const std::string& secondaryDelimeter =
": ");
207 const std::set<T>& setToReturn,
208 const std::string& delimeter =
", ");
210 const std::set<uint8_t>& setToReturn,
211 const std::string& delimeter =
", ");
212 template<
class S,
class T>
214 const std::set<std::pair<S, T>>& setToReturn,
215 const std::string& primaryDelimeter =
", ",
216 const std::string& secondaryDelimeter =
":");
223 const std::vector<T>& setToReturn,
224 const std::string& delimeter =
", ");
226 const std::vector<uint8_t>& setToReturn,
227 const std::string& delimeter =
", ");
228 template<
class S,
class T>
230 const std::vector<std::pair<S, T>>& setToReturn,
231 const std::string& primaryDelimeter =
"; ",
232 const std::string& secondaryDelimeter =
":");
234 static bool extractCommonChunks (
const std::vector<std::string>& haystack, std::vector<std::string>& commonChunksToReturn, std::vector<std::string>& wildcardStrings,
unsigned int& fixedWildcardLength);
240 static std::string
exec (
const char* cmd);
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 "eType =
"'");
253 const std::string &field,
256 size_t *returnFindPos =
nullptr,
257 const std::string &valueField =
"value=",
258 const std::string "eType =
"'");
259 static void coutSplit (
const std::string &str,
260 uint8_t traceLevel = TLVL_DEBUG,
261 const std::set<char>& delimiter = {
',',
'\n',
';'});
264 bool operator() (
const std::string& lhs,
const std::string& rhs)
const;
270 #include "otsdaq/Macros/StringMacros.icc"
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 "eType="'")
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 "eType="'")
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
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)
static std::string decodeURIComponent(const std::string &data)
static std::string stackTrace(void)
static bool getNumber(const std::string &s, T &retValue)