50 lines
971 B
C++
50 lines
971 B
C++
#ifndef ASYNC_RESULT_H
|
|
#define ASYNC_RESULT_H
|
|
|
|
#include <QDebug>
|
|
#include <QVariant>
|
|
|
|
#include "callback.h"
|
|
|
|
template <class R>
|
|
class AsyncResult {
|
|
|
|
private:
|
|
QVariant result;
|
|
Callback<R> *callback;
|
|
|
|
public:
|
|
AsyncResult() {}
|
|
|
|
AsyncResult(R result) {
|
|
this->result.setValue(result);
|
|
}
|
|
|
|
void setResult(R result) {
|
|
this->result.setValue(result);
|
|
if (callback != nullptr) {
|
|
this->callback->onResult(result);
|
|
this->callback->onFinish();
|
|
}
|
|
}
|
|
|
|
void setError(QException *exception) {
|
|
this->result->setValue(exception);
|
|
if (callback != nullptr) {
|
|
this->callback->onError(exception);
|
|
this->callback->onFinish();
|
|
}
|
|
}
|
|
|
|
bool hasResult() {
|
|
qDebug() << result.typeName();
|
|
return !QString(result.typeName()).isEmpty();
|
|
}
|
|
|
|
R *getResult() {
|
|
return static_cast<R*>(result.data());
|
|
}
|
|
};
|
|
|
|
#endif // ASYNC_RESULT_H
|