Files
qt6-migration-pipeline/Lts/Common/LtsUtils/LtsUtilsCore/promise.h
T

73 lines
1.0 KiB
C++
Executable File

#pragma once
#include <LtsUtilsCore/ltsutilscore_export.h>
#include <QObject>
#include <QVariant>
#include <functional>
class QTimer;
namespace LtsUtils
{
typedef std::function<void(const QVariant &value)> RawResultFunction;
typedef const RawResultFunction &ResultFunction;
class LTSUTILSCORE_EXPORT Promise : public QObject
{
Q_OBJECT
public:
Promise(const std::function<void(ResultFunction resolve, ResultFunction reject)> &function, QObject *parent = nullptr);
void setFunction(const std::function<void(ResultFunction resolve, ResultFunction reject)> &function);
void resolve(const QVariant &value = QVariant());
void reject(const QVariant &value = QVariant());
void setTimeout(int interval);
Promise &resolved(ResultFunction resolveFn);
Promise &rejected(ResultFunction rejectFn);
private:
RawResultFunction m_resolveFn;
RawResultFunction m_rejectFn;
bool m_functionAlreadySet;
QTimer *m_timeout;
bool m_resultSet;
bool m_timeoutSet;
private slots:
void slotTimeout();
};
}