Pimplify QFormDataBuilder

Same will be done with QFormDataPartBuilder in a follow-up patch.

Found in API review.

Change-Id: I863faad8b59ba16ef35b10afd9990c1b82c8634b
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
(cherry picked from commit e763177209a9b50347acae4ddeb9806145385717)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
Mate Barany 2024-06-18 18:17:05 +03:00 committed by Qt Cherry-pick Bot
parent 48fd0b3807
commit cd92f7f069
2 changed files with 28 additions and 20 deletions

View File

@ -8,6 +8,8 @@
#include "QtCore/qmimedatabase.h" #include "QtCore/qmimedatabase.h"
#endif #endif
#include <vector>
QT_BEGIN_NAMESPACE QT_BEGIN_NAMESPACE
/*! /*!
@ -283,19 +285,30 @@ QHttpPart QFormDataPartBuilder::build()
\sa QHttpPart, QHttpMultiPart, QFormDataPartBuilder \sa QHttpPart, QHttpMultiPart, QFormDataPartBuilder
*/ */
class QFormDataBuilderPrivate
{
public:
std::vector<QFormDataPartBuilder> parts;
};
/*! /*!
Constructs an empty QFormDataBuilder object. Constructs an empty QFormDataBuilder object.
*/ */
QFormDataBuilder::QFormDataBuilder() QFormDataBuilder::QFormDataBuilder()
= default; : d_ptr(new QFormDataBuilderPrivate())
{
}
/*! /*!
Destroys the QFormDataBuilder object. Destroys the QFormDataBuilder object.
*/ */
QFormDataBuilder::~QFormDataBuilder() QFormDataBuilder::~QFormDataBuilder()
= default; {
delete d_ptr;
}
/*! /*!
\fn QFormDataBuilder::QFormDataBuilder(QFormDataBuilder &&other) noexcept \fn QFormDataBuilder::QFormDataBuilder(QFormDataBuilder &&other) noexcept
@ -324,10 +337,9 @@ QFormDataBuilder::~QFormDataBuilder()
QFormDataPartBuilder &QFormDataBuilder::part(QAnyStringView name) QFormDataPartBuilder &QFormDataBuilder::part(QAnyStringView name)
{ {
static_assert(std::is_nothrow_move_constructible_v<decltype(m_parts)>); Q_D(QFormDataBuilder);
static_assert(std::is_nothrow_move_assignable_v<decltype(m_parts)>);
return m_parts.emplace_back(name, QFormDataPartBuilder::PrivateConstructor()); return d->parts.emplace_back(name, QFormDataPartBuilder::PrivateConstructor());
} }
/*! /*!
@ -338,9 +350,11 @@ QFormDataPartBuilder &QFormDataBuilder::part(QAnyStringView name)
std::unique_ptr<QHttpMultiPart> QFormDataBuilder::buildMultiPart() std::unique_ptr<QHttpMultiPart> QFormDataBuilder::buildMultiPart()
{ {
Q_D(QFormDataBuilder);
auto multiPart = std::make_unique<QHttpMultiPart>(QHttpMultiPart::FormDataType); auto multiPart = std::make_unique<QHttpMultiPart>(QHttpMultiPart::FormDataType);
for (auto &part : m_parts) for (auto &part : d->parts)
multiPart->append(part.build()); multiPart->append(part.build());
return multiPart; return multiPart;

View File

@ -14,7 +14,6 @@
#include <memory> #include <memory>
#include <variant> #include <variant>
#include <vector>
#ifndef Q_OS_WASM #ifndef Q_OS_WASM
QT_REQUIRE_CONFIG(http); QT_REQUIRE_CONFIG(http);
@ -28,6 +27,8 @@ class QHttpPartPrivate;
class QHttpMultiPart; class QHttpMultiPart;
class QDebug; class QDebug;
class QFormDataBuilderPrivate;
class QFormDataPartBuilder class QFormDataPartBuilder
{ {
struct PrivateConstructor { explicit PrivateConstructor() = default; }; struct PrivateConstructor { explicit PrivateConstructor() = default; };
@ -94,33 +95,26 @@ class QFormDataBuilder
public: public:
Q_NETWORK_EXPORT explicit QFormDataBuilder(); Q_NETWORK_EXPORT explicit QFormDataBuilder();
QFormDataBuilder(QFormDataBuilder &&other) noexcept QFormDataBuilder(QFormDataBuilder &&other) noexcept : d_ptr(std::exchange(other.d_ptr, nullptr)) {}
: m_parts(std::move(other.m_parts)),
m_reserved(std::exchange(other.m_reserved, nullptr))
{
}
QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_PURE_SWAP(QFormDataBuilder) QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_PURE_SWAP(QFormDataBuilder)
void swap(QFormDataBuilder &other) noexcept void swap(QFormDataBuilder &other) noexcept
{ {
m_parts.swap(other.m_parts); qt_ptr_swap(d_ptr, other.d_ptr);
qt_ptr_swap(m_reserved, other.m_reserved);
} }
Q_NETWORK_EXPORT ~QFormDataBuilder(); Q_NETWORK_EXPORT ~QFormDataBuilder();
Q_NETWORK_EXPORT QFormDataPartBuilder &part(QAnyStringView name); Q_NETWORK_EXPORT QFormDataPartBuilder &part(QAnyStringView name);
Q_NETWORK_EXPORT std::unique_ptr<QHttpMultiPart> buildMultiPart(); Q_NETWORK_EXPORT std::unique_ptr<QHttpMultiPart> buildMultiPart();
private: private:
std::vector<QFormDataPartBuilder> m_parts; QFormDataBuilderPrivate *d_ptr;
void *m_reserved = nullptr;
friend void swap(QFormDataBuilder &lhs, QFormDataBuilder &rhs) noexcept
{ lhs.swap(rhs); }
Q_DECLARE_PRIVATE(QFormDataBuilder)
Q_DISABLE_COPY(QFormDataBuilder) Q_DISABLE_COPY(QFormDataBuilder)
}; };
Q_DECLARE_SHARED(QFormDataBuilder)
QT_END_NAMESPACE QT_END_NAMESPACE
#endif // QFORMDATABUILDER_H #endif // QFORMDATABUILDER_H