MythTV  master
stringutil.h
Go to the documentation of this file.
1 #ifndef STRINGUTIL_H_
2 #define STRINGUTIL_H_
3 
4 #if __has_include(<format>) // C++20
5 #include <format>
6 #endif
7 
8 #include <string_view>
9 #include <vector>
10 
11 #include <QByteArray>
12 #include <QString>
13 
14 #include "mythbaseexp.h"
15 
16 namespace StringUtil
17 {
18 MBASE_PUBLIC bool isValidUTF8(const QByteArray &data);
19 
27 inline QString intToPaddedString(int n, int width = 2)
28 {
29 #ifdef __cpp_lib_format // C++20 with <format>
30  return QString::fromStdString(std::format("{:0{}d}", n, width));
31 #else
32  return QString("%1").arg(n, width, 10, QChar('0'));
33 #endif // __cpp_lib_format
34 }
35 
36 inline QString indentSpaces(unsigned int level, unsigned int size = 4)
37 {
38  return {static_cast<int>(level * size), QChar(' ')};
39 }
40 
44 inline QString bool_to_string(bool val)
45 {
46  return (val) ? QStringLiteral("true") : QStringLiteral("false");
47 }
48 
50 int naturalCompare(const QString &_a, const QString &_b,
51  Qt::CaseSensitivity caseSensitivity = Qt::CaseSensitive);
52 
57 inline bool naturalSortCompare(const QString &a, const QString &b,
58  Qt::CaseSensitivity caseSensitivity = Qt::CaseSensitive)
59 {
60  return naturalCompare(a, b, caseSensitivity) < 0;
61 }
62 
63 MBASE_PUBLIC QString formatKBytes(int64_t sizeKB, int prec=1);
64 MBASE_PUBLIC QString formatBytes(int64_t sizeB, int prec=1);
65 
74 inline std::vector<std::string_view> split_sv(const std::string_view s, const std::string_view delimiter)
75 {
76  // There are infinitely many empty strings at each position, avoid infinite loop
77  if (delimiter.empty())
78  return {s};
79  std::vector<std::string_view> tokens;
80  size_t last_pos = 0;
81  size_t pos = 0;
82  do
83  {
84  pos = s.find(delimiter, last_pos);
85  tokens.emplace_back(s.substr(last_pos, pos - last_pos));
86  last_pos = pos + delimiter.size();
87  }
88  while (pos != std::string_view::npos);
89  return tokens;
90 }
91 
92 } // namespace StringUtil
93 
94 #endif // STRINGUTIL_H_
StringUtil::naturalSortCompare
bool naturalSortCompare(const QString &a, const QString &b, Qt::CaseSensitivity caseSensitivity=Qt::CaseSensitive)
naturalCompare as a std::sort compatible function (ignoring the third parameter, which is never used)...
Definition: stringutil.h:57
mythbaseexp.h
StringUtil::indentSpaces
QString indentSpaces(unsigned int level, unsigned int size=4)
Definition: stringutil.h:36
MBASE_PUBLIC
#define MBASE_PUBLIC
Definition: mythbaseexp.h:15
StringUtil::naturalCompare
MBASE_PUBLIC int naturalCompare(const QString &_a, const QString &_b, Qt::CaseSensitivity caseSensitivity=Qt::CaseSensitive)
This method chops the input a and b into pieces of digits and non-digits (a1.05 becomes a | 1 | .
Definition: stringutil.cpp:160
StringUtil::intToPaddedString
QString intToPaddedString(int n, int width=2)
Creates a zero padded string representation of an integer.
Definition: stringutil.h:27
StringUtil::formatKBytes
MBASE_PUBLIC QString formatKBytes(int64_t sizeKB, int prec=1)
Definition: stringutil.cpp:357
StringUtil::isValidUTF8
MBASE_PUBLIC bool isValidUTF8(const QByteArray &data)
Definition: stringutil.cpp:47
StringUtil
Definition: stringutil.h:16
StringUtil::split_sv
std::vector< std::string_view > split_sv(const std::string_view s, const std::string_view delimiter)
Split a std::string_view into a std::vector of std::string_views.
Definition: stringutil.h:74
StringUtil::formatBytes
MBASE_PUBLIC QString formatBytes(int64_t sizeB, int prec=1)
Definition: stringutil.cpp:378
StringUtil::bool_to_string
QString bool_to_string(bool val)
This is equivalent to QVariant(bool).toString()
Definition: stringutil.h:44