[*] Readd old glue accidentally removed in previous commit
This commit is contained in:
parent
b29f8ebf21
commit
2544e557b0
@ -2,6 +2,92 @@
|
|||||||
|
|
||||||
namespace Aurora::Async
|
namespace Aurora::Async
|
||||||
{
|
{
|
||||||
|
#pragma region EASE_OF_READING
|
||||||
|
struct BasicWorkStdFunc : IWorkItemHandler
|
||||||
|
{
|
||||||
|
AuFunction<void()> callback;
|
||||||
|
AuFunction<void()> shutdown; // error
|
||||||
|
|
||||||
|
BasicWorkStdFunc(AuFunction<void()> &&callback, AuFunction<void()> &&shutdown) : callback(std::move(callback)), shutdown(std::move(shutdown))
|
||||||
|
{}
|
||||||
|
|
||||||
|
BasicWorkStdFunc(AuFunction<void()> &&callback) : callback(std::move(callback))
|
||||||
|
{}
|
||||||
|
|
||||||
|
BasicWorkStdFunc(const AuFunction<void()> &callback) : callback(callback)
|
||||||
|
{}
|
||||||
|
|
||||||
|
BasicWorkStdFunc(const AuFunction<void()> &callback, const AuFunction<void()> &shutdown) : callback(callback), shutdown(shutdown)
|
||||||
|
{}
|
||||||
|
|
||||||
|
private:
|
||||||
|
#if !defined(_CPPSHARP)
|
||||||
|
void DispatchFrame(ProcessInfo &info) override
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
callback();
|
||||||
|
}
|
||||||
|
catch (...)
|
||||||
|
{
|
||||||
|
Debug::PrintError();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Shutdown() override
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (shutdown)
|
||||||
|
{
|
||||||
|
shutdown();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (...)
|
||||||
|
{
|
||||||
|
Debug::PrintError();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/// @hideinitializer
|
||||||
|
template<typename Frame_t = AuFunction<void()>, typename Cleanup_t = AuFunction<void()>>
|
||||||
|
struct WorkItemCallable : IWorkItemHandler
|
||||||
|
{
|
||||||
|
Frame_t frame;
|
||||||
|
Cleanup_t cleanup;
|
||||||
|
|
||||||
|
private:
|
||||||
|
void DispatchFrame(ProcessInfo &info) override
|
||||||
|
{
|
||||||
|
if constexpr (AuIsBaseOfTemplate<Frame_t, decltype(frame)>::value)
|
||||||
|
{
|
||||||
|
if (!frame)
|
||||||
|
{
|
||||||
|
info.type = IWorkItemHandler::EProcessNext::eFinished;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
frame();
|
||||||
|
info.type = IWorkItemHandler::EProcessNext::eFinished;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Shutdown() override
|
||||||
|
{
|
||||||
|
if constexpr (AuIsBaseOfTemplate<Cleanup_t, decltype(cleanup)>::value)
|
||||||
|
{
|
||||||
|
if (!cleanup)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
cleanup();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
#define ASYNC_ERROR(exp) { if constexpr (AuIsSame_v<T, bool>) { SysPushErrorGen(exp); return {}; } else { throw AuString(exp); } }
|
#define ASYNC_ERROR(exp) { if constexpr (AuIsSame_v<T, bool>) { SysPushErrorGen(exp); return {}; } else { throw AuString(exp); } }
|
||||||
#define ASYNC_FINISH { if constexpr (AuIsSame_v<T, bool>) { return true; } }
|
#define ASYNC_FINISH { if constexpr (AuIsSame_v<T, bool>) { return true; } }
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user