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