1 #ifndef RHESUS_DO_ASYNC_H_
2 #define RHESUS_DO_ASYNC_H_
4 #include "RhesusTask.h"
14 template<
typename AsyncMethodClassPtr,
typename AsyncMethodFuncPtr,
typename AsyncCallbackClassPtr = AsyncMethodClassPtr,
typename AsyncCallbackFuncPtr = AsyncMethodFuncPtr>
18 static INT32 AsyncMethodWrapper(UINT32 p0, UINT32 p1, UINT32 p2, UINT32 p3, UINT32 p4, UINT32 p5,
19 UINT32 p6, UINT32 p7, UINT32 p8)
21 printf(
"!!in wrapper!!\n");
23 do_async* instance =
reinterpret_cast<do_async*
>(p0);
25 if(instance->m_asyncFunc == NULL)
return -1;
27 printf(
"calling func: %u\n", p0);
29 INT32 ret = instance->do_func(p1, p2, p3, p4, p5, p6, p7, p8);
31 instance->do_callback(ret);
35 do_async(AsyncMethodClassPtr inst, AsyncMethodFuncPtr asyncFunc, UINT32 p0 = 0, UINT32 p1 = 0, UINT32 p2 = 0, UINT32 p3 = 0, UINT32 p4 = 0, UINT32 p5 = 0,
36 UINT32 p6 = 0, UINT32 p7 = 0)
37 : m_asyncTask(RhesusTask::CreateNew(
"Async Function", (FUNCPTR)AsyncMethodWrapper)),
39 m_asyncFunc(asyncFunc),
43 printf(
"!!starting wrapper!!\n");
44 m_asyncTask.Start((UINT32)
this, p0, p1, p2, p3, p4, p5, p6, p7);
47 do_async(AsyncMethodClassPtr inst, AsyncMethodFuncPtr asyncFunc, AsyncMethodClassPtr c_inst, AsyncCallbackFuncPtr callback, UINT32 p0 = 0, UINT32 p1 = 0, UINT32 p2 = 0, UINT32 p3 = 0, UINT32 p4 = 0, UINT32 p5 = 0,
48 UINT32 p6 = 0, UINT32 p7 = 0)
49 : m_asyncTask(RhesusTask::CreateNew(
"Async Function", (FUNCPTR)AsyncMethodWrapper)),
51 m_asyncFunc(asyncFunc),
52 m_callbackInst(c_inst),
53 m_asyncCallback(callback)
55 printf(
"!!starting wrapper!!\n");
56 TaskPool::EnqueueTask((FUNCPTR)AsyncMethodWrapper, (UINT32)
this, p0, p1, p2, p3, p4, p5, p6, p7);
62 INT32 do_func(UINT32 p0, UINT32 p1, UINT32 p2, UINT32 p3, UINT32 p4, UINT32 p5,
65 (m_asyncInst->*m_asyncFunc)(p0, p1, p2, p3, p4, p5, p6, p7);
70 void do_callback(INT32 retCode)
72 if(m_callbackInst == NULL || m_asyncCallback == NULL)
75 (m_callbackInst->*m_asyncCallback)(retCode);
78 RhesusTask& m_asyncTask;
80 AsyncMethodClassPtr m_asyncInst;
81 AsyncMethodFuncPtr m_asyncFunc;
82 AsyncMethodClassPtr m_callbackInst;
83 AsyncCallbackFuncPtr m_asyncCallback;