4#include <QtCore/qstring.h>
6#ifndef QSTRINGBUILDER_H
7#define QSTRINGBUILDER_H
12#pragma qt_class(QStringBuilder)
13#pragma qt_sync_stop_processing
16#include <QtCore/qbytearray.h>
45 template <
typename T>
using HasIsNull =
decltype(std::declval<const T &>().isNull());
46 template <
typename T>
bool isNull(
const T &
t)
48 if constexpr (qxp::is_detected_v<HasIsNull, T>)
55template<
typename Builder,
typename T>
62 T
resolved()
const {
return *
static_cast<const Builder*
>(
this); }
65template<
typename Builder,
typename T>
70template<
typename Builder>
78template <
typename A,
typename B>
80 typename QtStringBuilder::ConvertToTypeHelper<
81 typename QConcatenableEx<A>::ConvertTo,
82 typename QConcatenableEx<B>::ConvertTo
96 template <
typename T> T convertTo()
const
111 auto d =
reinterpret_cast<typename T::iterator
>(
s.data_ptr().data());
127 typedef QConcatenable<QStringBuilder<A, B> > Concatenable;
130 operator ConvertTo()
const {
return convertTo<ConvertTo>(); }
151 enum { ExactSize =
true };
153#ifndef QT_NO_CAST_FROM_ASCII
167 enum { ExactSize =
true };
169#ifndef QT_NO_CAST_FROM_ASCII
179 memcpy(
out, bav.data(),
n);
188 enum { ExactSize =
true };
198 enum { ExactSize =
true };
203 { *
out++ =
c.toLatin1(); }
210 enum { ExactSize =
true };
218 typedef QChar::SpecialCharacter
type;
220 enum { ExactSize =
true };
230 enum { ExactSize =
true };
234 appendLatin1To(
a,
out);
239 if (
const char *
data =
a.data()) {
250 enum { ExactSize =
true };
256 memcpy(
out,
reinterpret_cast<const char*
>(
a.constData()),
sizeof(
QChar) *
n);
265 enum { ExactSize =
true };
269 const auto n =
a.size();
280 enum { ExactSize =
false };
282#ifndef QT_NO_CAST_FROM_ASCII
304 enum { ExactSize =
false };
306#ifndef QT_NO_CAST_FROM_ASCII
326 using type =
const char16_t[N];
328 enum { ExactSize =
true };
332 memcpy(
static_cast<void *
>(
out),
a, (N - 1) *
sizeof(
char16_t));
346 enum { ExactSize =
true };
357template <>
struct QConcatenable<char16_t *> : QConcatenable<const char16_t*>
366 enum { ExactSize =
false };
368#ifndef QT_NO_CAST_FROM_ASCII
384template <
typename A,
typename B>
387 typedef QStringBuilder<A, B>
type;
404template <
typename A,
typename B,
408 return QStringBuilder<A, B>(std::forward<A>(
a), std::forward<B>(
b));
413#if defined(QT_USE_FAST_OPERATOR_PLUS) || defined(QT_USE_QSTRINGBUILDER)
414template <
typename A,
typename B,
418 return std::forward<A>(
a) % std::forward<B>(
b);
423template <
typename A,
typename B>
429 if (
len >
a.data_ptr().freeSpaceAtEnd())
432 QConcatenable< QStringBuilder<A, B> >::appendTo(
b,
it);
437#ifndef QT_NO_CAST_TO_ASCII
438template <
typename A,
typename B>
446template <
typename A,
typename B>
450 typename QConcatenable< QStringBuilder<A, B> >::ConvertTo::value_type());
453template <
typename A,
typename B>
458 if (
len >
a.data_ptr().freeSpaceAtEnd())
461 QConcatenable< QStringBuilder<A, B> >::appendTo(
b,
it);
463 a.resize(
it -
a.constData());
qsizetype size() const noexcept
Returns the number of bytes in this byte array.
iterator begin()
Returns an \l{STL-style iterators}{STL-style iterator} pointing to the first byte in the byte-array.
QStringBuilder(A &&a_, B &&b_)
QStringBuilder(QStringBuilder &&)=default
QStringBuilder(const QStringBuilder &)=default
~QStringBuilder()=default
Concatenable::ConvertTo ConvertTo
constexpr qsizetype size() const noexcept
Returns the size of this string view, in UTF-16 code units (that is, surrogate pairs count as two for...
\macro QT_RESTRICTED_CAST_FROM_ASCII
bool isNull() const
Returns true if this string is null; otherwise returns false.
QByteArray toUtf8() const &
QSet< QString >::iterator it
Combined button and popup list for selecting options.
decltype(std::declval< const T & >().isNull()) HasIsNull
QByteArray & appendToByteArray(QByteArray &a, const QStringBuilder< A, B > &b, char)
constexpr Initialization Uninitialized
size_t qstrlen(const char *str)
constexpr timespec operator+(const timespec &t1, const timespec &t2)
constexpr const T & qMax(const T &a, const T &b)
GLboolean GLboolean GLboolean b
GLboolean GLboolean GLboolean GLboolean a
[7]
GLenum GLuint GLintptr GLsizeiptr size
[1]
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
QConcatenable< q20::remove_cvref_t< T > > QConcatenableEx
QByteArray & operator+=(QByteArray &a, const QStringBuilder< A, B > &b)
auto operator%(A &&a, B &&b)
#define QT_ASCII_CAST_WARN
QTextStream out(stdout)
[7]
static void convertFromAscii(char a, QChar *&out) noexcept
static void convertFromUtf8(QByteArrayView in, QChar *&out) noexcept
static QT_ASCII_CAST_WARN void appendTo(QByteArrayView bav, QChar *&out)
static void appendTo(QByteArrayView bav, char *&out)
static qsizetype size(QByteArrayView bav)
static void appendTo(const QByteArray &ba, char *&out)
static QT_ASCII_CAST_WARN void appendTo(const QByteArray &ba, QChar *&out)
static qsizetype size(const QByteArray &ba)
static void appendTo(const QChar c, QChar *&out)
static qsizetype size(const QChar)
static qsizetype size(const QChar::SpecialCharacter)
static void appendTo(const QChar::SpecialCharacter c, QChar *&out)
QChar::SpecialCharacter type
static void appendTo(const QLatin1Char c, QChar *&out)
static qsizetype size(const QLatin1Char)
static void appendTo(const QLatin1Char c, char *&out)
static void appendTo(const QLatin1StringView a, QChar *&out)
static qsizetype size(const QLatin1StringView a)
static void appendTo(const QLatin1StringView a, char *&out)
static void appendTo(const type &p, T *&out)
static qsizetype size(const type &p)
typename QtStringBuilder::ConvertToTypeHelper< typename QConcatenableEx< A >::ConvertTo, typename QConcatenableEx< B >::ConvertTo >::ConvertTo ConvertTo
QStringBuilder< A, B > type
static qsizetype size(QStringView a)
static void appendTo(QStringView a, QChar *&out)
static qsizetype size(const QString &a)
static void appendTo(const QString &a, QChar *&out)
static void appendTo(char16_t c, QChar *&out)
static constexpr qsizetype size(char16_t)
static QT_ASCII_CAST_WARN void appendTo(const char c, QChar *&out)
static qsizetype size(const char)
static void appendTo(const char c, char *&out)
static QT_ASCII_CAST_WARN void appendTo(const char16_t *a, QChar *&out)
static qsizetype size(const char16_t *a)
static qsizetype size(const char16_t[N])
static void appendTo(const char16_t a[N], QChar *&out)
static QT_ASCII_CAST_WARN void appendTo(const char *a, QChar *&out)
static void appendTo(const char *a, char *&out)
static qsizetype size(const char *a)
static void appendTo(const char a[N], char *&out)
static qsizetype size(const char[N])
static QT_ASCII_CAST_WARN void appendTo(const char a[N], QChar *&out)
\inmodule QtCore \reentrant
QByteArray toLocal8Bit() const
QByteArray toUtf8() const
QByteArray toLatin1() const