12 #ifndef __UT_HOUDINIEXECUTIONCONTEXT_H__
13 #define __UT_HOUDINIEXECUTIONCONTEXT_H__
29 virtual ~
Event() =
default;
31 virtual void invoke() = 0;
42 void invoke()
override { myFunc(); }
55 return instance()->get_executor();
66 return theInstance !=
nullptr;
83 virtual hboost::asio::executor get_executor();
91 theInstance =
nullptr;
115 hboost::asio::post(myIOContext, [
event = std::move(ev)]()
133 void run(exception_handler_t exception_handler =
nullptr);
136 myIOContext.restart();
160 myLoop.postEvent(std::move(ev));
173 : myCtx(std::addressof(context))
181 UI_QtExecutionContext&
query(hboost::asio::execution::detail::context_t)
const
186 static constexpr hboost::asio::execution::blocking_t
query(
187 hboost::asio::execution::blocking_t)
189 return hboost::asio::execution::blocking.never;
192 static constexpr hboost::asio::exection::relationship_t
query(
193 hboost::asio::execution::relationship_t)
195 return hboost::asio::execution::relationship.fork;
198 static constexpr hboost::asio::execution::outstanding_work_t
query(
199 hboost::asio::execution::outstanding_work_t)
201 return hboost::asio::execution::outstanding_work.tracked;
204 template <
typename OtherAllocator>
205 static constexpr
auto query(
206 hboost::asio::execution::allocator_t<OtherAllocator>)
208 return std::allocator<void>();
211 static constexpr
auto query(hboost::asio::execution::allocator_t<void>)
213 return std::allocator<void>();
216 template <
typename F>
219 myCtx->execute(std::move(f));
226 template <
typename F,
typename OtherAllocator>
231 template <
typename F,
typename OtherAllocator>
232 void post(F f,
const OtherAllocator&
a)
const
236 template <
typename F,
typename OtherAllocator>
237 void defer(F f,
const OtherAllocator&
a)
const
241 template <
typename F>
244 myCtx->
post(std::move(f));
250 return myCtx == rhs.myCtx;
261 #endif // __UT_HOUDINIEXECUTIONCONTEXT_H__
static void clearInstance()
void defer(F f, const OtherAllocator &a) const
UT_HoudiniEventLoopExecutionContext()
GLsizei const GLfloat * value
UT_HoudiniExecutionContext & context()
GLboolean GLboolean GLboolean GLboolean a
static hboost::asio::executor houdiniExecutor()
std::unique_ptr< T, Deleter > UT_UniquePtr
A smart pointer for unique ownership of dynamically allocated objects.
bool(*)(std::exception_ptr) exception_handler_t
UT_HoudiniExecutionContext()
void post_(UT_UniquePtr< Event > ev) override
bool operator==(const UT_HoudiniExecutor &rhs) const
bool operator!=(const UT_HoudiniExecutor &rhs) const
UT_HoudiniWorkEventLoop()
void postEvent(UT_UniquePtr< event_t > ev)
#define UT_NON_COPYABLE(CLASS)
Define deleted copy constructor and assignment operator inside a class.
static bool hasInstance()
std::enable_if< !std::is_array< T >::value, UT_UniquePtr< T >>::type UTmakeUnique(REST &&...args)
hboost::asio::io_context ASIO_IOContext
UT_HoudiniWorkEventLoop & loop()
void post(F f, const OtherAllocator &a) const
static UT_HoudiniExecutionContext * instance()
void dispatch(F f, const OtherAllocator &a) const
void on_work_finished() const
void on_work_started() const
UT_HoudiniExecutor(UT_HoudiniExecutionContext &context)