30 #if defined(__COVERITY__) 32 #define FMT_DEPRECATED 34 #include "utils/TimeFormat.h" 35 #include "utils/params_check_macros.h" 37 #include <fmt/format.h> 38 #if FMT_VERSION >= 80000 39 #include <fmt/xchar.h> 55 #define DEF_TO_STR_NAME(x) #x 56 #define DEF_TO_STR_VALUE(x) DEF_TO_STR_NAME(x) 58 template<typename T, std::enable_if_t<!std::is_enum<T>::value,
int> = 0>
59 constexpr
auto&& EnumToInt(T&& arg) noexcept
63 template<typename T, std::enable_if_t<std::is_enum<T>::value,
int> = 0>
64 constexpr
auto EnumToInt(T&& arg) noexcept
66 return static_cast<int>(arg);
78 template<
typename... Args>
79 static std::string
Format(
const std::string&
fmt, Args&&... args)
82 return ::fmt::format(fmt, EnumToInt(std::forward<Args>(args))...);
84 template<
typename... Args>
85 static std::wstring
Format(
const std::wstring&
fmt, Args&&... args)
88 return ::fmt::format(fmt, EnumToInt(std::forward<Args>(args))...);
91 static std::string FormatV(PRINTF_FORMAT_STRING
const char *fmt, va_list args);
92 static std::wstring FormatV(PRINTF_FORMAT_STRING
const wchar_t *fmt, va_list args);
93 static std::string ToUpper(
const std::string& str);
94 static std::wstring ToUpper(
const std::wstring& str);
95 static void ToUpper(std::string &str);
96 static void ToUpper(std::wstring &str);
97 static std::string ToLower(
const std::string& str);
98 static std::wstring ToLower(
const std::wstring& str);
99 static void ToLower(std::string &str);
100 static void ToLower(std::wstring &str);
101 static void ToCapitalize(std::string &str);
102 static void ToCapitalize(std::wstring &str);
103 static bool EqualsNoCase(
const std::string &str1,
const std::string &str2);
104 static bool EqualsNoCase(
const std::string &str1,
const char *s2);
105 static bool EqualsNoCase(
const char *s1,
const char *s2);
106 static int CompareNoCase(
const std::string& str1,
const std::string& str2,
size_t n = 0);
107 static int CompareNoCase(
const char* s1,
const char* s2,
size_t n = 0);
108 static int ReturnDigits(
const std::string &str);
109 static std::string Left(
const std::string &str,
size_t count);
110 static std::string Mid(
const std::string &str,
size_t first,
size_t count = std::string::npos);
111 static std::string Right(
const std::string &str,
size_t count);
112 static std::string& Trim(std::string &str);
113 static std::string& Trim(std::string &str,
const char*
const chars);
114 static std::string& TrimLeft(std::string &str);
115 static std::string& TrimLeft(std::string &str,
const char*
const chars);
116 static std::string& TrimRight(std::string &str);
117 static std::string& TrimRight(std::string &str,
const char*
const chars);
118 static std::string& RemoveDuplicatedSpacesAndTabs(std::string& str);
119 static int Replace(std::string &str,
char oldChar,
char newChar);
120 static int Replace(std::string &str,
const std::string &oldStr,
const std::string &newStr);
121 static int Replace(std::wstring &str,
const std::wstring &oldStr,
const std::wstring &newStr);
122 static bool StartsWith(
const std::string &str1,
const std::string &str2);
123 static bool StartsWith(
const std::string &str1,
const char *s2);
124 static bool StartsWith(
const char *s1,
const char *s2);
125 static bool StartsWithNoCase(
const std::string &str1,
const std::string &str2);
126 static bool StartsWithNoCase(
const std::string &str1,
const char *s2);
127 static bool StartsWithNoCase(
const char *s1,
const char *s2);
128 static bool EndsWith(
const std::string &str1,
const std::string &str2);
129 static bool EndsWith(
const std::string &str1,
const char *s2);
130 static bool EndsWithNoCase(
const std::string &str1,
const std::string &str2);
131 static bool EndsWithNoCase(
const std::string &str1,
const char *s2);
133 template<
typename CONTAINER>
134 static std::string Join(
const CONTAINER &strings,
const std::string& delimiter)
137 for (
const auto& str : strings)
138 result += str + delimiter;
141 result.erase(result.size() - delimiter.size());
154 static std::vector<std::string>
Split(
const std::string& input,
const std::string& delimiter,
unsigned int iMaxStrings = 0);
155 static std::vector<std::string>
Split(
const std::string& input,
const char delimiter,
size_t iMaxStrings = 0);
156 static std::vector<std::string>
Split(
const std::string& input,
const std::vector<std::string> &delimiters);
168 template<
typename OutputIt>
169 static OutputIt
SplitTo(OutputIt d_first,
const std::string& input,
const std::string& delimiter,
unsigned int iMaxStrings = 0)
171 OutputIt dest = d_first;
175 if (delimiter.empty())
181 const size_t delimLen = delimiter.length();
186 if (--iMaxStrings == 0)
188 *dest++ = input.substr(textPos);
191 nextDelim = input.find(delimiter, textPos);
192 *dest++ = input.substr(textPos, nextDelim - textPos);
193 textPos = nextDelim + delimLen;
194 }
while (nextDelim != std::string::npos);
198 template<
typename OutputIt>
199 static OutputIt
SplitTo(OutputIt d_first,
const std::string& input,
const char delimiter,
size_t iMaxStrings = 0)
201 return SplitTo(d_first, input, std::string(1, delimiter), iMaxStrings);
203 template<
typename OutputIt>
204 static OutputIt
SplitTo(OutputIt d_first,
const std::string& input,
const std::vector<std::string> &delimiters)
206 OutputIt dest = d_first;
210 if (delimiters.empty())
215 std::string str = input;
216 for (
size_t di = 1; di < delimiters.size(); di++)
217 StringUtils::Replace(str, delimiters[di], delimiters[0]);
218 return SplitTo(dest, str, delimiters[0]);
235 static std::vector<std::string>
SplitMulti(
const std::vector<std::string>& input,
236 const std::vector<std::string>& delimiters,
237 size_t iMaxStrings = 0);
238 static int FindNumber(
const std::string& strInput,
const std::string &strFind);
239 static int64_t AlphaNumericCompare(
const wchar_t *left,
const wchar_t *right);
240 static int AlphaNumericCollation(
int nKey1,
const void* pKey1,
int nKey2,
const void* pKey2);
241 static long TimeStringToSeconds(
const std::string &timeString);
242 static void RemoveCRLF(std::string& strLine);
256 static std::string
SecondsToTimeString(
long seconds, TIME_FORMAT format = TIME_FORMAT_GUESS);
270 static bool IsInteger(
const std::string& str);
275 inline static bool isasciidigit(
char chr)
277 return chr >=
'0' && chr <=
'9';
279 inline static bool isasciixdigit(
char chr)
281 return (chr >=
'0' && chr <=
'9') || (chr >=
'a' && chr <= 'f') || (chr >=
'A' && chr <=
'F');
283 static int asciidigitvalue(
char chr);
284 static int asciixdigitvalue(
char chr);
285 inline static bool isasciiuppercaseletter(
char chr)
287 return (chr >=
'A' && chr <=
'Z');
289 inline static bool isasciilowercaseletter(
char chr)
291 return (chr >=
'a' && chr <=
'z');
293 inline static bool isasciialphanum(
char chr)
295 return isasciiuppercaseletter(chr) || isasciilowercaseletter(chr) || isasciidigit(chr);
297 static std::string SizeToString(int64_t size);
298 static const std::string Empty;
299 static size_t FindWords(
const char *str,
const char *wordLowerCase);
300 static int FindEndBracket(
const std::string &str,
char opener,
char closer,
int startPos = 0);
301 static int DateStringToYYYYMMDD(
const std::string &dateString);
302 static std::string ISODateToLocalizedDate (
const std::string& strIsoDate);
303 static void WordToDigits(std::string &word);
304 static std::string CreateUUID();
305 static bool ValidateUUID(
const std::string &uuid);
306 static double CompareFuzzy(
const std::string &left,
const std::string &right);
307 static int FindBestMatch(
const std::string &str,
const std::vector<std::string> &strings,
double &matchscore);
308 static bool ContainsKeyword(
const std::string &str,
const std::vector<std::string> &keywords);
337 std::stringstream ss;
340 #if !(defined(_DEBUG) && defined(TARGET_WINDOWS)) 341 ss.imbue(GetOriginalLocale());
344 ss << std::fixed << num;
356 static std::string
Paramify(
const std::string ¶m);
365 static std::string
DeParamify(
const std::string& param);
374 static std::vector<std::string>
Tokenize(
const std::string& input,
const std::string& delimiters);
375 static void Tokenize(
const std::string& input, std::vector<std::string>& tokens,
const std::string& delimiters);
376 static std::vector<std::string>
Tokenize(
const std::string& input,
const char delimiter);
377 static void Tokenize(
const std::string& input, std::vector<std::string>& tokens,
const char delimiter);
385 static uint32_t
ToUint32(std::string_view str, uint32_t fallback = 0) noexcept;
393 static uint64_t
ToUint64(std::string_view str, uint64_t fallback = 0) noexcept;
401 static float ToFloat(std::string_view str,
float fallback = 0.0f) noexcept;
425 static const std::locale& GetOriginalLocale() noexcept;
430 bool operator()(
const std::string& strItem1,
const std::string& strItem2)
const 432 return StringUtils::CompareNoCase(strItem1, strItem2) < 0;
static bool IsNaturalNumber(const std::string &str)
check whether a string is a natural number. Matches [ ]*[0-9]+[ ]*
Definition: StringUtils.cpp:1480
static std::string BinaryStringToString(const std::string &in)
Convert the string of binary chars to the actual string.
Definition: StringUtils.cpp:1568
static std::string CreateFromCString(const char *cstr)
Converts a cstring pointer (const char*) to a std::string. In case nullptr is passed the result is an...
Definition: StringUtils.cpp:1897
static std::string SecondsToTimeString(long seconds, TIME_FORMAT format=TIME_FORMAT_GUESS)
convert a time in seconds to a string based on the given time format
Definition: StringUtils.cpp:1441
Definition: StringUtils.h:428
static bool IsInteger(const std::string &str)
check whether a string is an integer. Matches [ ]*[-]*[0-9]+[ ]*
Definition: StringUtils.cpp:1495
static std::string DeParamify(const std::string ¶m)
Unescapes the given string.
Definition: StringUtils.cpp:1794
Definition: StringUtils.h:69
static uint32_t ToUint32(std::string_view str, uint32_t fallback=0) noexcept
Converts a string to a unsigned int number.
Definition: StringUtils.cpp:1860
static std::vector< std::string > Split(const std::string &input, const std::string &delimiter, unsigned int iMaxStrings=0)
Splits the given input string using the given delimiter into separate strings.
Definition: StringUtils.cpp:736
static uint64_t ToUint64(std::string_view str, uint64_t fallback=0) noexcept
Converts a string to a unsigned long long number.
Definition: StringUtils.cpp:1865
static std::vector< std::string > Tokenize(const std::string &input, const std::string &delimiters)
Split a string by the specified delimiters. Splits a string using one or more delimiting characters...
Definition: StringUtils.cpp:1814
static std::string FormatNumber(T num)
Format the string with locale separators.
Definition: StringUtils.h:335
static std::string Format(const std::string &fmt, Args &&... args)
Get a formatted string similar to sprintf.
Definition: StringUtils.h:79
static std::string ToHexadecimal(const std::string &in)
Convert each character in the string to its hexadecimal representation and return the concatenated re...
Definition: StringUtils.cpp:1591
static float ToFloat(std::string_view str, float fallback=0.0f) noexcept
Converts a string to a float number.
Definition: StringUtils.cpp:1870
static std::string FormatFileSize(uint64_t bytes)
Definition: StringUtils.cpp:1875
static std::string Paramify(const std::string ¶m)
Escapes the given string to be able to be used as a parameter.
Definition: StringUtils.cpp:1782
static OutputIt SplitTo(OutputIt d_first, const std::string &input, const std::string &delimiter, unsigned int iMaxStrings=0)
Splits the given input string using the given delimiter into separate strings.
Definition: StringUtils.h:169
static size_t utf8_strlen(const char *s)
utf8 version of strlen - skips any non-starting bytes in the count, thus returning the number of utf8...
Definition: StringUtils.cpp:1771
static std::vector< std::string > SplitMulti(const std::vector< std::string > &input, const std::vector< std::string > &delimiters, size_t iMaxStrings=0)
Splits the given input strings using the given delimiters into further separate strings.
Definition: StringUtils.cpp:757