server_wrap_mt_common.h 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701
  1. #define FUNC0R(m_r,m_type)\
  2. virtual m_r m_type() { \
  3. if (Thread::get_caller_ID()!=server_thread) {\
  4. m_r ret;\
  5. command_queue.push_and_ret( server_name, &ServerName::m_type,&ret);\
  6. SYNC_DEBUG\
  7. return ret;\
  8. } else {\
  9. return server_name->m_type();\
  10. }\
  11. }
  12. #define FUNCRID(m_type)\
  13. int m_type##allocn() {\
  14. for(int i=0;i<m_type##_pool_max_size;i++) {\
  15. m_type##_id_pool.push_back( server_name->m_type##_create() );\
  16. }\
  17. return 0;\
  18. }\
  19. void m_type##_free_cached_ids() {\
  20. while (m_type##_id_pool.size()) {\
  21. free(m_type##_id_pool.front()->get());\
  22. m_type##_id_pool.pop_front();\
  23. }\
  24. }\
  25. virtual RID m_type##_create() { \
  26. if (Thread::get_caller_ID()!=server_thread) {\
  27. RID rid;\
  28. alloc_mutex->lock();\
  29. if (m_type##_id_pool.size()==0) {\
  30. int ret;\
  31. command_queue.push_and_ret( this, &ServerNameWrapMT::m_type##allocn,&ret);\
  32. }\
  33. rid=m_type##_id_pool.front()->get();\
  34. m_type##_id_pool.pop_front();\
  35. alloc_mutex->unlock();\
  36. return rid;\
  37. } else {\
  38. return server_name->m_type##_create();\
  39. }\
  40. }
  41. #define FUNC1RID(m_type,m_arg1)\
  42. int m_type##allocn() {\
  43. for(int i=0;i<m_type##_pool_max_size;i++) {\
  44. m_type##_id_pool.push_back( server_name->m_type##_create() );\
  45. }\
  46. return 0;\
  47. }\
  48. void m_type##_free_cached_ids() {\
  49. while (m_type##_id_pool.size()) {\
  50. free(m_type##_id_pool.front()->get());\
  51. m_type##_id_pool.pop_front();\
  52. }\
  53. }\
  54. virtual RID m_type##_create(m_arg1 p1) { \
  55. if (Thread::get_caller_ID()!=server_thread) {\
  56. RID rid;\
  57. alloc_mutex->lock();\
  58. if (m_type##_id_pool.size()==0) {\
  59. int ret;\
  60. command_queue.push_and_ret( this, &ServerNameWrapMT::m_type##allocn,p1,&ret);\
  61. }\
  62. rid=m_type##_id_pool.front()->get();\
  63. m_type##_id_pool.pop_front();\
  64. alloc_mutex->unlock();\
  65. return rid;\
  66. } else {\
  67. return server_name->m_type##_create(p1);\
  68. }\
  69. }
  70. #define FUNC2RID(m_type,m_arg1,m_arg2)\
  71. int m_type##allocn() {\
  72. for(int i=0;i<m_type##_pool_max_size;i++) {\
  73. m_type##_id_pool.push_back( server_name->m_type##_create() );\
  74. }\
  75. return 0;\
  76. }\
  77. void m_type##_free_cached_ids() {\
  78. while (m_type##_id_pool.size()) {\
  79. free(m_type##_id_pool.front()->get());\
  80. m_type##_id_pool.pop_front();\
  81. }\
  82. }\
  83. virtual RID m_type##_create(m_arg1 p1,m_arg2 p2) { \
  84. if (Thread::get_caller_ID()!=server_thread) {\
  85. RID rid;\
  86. alloc_mutex->lock();\
  87. if (m_type##_id_pool.size()==0) {\
  88. int ret;\
  89. command_queue.push_and_ret( this, &ServerNameWrapMT::m_type##allocn,p1,p2,&ret);\
  90. }\
  91. rid=m_type##_id_pool.front()->get();\
  92. m_type##_id_pool.pop_front();\
  93. alloc_mutex->unlock();\
  94. return rid;\
  95. } else {\
  96. return server_name->m_type##_create(p1,p2);\
  97. }\
  98. }
  99. #define FUNC3RID(m_type,m_arg1,m_arg2,m_arg3)\
  100. int m_type##allocn() {\
  101. for(int i=0;i<m_type##_pool_max_size;i++) {\
  102. m_type##_id_pool.push_back( server_name->m_type##_create() );\
  103. }\
  104. return 0;\
  105. }\
  106. void m_type##_free_cached_ids() {\
  107. while (m_type##_id_pool.size()) {\
  108. free(m_type##_id_pool.front()->get());\
  109. m_type##_id_pool.pop_front();\
  110. }\
  111. }\
  112. virtual RID m_type##_create(m_arg1 p1,m_arg2 p2,m_arg3 p3) { \
  113. if (Thread::get_caller_ID()!=server_thread) {\
  114. RID rid;\
  115. alloc_mutex->lock();\
  116. if (m_type##_id_pool.size()==0) {\
  117. int ret;\
  118. command_queue.push_and_ret( this, &ServerNameWrapMT::m_type##allocn,p1,p2,p3,&ret);\
  119. }\
  120. rid=m_type##_id_pool.front()->get();\
  121. m_type##_id_pool.pop_front();\
  122. alloc_mutex->unlock();\
  123. return rid;\
  124. } else {\
  125. return server_name->m_type##_create(p1,p2,p3);\
  126. }\
  127. }
  128. #define FUNC4RID(m_type,m_arg1,m_arg2,m_arg3,m_arg4)\
  129. int m_type##allocn() {\
  130. for(int i=0;i<m_type##_pool_max_size;i++) {\
  131. m_type##_id_pool.push_back( server_name->m_type##_create() );\
  132. }\
  133. return 0;\
  134. }\
  135. void m_type##_free_cached_ids() {\
  136. while (m_type##_id_pool.size()) {\
  137. free(m_type##_id_pool.front()->get());\
  138. m_type##_id_pool.pop_front();\
  139. }\
  140. }\
  141. virtual RID m_type##_create(m_arg1 p1,m_arg2 p2,m_arg3 p3,m_arg4 p4) { \
  142. if (Thread::get_caller_ID()!=server_thread) {\
  143. RID rid;\
  144. alloc_mutex->lock();\
  145. if (m_type##_id_pool.size()==0) {\
  146. int ret;\
  147. command_queue.push_and_ret( this, &ServerNameWrapMT::m_type##allocn,p1,p2,p3,p4,&ret);\
  148. }\
  149. rid=m_type##_id_pool.front()->get();\
  150. m_type##_id_pool.pop_front();\
  151. alloc_mutex->unlock();\
  152. return rid;\
  153. } else {\
  154. return server_name->m_type##_create(p1,p2,p3,p4);\
  155. }\
  156. }
  157. #define FUNC5RID(m_type,m_arg1,m_arg2,m_arg3,m_arg4,m_arg5)\
  158. int m_type##allocn() {\
  159. for(int i=0;i<m_type##_pool_max_size;i++) {\
  160. m_type##_id_pool.push_back( server_name->m_type##_create() );\
  161. }\
  162. return 0;\
  163. }\
  164. void m_type##_free_cached_ids() {\
  165. while (m_type##_id_pool.size()) {\
  166. free(m_type##_id_pool.front()->get());\
  167. m_type##_id_pool.pop_front();\
  168. }\
  169. }\
  170. virtual RID m_type##_create(m_arg1 p1,m_arg2 p2,m_arg3 p3,m_arg4 p4,m_arg5 p5) { \
  171. if (Thread::get_caller_ID()!=server_thread) {\
  172. RID rid;\
  173. alloc_mutex->lock();\
  174. if (m_type##_id_pool.size()==0) {\
  175. int ret;\
  176. command_queue.push_and_ret( this, &ServerNameWrapMT::m_type##allocn,p1,p2,p3,p4,p5,&ret);\
  177. }\
  178. rid=m_type##_id_pool.front()->get();\
  179. m_type##_id_pool.pop_front();\
  180. alloc_mutex->unlock();\
  181. return rid;\
  182. } else {\
  183. return server_name->m_type##_create(p1,p2,p3,p4,p5);\
  184. }\
  185. }
  186. #define FUNC0RC(m_r,m_type)\
  187. virtual m_r m_type() const { \
  188. if (Thread::get_caller_ID()!=server_thread) {\
  189. m_r ret;\
  190. command_queue.push_and_ret( server_name, &ServerName::m_type,&ret);\
  191. SYNC_DEBUG\
  192. return ret;\
  193. } else {\
  194. return server_name->m_type();\
  195. }\
  196. }
  197. #define FUNC0(m_type)\
  198. virtual void m_type() { \
  199. if (Thread::get_caller_ID()!=server_thread) {\
  200. command_queue.push( server_name, &ServerName::m_type);\
  201. } else {\
  202. server_name->m_type();\
  203. }\
  204. }
  205. #define FUNC0C(m_type)\
  206. virtual void m_type() const { \
  207. if (Thread::get_caller_ID()!=server_thread) {\
  208. command_queue.push( server_name, &ServerName::m_type);\
  209. } else {\
  210. server_name->m_type();\
  211. }\
  212. }
  213. #define FUNC0S(m_type)\
  214. virtual void m_type() { \
  215. if (Thread::get_caller_ID()!=server_thread) {\
  216. command_queue.push_and_sync( server_name, &ServerName::m_type);\
  217. } else {\
  218. server_name->m_type();\
  219. }\
  220. }
  221. #define FUNC0SC(m_type)\
  222. virtual void m_type() const { \
  223. if (Thread::get_caller_ID()!=server_thread) {\
  224. command_queue.push_and_sync( server_name, &ServerName::m_type);\
  225. } else {\
  226. server_name->m_type();\
  227. }\
  228. }
  229. ///////////////////////////////////////////////
  230. #define FUNC1R(m_r,m_type,m_arg1)\
  231. virtual m_r m_type(m_arg1 p1) { \
  232. if (Thread::get_caller_ID()!=server_thread) {\
  233. m_r ret;\
  234. command_queue.push_and_ret( server_name, &ServerName::m_type,p1,&ret);\
  235. SYNC_DEBUG\
  236. return ret;\
  237. } else {\
  238. return server_name->m_type(p1);\
  239. }\
  240. }
  241. #define FUNC1RC(m_r,m_type,m_arg1)\
  242. virtual m_r m_type(m_arg1 p1) const { \
  243. if (Thread::get_caller_ID()!=server_thread) {\
  244. m_r ret;\
  245. command_queue.push_and_ret( server_name, &ServerName::m_type,p1,&ret);\
  246. SYNC_DEBUG\
  247. return ret;\
  248. } else {\
  249. return server_name->m_type(p1);\
  250. }\
  251. }
  252. #define FUNC1S(m_type,m_arg1)\
  253. virtual void m_type(m_arg1 p1) { \
  254. if (Thread::get_caller_ID()!=server_thread) {\
  255. command_queue.push_and_sync( server_name, &ServerName::m_type,p1);\
  256. } else {\
  257. server_name->m_type(p1);\
  258. }\
  259. }
  260. #define FUNC1SC(m_type,m_arg1)\
  261. virtual void m_type(m_arg1 p1) const { \
  262. if (Thread::get_caller_ID()!=server_thread) {\
  263. command_queue.push_and_sync( server_name, &ServerName::m_type,p1);\
  264. } else {\
  265. server_name->m_type(p1);\
  266. }\
  267. }
  268. #define FUNC1(m_type,m_arg1)\
  269. virtual void m_type(m_arg1 p1) { \
  270. if (Thread::get_caller_ID()!=server_thread) {\
  271. command_queue.push( server_name, &ServerName::m_type,p1);\
  272. } else {\
  273. server_name->m_type(p1);\
  274. }\
  275. }
  276. #define FUNC1C(m_type,m_arg1)\
  277. virtual void m_type(m_arg1 p1) const { \
  278. if (Thread::get_caller_ID()!=server_thread) {\
  279. command_queue.push( server_name, &ServerName::m_type,p1);\
  280. } else {\
  281. server_name->m_type(p1);\
  282. }\
  283. }
  284. #define FUNC2R(m_r,m_type,m_arg1, m_arg2)\
  285. virtual m_r m_type(m_arg1 p1, m_arg2 p2) { \
  286. if (Thread::get_caller_ID()!=server_thread) {\
  287. m_r ret;\
  288. command_queue.push_and_ret( server_name, &ServerName::m_type,p1, p2,&ret);\
  289. SYNC_DEBUG\
  290. return ret;\
  291. } else {\
  292. return server_name->m_type(p1, p2);\
  293. }\
  294. }
  295. #define FUNC2RC(m_r,m_type,m_arg1, m_arg2)\
  296. virtual m_r m_type(m_arg1 p1, m_arg2 p2) const { \
  297. if (Thread::get_caller_ID()!=server_thread) {\
  298. m_r ret;\
  299. command_queue.push_and_ret( server_name, &ServerName::m_type,p1, p2,&ret);\
  300. SYNC_DEBUG\
  301. return ret;\
  302. } else {\
  303. return server_name->m_type(p1, p2);\
  304. }\
  305. }
  306. #define FUNC2S(m_type,m_arg1, m_arg2)\
  307. virtual void m_type(m_arg1 p1, m_arg2 p2) { \
  308. if (Thread::get_caller_ID()!=server_thread) {\
  309. command_queue.push_and_sync( server_name, &ServerName::m_type,p1, p2);\
  310. } else {\
  311. server_name->m_type(p1, p2);\
  312. }\
  313. }
  314. #define FUNC2SC(m_type,m_arg1, m_arg2)\
  315. virtual void m_type(m_arg1 p1, m_arg2 p2) const { \
  316. if (Thread::get_caller_ID()!=server_thread) {\
  317. command_queue.push_and_sync( server_name, &ServerName::m_type,p1, p2);\
  318. } else {\
  319. server_name->m_type(p1, p2);\
  320. }\
  321. }
  322. #define FUNC2(m_type,m_arg1, m_arg2)\
  323. virtual void m_type(m_arg1 p1, m_arg2 p2) { \
  324. if (Thread::get_caller_ID()!=server_thread) {\
  325. command_queue.push( server_name, &ServerName::m_type,p1, p2);\
  326. } else {\
  327. server_name->m_type(p1, p2);\
  328. }\
  329. }
  330. #define FUNC2C(m_type,m_arg1, m_arg2)\
  331. virtual void m_type(m_arg1 p1, m_arg2 p2) const { \
  332. if (Thread::get_caller_ID()!=server_thread) {\
  333. command_queue.push( server_name, &ServerName::m_type,p1, p2);\
  334. } else {\
  335. server_name->m_type(p1, p2);\
  336. }\
  337. }
  338. #define FUNC3R(m_r,m_type,m_arg1, m_arg2, m_arg3)\
  339. virtual m_r m_type(m_arg1 p1, m_arg2 p2, m_arg3 p3) { \
  340. if (Thread::get_caller_ID()!=server_thread) {\
  341. m_r ret;\
  342. command_queue.push_and_ret( server_name, &ServerName::m_type,p1, p2, p3,&ret);\
  343. SYNC_DEBUG\
  344. return ret;\
  345. } else {\
  346. return server_name->m_type(p1, p2, p3);\
  347. }\
  348. }
  349. #define FUNC3RC(m_r,m_type,m_arg1, m_arg2, m_arg3)\
  350. virtual m_r m_type(m_arg1 p1, m_arg2 p2, m_arg3 p3) const { \
  351. if (Thread::get_caller_ID()!=server_thread) {\
  352. m_r ret;\
  353. command_queue.push_and_ret( server_name, &ServerName::m_type,p1, p2, p3,&ret);\
  354. return ret;\
  355. } else {\
  356. return server_name->m_type(p1, p2, p3);\
  357. }\
  358. }
  359. #define FUNC3S(m_type,m_arg1, m_arg2, m_arg3)\
  360. virtual void m_type(m_arg1 p1, m_arg2 p2, m_arg3 p3) { \
  361. if (Thread::get_caller_ID()!=server_thread) {\
  362. command_queue.push_and_sync( server_name, &ServerName::m_type,p1, p2, p3);\
  363. } else {\
  364. server_name->m_type(p1, p2, p3);\
  365. }\
  366. }
  367. #define FUNC3SC(m_type,m_arg1, m_arg2, m_arg3)\
  368. virtual void m_type(m_arg1 p1, m_arg2 p2, m_arg3 p3) const { \
  369. if (Thread::get_caller_ID()!=server_thread) {\
  370. command_queue.push_and_sync( server_name, &ServerName::m_type,p1, p2, p3);\
  371. } else {\
  372. server_name->m_type(p1, p2, p3);\
  373. }\
  374. }
  375. #define FUNC3(m_type,m_arg1, m_arg2, m_arg3)\
  376. virtual void m_type(m_arg1 p1, m_arg2 p2, m_arg3 p3) { \
  377. if (Thread::get_caller_ID()!=server_thread) {\
  378. command_queue.push( server_name, &ServerName::m_type,p1, p2, p3);\
  379. } else {\
  380. server_name->m_type(p1, p2, p3);\
  381. }\
  382. }
  383. #define FUNC3C(m_type,m_arg1, m_arg2, m_arg3)\
  384. virtual void m_type(m_arg1 p1, m_arg2 p2, m_arg3 p3) const { \
  385. if (Thread::get_caller_ID()!=server_thread) {\
  386. command_queue.push( server_name, &ServerName::m_type,p1, p2, p3);\
  387. } else {\
  388. server_name->m_type(p1, p2, p3);\
  389. }\
  390. }
  391. #define FUNC4R(m_r,m_type,m_arg1, m_arg2, m_arg3, m_arg4)\
  392. virtual m_r m_type(m_arg1 p1, m_arg2 p2, m_arg3 p3, m_arg4 p4) { \
  393. if (Thread::get_caller_ID()!=server_thread) {\
  394. m_r ret;\
  395. command_queue.push_and_ret( server_name, &ServerName::m_type,p1, p2, p3, p4,&ret);\
  396. SYNC_DEBUG\
  397. return ret;\
  398. } else {\
  399. return server_name->m_type(p1, p2, p3, p4);\
  400. }\
  401. }
  402. #define FUNC4RC(m_r,m_type,m_arg1, m_arg2, m_arg3, m_arg4)\
  403. virtual m_r m_type(m_arg1 p1, m_arg2 p2, m_arg3 p3, m_arg4 p4) const { \
  404. if (Thread::get_caller_ID()!=server_thread) {\
  405. m_r ret;\
  406. command_queue.push_and_ret( server_name, &ServerName::m_type,p1, p2, p3, p4,&ret);\
  407. SYNC_DEBUG\
  408. return ret;\
  409. } else {\
  410. return server_name->m_type(p1, p2, p3, p4);\
  411. }\
  412. }
  413. #define FUNC4S(m_type,m_arg1, m_arg2, m_arg3, m_arg4)\
  414. virtual void m_type(m_arg1 p1, m_arg2 p2, m_arg3 p3, m_arg4 p4) { \
  415. if (Thread::get_caller_ID()!=server_thread) {\
  416. command_queue.push_and_sync( server_name, &ServerName::m_type,p1, p2, p3, p4);\
  417. } else {\
  418. server_name->m_type(p1, p2, p3, p4);\
  419. }\
  420. }
  421. #define FUNC4SC(m_type,m_arg1, m_arg2, m_arg3, m_arg4)\
  422. virtual void m_type(m_arg1 p1, m_arg2 p2, m_arg3 p3, m_arg4 p4) const { \
  423. if (Thread::get_caller_ID()!=server_thread) {\
  424. command_queue.push_and_sync( server_name, &ServerName::m_type,p1, p2, p3, p4);\
  425. } else {\
  426. server_name->m_type(p1, p2, p3, p4);\
  427. }\
  428. }
  429. #define FUNC4(m_type,m_arg1, m_arg2, m_arg3, m_arg4)\
  430. virtual void m_type(m_arg1 p1, m_arg2 p2, m_arg3 p3, m_arg4 p4) { \
  431. if (Thread::get_caller_ID()!=server_thread) {\
  432. command_queue.push( server_name, &ServerName::m_type,p1, p2, p3, p4);\
  433. } else {\
  434. server_name->m_type(p1, p2, p3, p4);\
  435. }\
  436. }
  437. #define FUNC4C(m_type,m_arg1, m_arg2, m_arg3, m_arg4)\
  438. virtual void m_type(m_arg1 p1, m_arg2 p2, m_arg3 p3, m_arg4 p4) const { \
  439. if (Thread::get_caller_ID()!=server_thread) {\
  440. command_queue.push( server_name, &ServerName::m_type,p1, p2, p3, p4);\
  441. } else {\
  442. server_name->m_type(p1, p2, p3, p4);\
  443. }\
  444. }
  445. #define FUNC5R(m_r,m_type,m_arg1, m_arg2, m_arg3, m_arg4, m_arg5)\
  446. virtual m_r m_type(m_arg1 p1, m_arg2 p2, m_arg3 p3, m_arg4 p4, m_arg5 p5) { \
  447. if (Thread::get_caller_ID()!=server_thread) {\
  448. m_r ret;\
  449. command_queue.push_and_ret( server_name, &ServerName::m_type,p1, p2, p3, p4, p5,&ret);\
  450. SYNC_DEBUG\
  451. return ret;\
  452. } else {\
  453. return server_name->m_type(p1, p2, p3, p4, p5);\
  454. }\
  455. }
  456. #define FUNC5RC(m_r,m_type,m_arg1, m_arg2, m_arg3, m_arg4, m_arg5)\
  457. virtual m_r m_type(m_arg1 p1, m_arg2 p2, m_arg3 p3, m_arg4 p4, m_arg5 p5) const { \
  458. if (Thread::get_caller_ID()!=server_thread) {\
  459. m_r ret;\
  460. command_queue.push_and_ret( server_name, &ServerName::m_type,p1, p2, p3, p4, p5,&ret);\
  461. SYNC_DEBUG\
  462. return ret;\
  463. } else {\
  464. return server_name->m_type(p1, p2, p3, p4, p5);\
  465. }\
  466. }
  467. #define FUNC5S(m_type,m_arg1, m_arg2, m_arg3, m_arg4, m_arg5)\
  468. virtual void m_type(m_arg1 p1, m_arg2 p2, m_arg3 p3, m_arg4 p4, m_arg5 p5) { \
  469. if (Thread::get_caller_ID()!=server_thread) {\
  470. command_queue.push_and_sync( server_name, &ServerName::m_type,p1, p2, p3, p4, p5);\
  471. } else {\
  472. server_name->m_type(p1, p2, p3, p4, p5);\
  473. }\
  474. }
  475. #define FUNC5SC(m_type,m_arg1, m_arg2, m_arg3, m_arg4, m_arg5)\
  476. virtual void m_type(m_arg1 p1, m_arg2 p2, m_arg3 p3, m_arg4 p4, m_arg5 p5) const { \
  477. if (Thread::get_caller_ID()!=server_thread) {\
  478. command_queue.push_and_sync( server_name, &ServerName::m_type,p1, p2, p3, p4, p5);\
  479. } else {\
  480. server_name->m_type(p1, p2, p3, p4, p5);\
  481. }\
  482. }
  483. #define FUNC5(m_type,m_arg1, m_arg2, m_arg3, m_arg4, m_arg5)\
  484. virtual void m_type(m_arg1 p1, m_arg2 p2, m_arg3 p3, m_arg4 p4, m_arg5 p5) { \
  485. if (Thread::get_caller_ID()!=server_thread) {\
  486. command_queue.push( server_name, &ServerName::m_type,p1, p2, p3, p4, p5);\
  487. } else {\
  488. server_name->m_type(p1, p2, p3, p4, p5);\
  489. }\
  490. }
  491. #define FUNC5C(m_type,m_arg1, m_arg2, m_arg3, m_arg4, m_arg5)\
  492. virtual void m_type(m_arg1 p1, m_arg2 p2, m_arg3 p3, m_arg4 p4, m_arg5 p5) const { \
  493. if (Thread::get_caller_ID()!=server_thread) {\
  494. command_queue.push( server_name, &ServerName::m_type,p1, p2, p3, p4, p5);\
  495. } else {\
  496. server_name->m_type(p1, p2, p3, p4, p5);\
  497. }\
  498. }
  499. #define FUNC6R(m_r,m_type,m_arg1, m_arg2, m_arg3, m_arg4, m_arg5, m_arg6)\
  500. virtual m_r m_type(m_arg1 p1, m_arg2 p2, m_arg3 p3, m_arg4 p4, m_arg5 p5, m_arg6 p6) { \
  501. if (Thread::get_caller_ID()!=server_thread) {\
  502. m_r ret;\
  503. command_queue.push_and_ret( server_name, &ServerName::m_type,p1, p2, p3, p4, p5, p6,&ret);\
  504. SYNC_DEBUG\
  505. return ret;\
  506. } else {\
  507. return server_name->m_type(p1, p2, p3, p4, p5, p6);\
  508. }\
  509. }
  510. #define FUNC6RC(m_r,m_type,m_arg1, m_arg2, m_arg3, m_arg4, m_arg5, m_arg6)\
  511. virtual m_r m_type(m_arg1 p1, m_arg2 p2, m_arg3 p3, m_arg4 p4, m_arg5 p5, m_arg6 p6) const { \
  512. if (Thread::get_caller_ID()!=server_thread) {\
  513. m_r ret;\
  514. command_queue.push_and_ret( server_name, &ServerName::m_type,p1, p2, p3, p4, p5, p6,&ret);\
  515. return ret;\
  516. } else {\
  517. return server_name->m_type(p1, p2, p3, p4, p5, p6);\
  518. }\
  519. }
  520. #define FUNC6S(m_type,m_arg1, m_arg2, m_arg3, m_arg4, m_arg5, m_arg6)\
  521. virtual void m_type(m_arg1 p1, m_arg2 p2, m_arg3 p3, m_arg4 p4, m_arg5 p5, m_arg6 p6) { \
  522. if (Thread::get_caller_ID()!=server_thread) {\
  523. command_queue.push_and_sync( server_name, &ServerName::m_type,p1, p2, p3, p4, p5, p6);\
  524. } else {\
  525. server_name->m_type(p1, p2, p3, p4, p5, p6);\
  526. }\
  527. }
  528. #define FUNC6SC(m_type,m_arg1, m_arg2, m_arg3, m_arg4, m_arg5, m_arg6)\
  529. virtual void m_type(m_arg1 p1, m_arg2 p2, m_arg3 p3, m_arg4 p4, m_arg5 p5, m_arg6 p6) const { \
  530. if (Thread::get_caller_ID()!=server_thread) {\
  531. command_queue.push_and_sync( server_name, &ServerName::m_type,p1, p2, p3, p4, p5, p6);\
  532. } else {\
  533. server_name->m_type(p1, p2, p3, p4, p5, p6);\
  534. }\
  535. }
  536. #define FUNC6(m_type,m_arg1, m_arg2, m_arg3, m_arg4, m_arg5, m_arg6)\
  537. virtual void m_type(m_arg1 p1, m_arg2 p2, m_arg3 p3, m_arg4 p4, m_arg5 p5, m_arg6 p6) { \
  538. if (Thread::get_caller_ID()!=server_thread) {\
  539. command_queue.push( server_name, &ServerName::m_type,p1, p2, p3, p4, p5, p6);\
  540. } else {\
  541. server_name->m_type(p1, p2, p3, p4, p5, p6);\
  542. }\
  543. }
  544. #define FUNC6C(m_type,m_arg1, m_arg2, m_arg3, m_arg4, m_arg5, m_arg6)\
  545. virtual void m_type(m_arg1 p1, m_arg2 p2, m_arg3 p3, m_arg4 p4, m_arg5 p5, m_arg6 p6) const { \
  546. if (Thread::get_caller_ID()!=server_thread) {\
  547. command_queue.push( server_name, &ServerName::m_type,p1, p2, p3, p4, p5, p6);\
  548. } else {\
  549. server_name->m_type(p1, p2, p3, p4, p5, p6);\
  550. }\
  551. }
  552. #define FUNC7R(m_r,m_type,m_arg1, m_arg2, m_arg3, m_arg4, m_arg5, m_arg6, m_arg7)\
  553. virtual m_r m_type(m_arg1 p1, m_arg2 p2, m_arg3 p3, m_arg4 p4, m_arg5 p5, m_arg6 p6, m_arg7 p7) { \
  554. if (Thread::get_caller_ID()!=server_thread) {\
  555. m_r ret;\
  556. command_queue.push_and_ret( server_name, &ServerName::m_type,p1, p2, p3, p4, p5, p6, p7,&ret);\
  557. SYNC_DEBUG\
  558. return ret;\
  559. } else {\
  560. return server_name->m_type(p1, p2, p3, p4, p5, p6, p7);\
  561. }\
  562. }
  563. #define FUNC7RC(m_r,m_type,m_arg1, m_arg2, m_arg3, m_arg4, m_arg5, m_arg6, m_arg7)\
  564. virtual m_r m_type(m_arg1 p1, m_arg2 p2, m_arg3 p3, m_arg4 p4, m_arg5 p5, m_arg6 p6, m_arg7 p7) const { \
  565. if (Thread::get_caller_ID()!=server_thread) {\
  566. m_r ret;\
  567. command_queue.push_and_ret( server_name, &ServerName::m_type,p1, p2, p3, p4, p5, p6, p7,&ret);\
  568. SYNC_DEBUG\
  569. return ret;\
  570. } else {\
  571. return server_name->m_type(p1, p2, p3, p4, p5, p6, p7);\
  572. }\
  573. }
  574. #define FUNC7S(m_type,m_arg1, m_arg2, m_arg3, m_arg4, m_arg5, m_arg6, m_arg7)\
  575. virtual void m_type(m_arg1 p1, m_arg2 p2, m_arg3 p3, m_arg4 p4, m_arg5 p5, m_arg6 p6, m_arg7 p7) { \
  576. if (Thread::get_caller_ID()!=server_thread) {\
  577. command_queue.push_and_sync( server_name, &ServerName::m_type,p1, p2, p3, p4, p5, p6, p7);\
  578. } else {\
  579. server_name->m_type(p1, p2, p3, p4, p5, p6, p7);\
  580. }\
  581. }
  582. #define FUNC7SC(m_type,m_arg1, m_arg2, m_arg3, m_arg4, m_arg5, m_arg6, m_arg7)\
  583. virtual void m_type(m_arg1 p1, m_arg2 p2, m_arg3 p3, m_arg4 p4, m_arg5 p5, m_arg6 p6, m_arg7 p7) const { \
  584. if (Thread::get_caller_ID()!=server_thread) {\
  585. command_queue.push_and_sync( server_name, &ServerName::m_type,p1, p2, p3, p4, p5, p6, p7);\
  586. } else {\
  587. server_name->m_type(p1, p2, p3, p4, p5, p6, p7);\
  588. }\
  589. }
  590. #define FUNC7(m_type,m_arg1, m_arg2, m_arg3, m_arg4, m_arg5, m_arg6, m_arg7)\
  591. virtual void m_type(m_arg1 p1, m_arg2 p2, m_arg3 p3, m_arg4 p4, m_arg5 p5, m_arg6 p6, m_arg7 p7) { \
  592. if (Thread::get_caller_ID()!=server_thread) {\
  593. command_queue.push( server_name, &ServerName::m_type,p1, p2, p3, p4, p5, p6, p7);\
  594. } else {\
  595. server_name->m_type(p1, p2, p3, p4, p5, p6, p7);\
  596. }\
  597. }
  598. #define FUNC7C(m_type,m_arg1, m_arg2, m_arg3, m_arg4, m_arg5, m_arg6, m_arg7)\
  599. virtual void m_type(m_arg1 p1, m_arg2 p2, m_arg3 p3, m_arg4 p4, m_arg5 p5, m_arg6 p6, m_arg7 p7) const { \
  600. if (Thread::get_caller_ID()!=server_thread) {\
  601. command_queue.push( server_name, &ServerName::m_type,p1, p2, p3, p4, p5, p6, p7);\
  602. } else {\
  603. server_name->m_type(p1, p2, p3, p4, p5, p6, p7);\
  604. }\
  605. }