LRT14  1.0
 All Classes Namespaces Functions Variables Enumerations Enumerator
do_async_static.hpp
1 #ifndef RHESUS_DO_ASYNC_STATIC_H_
2 #define RHESUS_DO_ASYNC_STATIC_H_
3 
4 #include "RhesusTask.h"
5 
6 namespace Rhesus
7 {
8 namespace Toolkit
9 {
10 namespace Tasks
11 {
12  typedef INT32 (*AsyncMethodFuncPtr)(UINT32 p0, UINT32 p1, UINT32 p2, UINT32 p3, UINT32 p4, UINT32 p5,
13  UINT32 p6, UINT32 p7);
14 
15  typedef void (*AsyncCallbackFuncPtr)(INT32 retCode);
16 
17  class do_async_static
18  {
19  public:
20  static INT32 AsyncMethodWrapper(UINT32 p0, UINT32 p1, UINT32 p2, UINT32 p3, UINT32 p4, UINT32 p5,
21  UINT32 p6, UINT32 p7, UINT32 p8)
22  {
23  do_async_static* instance = reinterpret_cast<do_async_static*>(p0);
24 
25  if(instance->m_asyncFunc == NULL) return -1;
26 
27  INT32 ret = instance->m_asyncFunc(p1, p2, p3, p4, p5, p6, p7, p8);
28 
29  if(instance->m_asyncCallback != NULL)
30  instance->m_asyncCallback(ret);
31 
32  return 0;
33  }
34 
35  do_async_static(AsyncMethodFuncPtr asyncFunc, AsyncCallbackFuncPtr callback, 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))
38  {
39  m_asyncTask.Start((UINT32)this, p0, p1, p2, p3, p4, p5, p6, p7);
40 
41  m_asyncFunc = asyncFunc;
42  m_asyncCallback = callback;
43  }
44 
45  private:
46  RhesusTask& m_asyncTask;
47 
48  AsyncMethodFuncPtr m_asyncFunc;
49  AsyncCallbackFuncPtr m_asyncCallback;
50  };
51 }
52 }
53 }
54 
55 #endif