From 4cfe2e54f4b89c07f195305724aae93677ff37ea Mon Sep 17 00:00:00 2001 From: Simon Brunel Date: Mon, 21 May 2018 09:25:14 +0200 Subject: [PATCH] Move resolver related classes in a separate file. --- src/qtpromise/qpromise.h | 1 + src/qtpromise/qpromise.inl | 43 +---------- src/qtpromise/qpromise_p.h | 62 ---------------- src/qtpromise/qpromiseresolver.h | 124 +++++++++++++++++++++++++++++++ src/qtpromise/qtpromise.pri | 3 +- 5 files changed, 129 insertions(+), 104 deletions(-) create mode 100644 src/qtpromise/qpromiseresolver.h diff --git a/src/qtpromise/qpromise.h b/src/qtpromise/qpromise.h index 47252f2..7270e12 100644 --- a/src/qtpromise/qpromise.h +++ b/src/qtpromise/qpromise.h @@ -5,6 +5,7 @@ #include "qpromise_p.h" #include "qpromiseerror.h" #include "qpromiseglobal.h" +#include "qpromiseresolver.h" // Qt #include diff --git a/src/qtpromise/qpromise.inl b/src/qtpromise/qpromise.inl index 5a3fb96..8de05a6 100644 --- a/src/qtpromise/qpromise.inl +++ b/src/qtpromise/qpromise.inl @@ -1,3 +1,5 @@ +#include "qpromise.h" + // Qt #include #include @@ -5,47 +7,6 @@ namespace QtPromise { -template -class QPromiseResolve -{ -public: - QPromiseResolve(QtPromisePrivate::PromiseResolver resolver) - : m_resolver(std::move(resolver)) - { } - - template - void operator()(V&& value) const - { - m_resolver.resolve(std::forward(value)); - } - - void operator()() const - { - m_resolver.resolve(); - } - -private: - mutable QtPromisePrivate::PromiseResolver m_resolver; -}; - -template -class QPromiseReject -{ -public: - QPromiseReject(QtPromisePrivate::PromiseResolver resolver) - : m_resolver(std::move(resolver)) - { } - - template - void operator()(E&& error) const - { - m_resolver.reject(std::forward(error)); - } - -private: - mutable QtPromisePrivate::PromiseResolver m_resolver; -}; - template template ::count == 1, int>::type> inline QPromiseBase::QPromiseBase(F callback) diff --git a/src/qtpromise/qpromise_p.h b/src/qtpromise/qpromise_p.h index 723a422..6d75d24 100644 --- a/src/qtpromise/qpromise_p.h +++ b/src/qtpromise/qpromise_p.h @@ -562,68 +562,6 @@ protected: } }; -template -class PromiseResolver -{ -public: - PromiseResolver(QtPromise::QPromise promise) - : m_d(new Data()) - { - m_d->promise = new QtPromise::QPromise(std::move(promise)); - } - - template - void reject(E&& error) - { - auto promise = m_d->promise; - if (promise) { - Q_ASSERT(promise->isPending()); - promise->m_d->reject(std::forward(error)); - promise->m_d->dispatch(); - release(); - } - } - - template - void resolve(V&& value) - { - auto promise = m_d->promise; - if (promise) { - Q_ASSERT(promise->isPending()); - promise->m_d->resolve(std::forward(value)); - promise->m_d->dispatch(); - release(); - } - } - - void resolve() - { - auto promise = m_d->promise; - if (promise) { - Q_ASSERT(promise->isPending()); - promise->m_d->resolve(); - promise->m_d->dispatch(); - release(); - } - } - -private: - struct Data : public QSharedData - { - QtPromise::QPromise* promise = nullptr; - }; - - QExplicitlySharedDataPointer m_d; - - void release() - { - Q_ASSERT(m_d->promise); - Q_ASSERT(!m_d->promise->isPending()); - delete m_d->promise; - m_d->promise = nullptr; - } -}; - } // namespace QtPromise #endif // ifndef QTPROMISE_QPROMISE_H diff --git a/src/qtpromise/qpromiseresolver.h b/src/qtpromise/qpromiseresolver.h new file mode 100644 index 0000000..b8a06e2 --- /dev/null +++ b/src/qtpromise/qpromiseresolver.h @@ -0,0 +1,124 @@ +#ifndef QTPROMISE_QPROMISERESOLVER_H +#define QTPROMISE_QPROMISERESOLVER_H + +// Qt +#include + +namespace QtPromise { + +template class QPromise; + +} // namespace QtPromise + +namespace QtPromisePrivate { + +template +class PromiseResolver +{ +public: + PromiseResolver(QtPromise::QPromise promise) + : m_d(new Data()) + { + m_d->promise = new QtPromise::QPromise(std::move(promise)); + } + + template + void reject(E&& error) + { + auto promise = m_d->promise; + if (promise) { + Q_ASSERT(promise->isPending()); + promise->m_d->reject(std::forward(error)); + promise->m_d->dispatch(); + release(); + } + } + + template + void resolve(V&& value) + { + auto promise = m_d->promise; + if (promise) { + Q_ASSERT(promise->isPending()); + promise->m_d->resolve(std::forward(value)); + promise->m_d->dispatch(); + release(); + } + } + + void resolve() + { + auto promise = m_d->promise; + if (promise) { + Q_ASSERT(promise->isPending()); + promise->m_d->resolve(); + promise->m_d->dispatch(); + release(); + } + } + +private: + struct Data : public QSharedData + { + QtPromise::QPromise* promise = nullptr; + }; + + QExplicitlySharedDataPointer m_d; + + void release() + { + Q_ASSERT(m_d->promise); + Q_ASSERT(!m_d->promise->isPending()); + delete m_d->promise; + m_d->promise = nullptr; + } +}; + +} // QtPromisePrivate + +namespace QtPromise { + +template +class QPromiseResolve +{ +public: + QPromiseResolve(QtPromisePrivate::PromiseResolver resolver) + : m_resolver(std::move(resolver)) + { } + + template + void operator()(V&& value) const + { + m_resolver.resolve(std::forward(value)); + } + + void operator()() const + { + m_resolver.resolve(); + } + +private: + mutable QtPromisePrivate::PromiseResolver m_resolver; +}; + +template +class QPromiseReject +{ +public: + QPromiseReject(QtPromisePrivate::PromiseResolver resolver) + : m_resolver(std::move(resolver)) + { } + + template + void operator()(E&& error) const + { + m_resolver.reject(std::forward(error)); + } + +private: + mutable QtPromisePrivate::PromiseResolver m_resolver; +}; + +} // namespace QtPromise + +#endif // QTPROMISE_QPROMISERESOLVER_H diff --git a/src/qtpromise/qtpromise.pri b/src/qtpromise/qtpromise.pri index 8a554e5..4815e64 100644 --- a/src/qtpromise/qtpromise.pri +++ b/src/qtpromise/qtpromise.pri @@ -5,4 +5,5 @@ HEADERS += \ $$PWD/qpromiseerror.h \ $$PWD/qpromisefuture.h \ $$PWD/qpromiseglobal.h \ - $$PWD/qpromisehelpers.h + $$PWD/qpromisehelpers.h \ + $$PWD/qpromiseresolver.h