9 #include "QXmppGlobal.h" 17 #include <QDomElement> 20 class QXmlStreamWriter;
27 template<
class T, std::size_t N, std::size_t... I>
28 constexpr std::array<std::remove_cv_t<T>, N>
29 to_array_impl(T (&&a)[N], std::index_sequence<I...>)
31 return { { std::move(a[I])... } };
35 template<
class T, std::
size_t N>
36 constexpr std::array<std::remove_cv_t<T>, N> to_array(T (&&a)[N])
38 return detail::to_array_impl(std::move(a), std::make_index_sequence<N> {});
42 inline auto toString60(QStringView s)
44 #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) 50 inline auto toString65(QStringView s)
52 #if QT_VERSION >= QT_VERSION_CHECK(6, 5, 0) 60 #if QT_VERSION >= QT_VERSION_CHECK(6, 5, 0) 61 #define QSL65(text) u"" text 63 #define QSL65(text) QStringLiteral(text) 67 template<
typename Enum, std::
size_t N>
68 std::optional<Enum> enumFromString(
const std::array<QStringView, N> &values, QStringView str)
70 auto itr = std::find(values.begin(), values.end(), str);
71 if (itr != values.end()) {
72 return Enum(std::distance(values.begin(), itr));
78 void writeOptionalXmlAttribute(QXmlStreamWriter *stream, QStringView name, QStringView value);
79 void writeXmlTextElement(QXmlStreamWriter *stream, QStringView name, QStringView value);
80 void writeXmlTextElement(QXmlStreamWriter *writer, QStringView name, QStringView xmlns, QStringView value);
81 void writeOptionalXmlTextElement(QXmlStreamWriter *writer, QStringView name, QStringView value);
82 void writeEmptyElement(QXmlStreamWriter *writer, QStringView name, QStringView xmlns);
84 inline void writeOptional(QXmlStreamWriter *writer,
const std::optional<T> &value)
92 std::optional<QByteArray> parseBase64(
const QString &);
93 inline QString serializeBase64(
const QByteArray &data) {
return QString::fromUtf8(data.toBase64()); }
96 template<
typename Int>
97 std::optional<Int> parseInt(QStringView str);
98 template<
typename Int>
99 inline QString serializeInt(Int value) {
return QString::number(value); }
102 std::optional<bool> parseBoolean(
const QString &str);
103 QString serializeBoolean(
bool);
109 QXMPP_EXPORT
bool isIqType(
const QDomElement &, QStringView tagName, QStringView xmlns);
110 QXMPP_EXPORT QDomElement firstChildElement(
const QDomElement &, QStringView tagName = {}, QStringView xmlNs = {});
111 QXMPP_EXPORT QDomElement nextSiblingElement(
const QDomElement &, QStringView tagName = {}, QStringView xmlNs = {});
113 struct DomChildElements {
116 QStringView namespaceUri;
118 struct EndIterator { };
120 Iterator operator++()
122 el = nextSiblingElement(el, tagName, namespaceUri);
125 bool operator!=(EndIterator)
const {
return !el.isNull(); }
126 const QDomElement &operator*()
const {
return el; }
130 QStringView namespaceUri;
133 Iterator begin()
const {
return { firstChildElement(parent, tagName, namespaceUri), tagName, namespaceUri }; }
134 EndIterator end()
const {
return {}; }
137 inline DomChildElements iterChildElements(
const QDomElement &el, QStringView tagName = {}, QStringView namespaceUri = {}) {
return DomChildElements { el, tagName, namespaceUri }; }
139 std::vector<QString> parseTextElements(DomChildElements elements);
141 QByteArray serializeXml(
const void *packet,
void (*toXml)(
const void *, QXmlStreamWriter *));
143 inline QByteArray serializeXml(
const T &packet)
145 return serializeXml(&packet, [](
const void *packet, QXmlStreamWriter *w) {
146 std::invoke(&T::toXml, reinterpret_cast<const T *>(packet), w);
150 QXMPP_EXPORT QByteArray generateRandomBytes(
size_t minimumByteCount,
size_t maximumByteCount);
151 QXMPP_EXPORT
void generateRandomBytes(uint8_t *bytes,
size_t byteCount);
152 float calculateProgress(qint64 transferred, qint64 total);
154 QXMPP_EXPORT std::pair<QString, int> parseHostAddress(
const QString &address);
158 #endif // QXMPPUTILS_P_H Definition: QXmppNonza.h:13
Definition: Algorithms.h:12