ProcessPolicy.h
上传用户:smh666999
上传日期:2007-01-14
资源大小:553k
文件大小:2k
源码类别:

BREW编程

开发平台:

Visual C++

  1. #ifndef _PROC_PLCY_h_
  2. #define _PROC_PLCY_h_
  3. struct ConnectionPolicy
  4. {
  5. static bool isReusable()
  6. {
  7. return true;
  8. }
  9. };
  10. template <class Y, class F>
  11. struct pkCBK0
  12. {
  13. void setCallback(Y* y, F fx)
  14. {
  15. y_ = y;
  16. f_ = fx;
  17. }
  18. static void callbackHandler(void* v)
  19. {
  20. typedef pkCBK0<Y,F> pk;
  21. pk* z = static_cast<pk*>(v);
  22. F fx = z->f_;
  23. Y* y = z->y_;
  24. (*y.*fx)();
  25. }
  26. Y* y_;
  27. F f_;
  28. };
  29. template <class Y, class F>
  30. struct pkCBK1
  31. {
  32. void setCallback(Y* y, F fx)
  33. {
  34. y_ = y;
  35. f_ = fx;
  36. }
  37. template <class Z>
  38. static void callbackHandler(void* v, Z me)
  39. {
  40. typedef pkCBK1<Y,F> pk;
  41. pk* z = static_cast<pk*>(v);
  42. F fx = z->f_;
  43. Y* y = z->y_;
  44. (*y.*fx)(me);
  45. }
  46. Y* y_;
  47. F f_;
  48. };
  49. template <class Y>
  50. struct pkAEECBK 
  51. {
  52. typedef void (Y::*FNX)( );
  53. void setCallback(Y* y, FNX fx, IShell* shell)
  54. {
  55. y_ = y;
  56. f_ = fx;
  57. shell_ = shell;
  58. }
  59. static void callbackHandler(void* v)
  60. {
  61. typedef pkAEECBK<Y> pk;
  62. pk* z = static_cast<pk*>(v);
  63. typedef void (Y::*FNX)();
  64. FNX fx = z->f_;
  65. Y* y = z->y_;
  66. (*y.*fx)();
  67. }
  68. void operator()()
  69. {
  70. cb_.pfnNotify = (PFNNOTIFY)callbackHandler; 
  71. cb_.pNotifyData = this; 
  72. cb_.pfnCancel = NULL; 
  73. ISHELL_Resume(shell_,&cb_);
  74. }
  75. template <class U, class R>
  76. static U& initCbk(R* rr, Y* me, FNX  onEndCbk, IShell* shell, Type2Type<U>  )
  77. {
  78. U* prp = static_cast<U*>(rr->getRegistered(U::getID()));
  79. if (!prp)
  80. prp = new U;
  81. U& pr = *prp;
  82. pr.setCallback(me, onEndCbk, shell);
  83. rr->registerResource(prp);
  84. return pr;
  85. }
  86. AEECallback cb_;
  87. Y* y_;
  88. FNX f_;
  89. IShell* shell_;
  90. };
  91. #endif