From cd92f7f0699fa812f57b2d1ef61b1e9a3f2db601 Mon Sep 17 00:00:00 2001 From: Mate Barany Date: Tue, 18 Jun 2024 18:17:05 +0300 Subject: [PATCH] Pimplify QFormDataBuilder Same will be done with QFormDataPartBuilder in a follow-up patch. Found in API review. Change-Id: I863faad8b59ba16ef35b10afd9990c1b82c8634b Reviewed-by: Marc Mutz (cherry picked from commit e763177209a9b50347acae4ddeb9806145385717) Reviewed-by: Qt Cherry-pick Bot --- src/network/access/qformdatabuilder.cpp | 26 +++++++++++++++++++------ src/network/access/qformdatabuilder.h | 22 ++++++++------------- 2 files changed, 28 insertions(+), 20 deletions(-) diff --git a/src/network/access/qformdatabuilder.cpp b/src/network/access/qformdatabuilder.cpp index c0d9ce64aef..d4065c7fd22 100644 --- a/src/network/access/qformdatabuilder.cpp +++ b/src/network/access/qformdatabuilder.cpp @@ -8,6 +8,8 @@ #include "QtCore/qmimedatabase.h" #endif +#include + QT_BEGIN_NAMESPACE /*! @@ -283,19 +285,30 @@ QHttpPart QFormDataPartBuilder::build() \sa QHttpPart, QHttpMultiPart, QFormDataPartBuilder */ +class QFormDataBuilderPrivate +{ +public: + std::vector parts; +}; + /*! Constructs an empty QFormDataBuilder object. */ QFormDataBuilder::QFormDataBuilder() - = default; + : d_ptr(new QFormDataBuilderPrivate()) +{ + +} /*! Destroys the QFormDataBuilder object. */ QFormDataBuilder::~QFormDataBuilder() - = default; +{ + delete d_ptr; +} /*! \fn QFormDataBuilder::QFormDataBuilder(QFormDataBuilder &&other) noexcept @@ -324,10 +337,9 @@ QFormDataBuilder::~QFormDataBuilder() QFormDataPartBuilder &QFormDataBuilder::part(QAnyStringView name) { - static_assert(std::is_nothrow_move_constructible_v); - static_assert(std::is_nothrow_move_assignable_v); + Q_D(QFormDataBuilder); - 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 QFormDataBuilder::buildMultiPart() { + Q_D(QFormDataBuilder); + auto multiPart = std::make_unique(QHttpMultiPart::FormDataType); - for (auto &part : m_parts) + for (auto &part : d->parts) multiPart->append(part.build()); return multiPart; diff --git a/src/network/access/qformdatabuilder.h b/src/network/access/qformdatabuilder.h index 332a5e43166..16274734be3 100644 --- a/src/network/access/qformdatabuilder.h +++ b/src/network/access/qformdatabuilder.h @@ -14,7 +14,6 @@ #include #include -#include #ifndef Q_OS_WASM QT_REQUIRE_CONFIG(http); @@ -28,6 +27,8 @@ class QHttpPartPrivate; class QHttpMultiPart; class QDebug; +class QFormDataBuilderPrivate; + class QFormDataPartBuilder { struct PrivateConstructor { explicit PrivateConstructor() = default; }; @@ -94,33 +95,26 @@ class QFormDataBuilder public: Q_NETWORK_EXPORT explicit QFormDataBuilder(); - QFormDataBuilder(QFormDataBuilder &&other) noexcept - : m_parts(std::move(other.m_parts)), - m_reserved(std::exchange(other.m_reserved, nullptr)) - { - - } + QFormDataBuilder(QFormDataBuilder &&other) noexcept : d_ptr(std::exchange(other.d_ptr, nullptr)) {} QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_PURE_SWAP(QFormDataBuilder) void swap(QFormDataBuilder &other) noexcept { - m_parts.swap(other.m_parts); - qt_ptr_swap(m_reserved, other.m_reserved); + qt_ptr_swap(d_ptr, other.d_ptr); } Q_NETWORK_EXPORT ~QFormDataBuilder(); Q_NETWORK_EXPORT QFormDataPartBuilder &part(QAnyStringView name); Q_NETWORK_EXPORT std::unique_ptr buildMultiPart(); private: - std::vector m_parts; - void *m_reserved = nullptr; - - friend void swap(QFormDataBuilder &lhs, QFormDataBuilder &rhs) noexcept - { lhs.swap(rhs); } + QFormDataBuilderPrivate *d_ptr; + Q_DECLARE_PRIVATE(QFormDataBuilder) Q_DISABLE_COPY(QFormDataBuilder) }; +Q_DECLARE_SHARED(QFormDataBuilder) + QT_END_NAMESPACE #endif // QFORMDATABUILDER_H