#pragma once
#include "LoopImpl.h"
namespace
panda {
namespace
unievent {
namespace
backend {
struct
IWorkImplListener {
virtual
void
handle_work () = 0;
virtual
void
handle_after_work (
const
std::error_code&) = 0;
};
struct
WorkImpl {
LoopImpl* loop;
IWorkImplListener* listener;
WorkImpl (LoopImpl* loop, IWorkImplListener* lst) : loop(loop), listener(lst) { panda_log_ctor(); }
virtual
std::error_code queue () = 0;
void
handle_work ()
noexcept
{
loop->ltry([&]{ listener->handle_work(); });
}
void
handle_after_work (
const
std::error_code& err)
noexcept
{
loop->ltry([&]{ listener->handle_after_work(err); });
}
virtual
bool
destroy ()
noexcept
= 0;
virtual
~WorkImpl () { panda_log_dtor(); }
};
}}}