mirror of
https://github.com/RetroDECK/ES-DE.git
synced 2024-11-23 22:55:39 +00:00
44 lines
957 B
C
44 lines
957 B
C
|
#pragma once
|
||
|
|
||
|
enum AsyncHandleStatus
|
||
|
{
|
||
|
ASYNC_IN_PROGRESS,
|
||
|
ASYNC_ERROR,
|
||
|
ASYNC_DONE
|
||
|
};
|
||
|
|
||
|
// Handle for some asynchronous operation.
|
||
|
class AsyncHandle
|
||
|
{
|
||
|
public:
|
||
|
AsyncHandle() : mStatus(ASYNC_IN_PROGRESS) {};
|
||
|
|
||
|
virtual void update() = 0;
|
||
|
|
||
|
// Update and return the latest status.
|
||
|
inline AsyncHandleStatus status() { update(); return mStatus; }
|
||
|
|
||
|
// User-friendly string of our current status. Will return error message if status() == SEARCH_ERROR.
|
||
|
inline std::string getStatusString()
|
||
|
{
|
||
|
switch(mStatus)
|
||
|
{
|
||
|
case ASYNC_IN_PROGRESS:
|
||
|
return "in progress";
|
||
|
case ASYNC_ERROR:
|
||
|
return mError;
|
||
|
case ASYNC_DONE:
|
||
|
return "done";
|
||
|
default:
|
||
|
return "something impossible has occured; row, row, fight the power";
|
||
|
}
|
||
|
}
|
||
|
|
||
|
protected:
|
||
|
inline void setStatus(AsyncHandleStatus status) { mStatus = status; }
|
||
|
inline void setError(const std::string& error) { setStatus(ASYNC_ERROR); mError = error; }
|
||
|
|
||
|
std::string mError;
|
||
|
AsyncHandleStatus mStatus;
|
||
|
};
|