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
16namespace StringUtil
17{
18MBASE_PUBLIC bool isValidUTF8(const QByteArray &data);
19
27inline 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
36inline QString indentSpaces(unsigned int level, unsigned int size = 4)
37{
38 return {static_cast<int>(level * size), QChar(' ')};
39}
40
44inline QString bool_to_string(bool val)
45{
46 return (val) ? QStringLiteral("true") : QStringLiteral("false");
47}
48
50int naturalCompare(const QString &_a, const QString &_b,
51 Qt::CaseSensitivity caseSensitivity = Qt::CaseSensitive);
52
57inline bool naturalSortCompare(const QString &a, const QString &b,
58 Qt::CaseSensitivity caseSensitivity = Qt::CaseSensitive)
59{
60 return naturalCompare(a, b, caseSensitivity) < 0;
61}
62
63MBASE_PUBLIC QString formatKBytes(int64_t sizeKB, int prec=1);
64MBASE_PUBLIC QString formatBytes(int64_t sizeB, int prec=1);
65
74inline 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 = s.find(delimiter);
82 while (pos != std::string_view::npos)
83 {
84 tokens.emplace_back(s.substr(last_pos, pos - last_pos));
85 last_pos = pos + delimiter.size();
86 pos = s.find(delimiter, last_pos);
87 }
88 tokens.emplace_back(s.substr(last_pos));
89 return tokens;
90}
91
92} // namespace StringUtil
93
94#endif // STRINGUTIL_H_
#define MBASE_PUBLIC
Definition: mythbaseexp.h:15
MBASE_PUBLIC bool isValidUTF8(const QByteArray &data)
Definition: stringutil.cpp:47
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
QString bool_to_string(bool val)
This is equivalent to QVariant(bool).toString()
Definition: stringutil.h:44
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
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
MBASE_PUBLIC QString formatBytes(int64_t sizeB, int prec=1)
Definition: stringutil.cpp:378
QString intToPaddedString(int n, int width=2)
Creates a zero padded string representation of an integer.
Definition: stringutil.h:27
QString indentSpaces(unsigned int level, unsigned int size=4)
Definition: stringutil.h:36
MBASE_PUBLIC QString formatKBytes(int64_t sizeKB, int prec=1)
Definition: stringutil.cpp:357