virtualx-engine/servers/server_wrap_mt_common.h
Rémi Verschelde d8223ffa75 Welcome in 2017, dear changelog reader!
That year should bring the long-awaited OpenGL ES 3.0 compatible renderer
with state-of-the-art rendering techniques tuned to work as low as middle
end handheld devices - without compromising with the possibilities given
for higher end desktop games of course. Great times ahead for the Godot
community and the gamers that will play our games!

(cherry picked from commit c7bc44d5ad)
2017-01-12 19:15:30 +01:00

789 lines
25 KiB
C++

/*************************************************************************/
/* server_wrap_mt_common.h */
/*************************************************************************/
/* This file is part of: */
/* GODOT ENGINE */
/* http://www.godotengine.org */
/*************************************************************************/
/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */
/* */
/* Permission is hereby granted, free of charge, to any person obtaining */
/* a copy of this software and associated documentation files (the */
/* "Software"), to deal in the Software without restriction, including */
/* without limitation the rights to use, copy, modify, merge, publish, */
/* distribute, sublicense, and/or sell copies of the Software, and to */
/* permit persons to whom the Software is furnished to do so, subject to */
/* the following conditions: */
/* */
/* The above copyright notice and this permission notice shall be */
/* included in all copies or substantial portions of the Software. */
/* */
/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/*************************************************************************/
#define FUNC0R(m_r,m_type)\
virtual m_r m_type() { \
if (Thread::get_caller_ID()!=server_thread) {\
m_r ret;\
command_queue.push_and_ret( server_name, &ServerName::m_type,&ret);\
SYNC_DEBUG\
return ret;\
} else {\
return server_name->m_type();\
}\
}
#define FUNCRID(m_type)\
int m_type##allocn() {\
for(int i=0;i<m_type##_pool_max_size;i++) {\
m_type##_id_pool.push_back( server_name->m_type##_create() );\
}\
return 0;\
}\
void m_type##_free_cached_ids() {\
while (m_type##_id_pool.size()) {\
free(m_type##_id_pool.front()->get());\
m_type##_id_pool.pop_front();\
}\
}\
virtual RID m_type##_create() { \
if (Thread::get_caller_ID()!=server_thread) {\
RID rid;\
alloc_mutex->lock();\
if (m_type##_id_pool.size()==0) {\
int ret;\
command_queue.push_and_ret( this, &ServerNameWrapMT::m_type##allocn,&ret);\
}\
rid=m_type##_id_pool.front()->get();\
m_type##_id_pool.pop_front();\
alloc_mutex->unlock();\
return rid;\
} else {\
return server_name->m_type##_create();\
}\
}
#define FUNC1RID(m_type,m_arg1)\
int m_type##allocn() {\
for(int i=0;i<m_type##_pool_max_size;i++) {\
m_type##_id_pool.push_back( server_name->m_type##_create() );\
}\
return 0;\
}\
void m_type##_free_cached_ids() {\
while (m_type##_id_pool.size()) {\
free(m_type##_id_pool.front()->get());\
m_type##_id_pool.pop_front();\
}\
}\
virtual RID m_type##_create(m_arg1 p1) { \
if (Thread::get_caller_ID()!=server_thread) {\
RID rid;\
alloc_mutex->lock();\
if (m_type##_id_pool.size()==0) {\
int ret;\
command_queue.push_and_ret( this, &ServerNameWrapMT::m_type##allocn,p1,&ret);\
}\
rid=m_type##_id_pool.front()->get();\
m_type##_id_pool.pop_front();\
alloc_mutex->unlock();\
return rid;\
} else {\
return server_name->m_type##_create(p1);\
}\
}
#define FUNC2RID(m_type,m_arg1,m_arg2)\
int m_type##allocn() {\
for(int i=0;i<m_type##_pool_max_size;i++) {\
m_type##_id_pool.push_back( server_name->m_type##_create() );\
}\
return 0;\
}\
void m_type##_free_cached_ids() {\
while (m_type##_id_pool.size()) {\
free(m_type##_id_pool.front()->get());\
m_type##_id_pool.pop_front();\
}\
}\
virtual RID m_type##_create(m_arg1 p1,m_arg2 p2) { \
if (Thread::get_caller_ID()!=server_thread) {\
RID rid;\
alloc_mutex->lock();\
if (m_type##_id_pool.size()==0) {\
int ret;\
command_queue.push_and_ret( this, &ServerNameWrapMT::m_type##allocn,p1,p2,&ret);\
}\
rid=m_type##_id_pool.front()->get();\
m_type##_id_pool.pop_front();\
alloc_mutex->unlock();\
return rid;\
} else {\
return server_name->m_type##_create(p1,p2);\
}\
}
#define FUNC3RID(m_type,m_arg1,m_arg2,m_arg3)\
int m_type##allocn() {\
for(int i=0;i<m_type##_pool_max_size;i++) {\
m_type##_id_pool.push_back( server_name->m_type##_create() );\
}\
return 0;\
}\
void m_type##_free_cached_ids() {\
while (m_type##_id_pool.size()) {\
free(m_type##_id_pool.front()->get());\
m_type##_id_pool.pop_front();\
}\
}\
virtual RID m_type##_create(m_arg1 p1,m_arg2 p2,m_arg3 p3) { \
if (Thread::get_caller_ID()!=server_thread) {\
RID rid;\
alloc_mutex->lock();\
if (m_type##_id_pool.size()==0) {\
int ret;\
command_queue.push_and_ret( this, &ServerNameWrapMT::m_type##allocn,p1,p2,p3,&ret);\
}\
rid=m_type##_id_pool.front()->get();\
m_type##_id_pool.pop_front();\
alloc_mutex->unlock();\
return rid;\
} else {\
return server_name->m_type##_create(p1,p2,p3);\
}\
}
#define FUNC4RID(m_type,m_arg1,m_arg2,m_arg3,m_arg4)\
int m_type##allocn() {\
for(int i=0;i<m_type##_pool_max_size;i++) {\
m_type##_id_pool.push_back( server_name->m_type##_create() );\
}\
return 0;\
}\
void m_type##_free_cached_ids() {\
while (m_type##_id_pool.size()) {\
free(m_type##_id_pool.front()->get());\
m_type##_id_pool.pop_front();\
}\
}\
virtual RID m_type##_create(m_arg1 p1,m_arg2 p2,m_arg3 p3,m_arg4 p4) { \
if (Thread::get_caller_ID()!=server_thread) {\
RID rid;\
alloc_mutex->lock();\
if (m_type##_id_pool.size()==0) {\
int ret;\
command_queue.push_and_ret( this, &ServerNameWrapMT::m_type##allocn,p1,p2,p3,p4,&ret);\
}\
rid=m_type##_id_pool.front()->get();\
m_type##_id_pool.pop_front();\
alloc_mutex->unlock();\
return rid;\
} else {\
return server_name->m_type##_create(p1,p2,p3,p4);\
}\
}
#define FUNC5RID(m_type,m_arg1,m_arg2,m_arg3,m_arg4,m_arg5)\
int m_type##allocn() {\
for(int i=0;i<m_type##_pool_max_size;i++) {\
m_type##_id_pool.push_back( server_name->m_type##_create() );\
}\
return 0;\
}\
void m_type##_free_cached_ids() {\
while (m_type##_id_pool.size()) {\
free(m_type##_id_pool.front()->get());\
m_type##_id_pool.pop_front();\
}\
}\
virtual RID m_type##_create(m_arg1 p1,m_arg2 p2,m_arg3 p3,m_arg4 p4,m_arg5 p5) { \
if (Thread::get_caller_ID()!=server_thread) {\
RID rid;\
alloc_mutex->lock();\
if (m_type##_id_pool.size()==0) {\
int ret;\
command_queue.push_and_ret( this, &ServerNameWrapMT::m_type##allocn,p1,p2,p3,p4,p5,&ret);\
}\
rid=m_type##_id_pool.front()->get();\
m_type##_id_pool.pop_front();\
alloc_mutex->unlock();\
return rid;\
} else {\
return server_name->m_type##_create(p1,p2,p3,p4,p5);\
}\
}
#define FUNC0RC(m_r,m_type)\
virtual m_r m_type() const { \
if (Thread::get_caller_ID()!=server_thread) {\
m_r ret;\
command_queue.push_and_ret( server_name, &ServerName::m_type,&ret);\
SYNC_DEBUG\
return ret;\
} else {\
return server_name->m_type();\
}\
}
#define FUNC0(m_type)\
virtual void m_type() { \
if (Thread::get_caller_ID()!=server_thread) {\
command_queue.push( server_name, &ServerName::m_type);\
} else {\
server_name->m_type();\
}\
}
#define FUNC0C(m_type)\
virtual void m_type() const { \
if (Thread::get_caller_ID()!=server_thread) {\
command_queue.push( server_name, &ServerName::m_type);\
} else {\
server_name->m_type();\
}\
}
#define FUNC0S(m_type)\
virtual void m_type() { \
if (Thread::get_caller_ID()!=server_thread) {\
command_queue.push_and_sync( server_name, &ServerName::m_type);\
} else {\
server_name->m_type();\
}\
}
#define FUNC0SC(m_type)\
virtual void m_type() const { \
if (Thread::get_caller_ID()!=server_thread) {\
command_queue.push_and_sync( server_name, &ServerName::m_type);\
} else {\
server_name->m_type();\
}\
}
///////////////////////////////////////////////
#define FUNC1R(m_r,m_type,m_arg1)\
virtual m_r m_type(m_arg1 p1) { \
if (Thread::get_caller_ID()!=server_thread) {\
m_r ret;\
command_queue.push_and_ret( server_name, &ServerName::m_type,p1,&ret);\
SYNC_DEBUG\
return ret;\
} else {\
return server_name->m_type(p1);\
}\
}
#define FUNC1RC(m_r,m_type,m_arg1)\
virtual m_r m_type(m_arg1 p1) const { \
if (Thread::get_caller_ID()!=server_thread) {\
m_r ret;\
command_queue.push_and_ret( server_name, &ServerName::m_type,p1,&ret);\
SYNC_DEBUG\
return ret;\
} else {\
return server_name->m_type(p1);\
}\
}
#define FUNC1S(m_type,m_arg1)\
virtual void m_type(m_arg1 p1) { \
if (Thread::get_caller_ID()!=server_thread) {\
command_queue.push_and_sync( server_name, &ServerName::m_type,p1);\
} else {\
server_name->m_type(p1);\
}\
}
#define FUNC1SC(m_type,m_arg1)\
virtual void m_type(m_arg1 p1) const { \
if (Thread::get_caller_ID()!=server_thread) {\
command_queue.push_and_sync( server_name, &ServerName::m_type,p1);\
} else {\
server_name->m_type(p1);\
}\
}
#define FUNC1(m_type,m_arg1)\
virtual void m_type(m_arg1 p1) { \
if (Thread::get_caller_ID()!=server_thread) {\
command_queue.push( server_name, &ServerName::m_type,p1);\
} else {\
server_name->m_type(p1);\
}\
}
#define FUNC1C(m_type,m_arg1)\
virtual void m_type(m_arg1 p1) const { \
if (Thread::get_caller_ID()!=server_thread) {\
command_queue.push( server_name, &ServerName::m_type,p1);\
} else {\
server_name->m_type(p1);\
}\
}
#define FUNC2R(m_r,m_type,m_arg1, m_arg2)\
virtual m_r m_type(m_arg1 p1, m_arg2 p2) { \
if (Thread::get_caller_ID()!=server_thread) {\
m_r ret;\
command_queue.push_and_ret( server_name, &ServerName::m_type,p1, p2,&ret);\
SYNC_DEBUG\
return ret;\
} else {\
return server_name->m_type(p1, p2);\
}\
}
#define FUNC2RC(m_r,m_type,m_arg1, m_arg2)\
virtual m_r m_type(m_arg1 p1, m_arg2 p2) const { \
if (Thread::get_caller_ID()!=server_thread) {\
m_r ret;\
command_queue.push_and_ret( server_name, &ServerName::m_type,p1, p2,&ret);\
SYNC_DEBUG\
return ret;\
} else {\
return server_name->m_type(p1, p2);\
}\
}
#define FUNC2S(m_type,m_arg1, m_arg2)\
virtual void m_type(m_arg1 p1, m_arg2 p2) { \
if (Thread::get_caller_ID()!=server_thread) {\
command_queue.push_and_sync( server_name, &ServerName::m_type,p1, p2);\
} else {\
server_name->m_type(p1, p2);\
}\
}
#define FUNC2SC(m_type,m_arg1, m_arg2)\
virtual void m_type(m_arg1 p1, m_arg2 p2) const { \
if (Thread::get_caller_ID()!=server_thread) {\
command_queue.push_and_sync( server_name, &ServerName::m_type,p1, p2);\
} else {\
server_name->m_type(p1, p2);\
}\
}
#define FUNC2(m_type,m_arg1, m_arg2)\
virtual void m_type(m_arg1 p1, m_arg2 p2) { \
if (Thread::get_caller_ID()!=server_thread) {\
command_queue.push( server_name, &ServerName::m_type,p1, p2);\
} else {\
server_name->m_type(p1, p2);\
}\
}
#define FUNC2C(m_type,m_arg1, m_arg2)\
virtual void m_type(m_arg1 p1, m_arg2 p2) const { \
if (Thread::get_caller_ID()!=server_thread) {\
command_queue.push( server_name, &ServerName::m_type,p1, p2);\
} else {\
server_name->m_type(p1, p2);\
}\
}
#define FUNC3R(m_r,m_type,m_arg1, m_arg2, m_arg3)\
virtual m_r m_type(m_arg1 p1, m_arg2 p2, m_arg3 p3) { \
if (Thread::get_caller_ID()!=server_thread) {\
m_r ret;\
command_queue.push_and_ret( server_name, &ServerName::m_type,p1, p2, p3,&ret);\
SYNC_DEBUG\
return ret;\
} else {\
return server_name->m_type(p1, p2, p3);\
}\
}
#define FUNC3RC(m_r,m_type,m_arg1, m_arg2, m_arg3)\
virtual m_r m_type(m_arg1 p1, m_arg2 p2, m_arg3 p3) const { \
if (Thread::get_caller_ID()!=server_thread) {\
m_r ret;\
command_queue.push_and_ret( server_name, &ServerName::m_type,p1, p2, p3,&ret);\
return ret;\
} else {\
return server_name->m_type(p1, p2, p3);\
}\
}
#define FUNC3S(m_type,m_arg1, m_arg2, m_arg3)\
virtual void m_type(m_arg1 p1, m_arg2 p2, m_arg3 p3) { \
if (Thread::get_caller_ID()!=server_thread) {\
command_queue.push_and_sync( server_name, &ServerName::m_type,p1, p2, p3);\
} else {\
server_name->m_type(p1, p2, p3);\
}\
}
#define FUNC3SC(m_type,m_arg1, m_arg2, m_arg3)\
virtual void m_type(m_arg1 p1, m_arg2 p2, m_arg3 p3) const { \
if (Thread::get_caller_ID()!=server_thread) {\
command_queue.push_and_sync( server_name, &ServerName::m_type,p1, p2, p3);\
} else {\
server_name->m_type(p1, p2, p3);\
}\
}
#define FUNC3(m_type,m_arg1, m_arg2, m_arg3)\
virtual void m_type(m_arg1 p1, m_arg2 p2, m_arg3 p3) { \
if (Thread::get_caller_ID()!=server_thread) {\
command_queue.push( server_name, &ServerName::m_type,p1, p2, p3);\
} else {\
server_name->m_type(p1, p2, p3);\
}\
}
#define FUNC3C(m_type,m_arg1, m_arg2, m_arg3)\
virtual void m_type(m_arg1 p1, m_arg2 p2, m_arg3 p3) const { \
if (Thread::get_caller_ID()!=server_thread) {\
command_queue.push( server_name, &ServerName::m_type,p1, p2, p3);\
} else {\
server_name->m_type(p1, p2, p3);\
}\
}
#define FUNC4R(m_r,m_type,m_arg1, m_arg2, m_arg3, m_arg4)\
virtual m_r m_type(m_arg1 p1, m_arg2 p2, m_arg3 p3, m_arg4 p4) { \
if (Thread::get_caller_ID()!=server_thread) {\
m_r ret;\
command_queue.push_and_ret( server_name, &ServerName::m_type,p1, p2, p3, p4,&ret);\
SYNC_DEBUG\
return ret;\
} else {\
return server_name->m_type(p1, p2, p3, p4);\
}\
}
#define FUNC4RC(m_r,m_type,m_arg1, m_arg2, m_arg3, m_arg4)\
virtual m_r m_type(m_arg1 p1, m_arg2 p2, m_arg3 p3, m_arg4 p4) const { \
if (Thread::get_caller_ID()!=server_thread) {\
m_r ret;\
command_queue.push_and_ret( server_name, &ServerName::m_type,p1, p2, p3, p4,&ret);\
SYNC_DEBUG\
return ret;\
} else {\
return server_name->m_type(p1, p2, p3, p4);\
}\
}
#define FUNC4S(m_type,m_arg1, m_arg2, m_arg3, m_arg4)\
virtual void m_type(m_arg1 p1, m_arg2 p2, m_arg3 p3, m_arg4 p4) { \
if (Thread::get_caller_ID()!=server_thread) {\
command_queue.push_and_sync( server_name, &ServerName::m_type,p1, p2, p3, p4);\
} else {\
server_name->m_type(p1, p2, p3, p4);\
}\
}
#define FUNC4SC(m_type,m_arg1, m_arg2, m_arg3, m_arg4)\
virtual void m_type(m_arg1 p1, m_arg2 p2, m_arg3 p3, m_arg4 p4) const { \
if (Thread::get_caller_ID()!=server_thread) {\
command_queue.push_and_sync( server_name, &ServerName::m_type,p1, p2, p3, p4);\
} else {\
server_name->m_type(p1, p2, p3, p4);\
}\
}
#define FUNC4(m_type,m_arg1, m_arg2, m_arg3, m_arg4)\
virtual void m_type(m_arg1 p1, m_arg2 p2, m_arg3 p3, m_arg4 p4) { \
if (Thread::get_caller_ID()!=server_thread) {\
command_queue.push( server_name, &ServerName::m_type,p1, p2, p3, p4);\
} else {\
server_name->m_type(p1, p2, p3, p4);\
}\
}
#define FUNC4C(m_type,m_arg1, m_arg2, m_arg3, m_arg4)\
virtual void m_type(m_arg1 p1, m_arg2 p2, m_arg3 p3, m_arg4 p4) const { \
if (Thread::get_caller_ID()!=server_thread) {\
command_queue.push( server_name, &ServerName::m_type,p1, p2, p3, p4);\
} else {\
server_name->m_type(p1, p2, p3, p4);\
}\
}
#define FUNC5R(m_r,m_type,m_arg1, m_arg2, m_arg3, m_arg4, m_arg5)\
virtual m_r m_type(m_arg1 p1, m_arg2 p2, m_arg3 p3, m_arg4 p4, m_arg5 p5) { \
if (Thread::get_caller_ID()!=server_thread) {\
m_r ret;\
command_queue.push_and_ret( server_name, &ServerName::m_type,p1, p2, p3, p4, p5,&ret);\
SYNC_DEBUG\
return ret;\
} else {\
return server_name->m_type(p1, p2, p3, p4, p5);\
}\
}
#define FUNC5RC(m_r,m_type,m_arg1, m_arg2, m_arg3, m_arg4, m_arg5)\
virtual m_r m_type(m_arg1 p1, m_arg2 p2, m_arg3 p3, m_arg4 p4, m_arg5 p5) const { \
if (Thread::get_caller_ID()!=server_thread) {\
m_r ret;\
command_queue.push_and_ret( server_name, &ServerName::m_type,p1, p2, p3, p4, p5,&ret);\
SYNC_DEBUG\
return ret;\
} else {\
return server_name->m_type(p1, p2, p3, p4, p5);\
}\
}
#define FUNC5S(m_type,m_arg1, m_arg2, m_arg3, m_arg4, m_arg5)\
virtual void m_type(m_arg1 p1, m_arg2 p2, m_arg3 p3, m_arg4 p4, m_arg5 p5) { \
if (Thread::get_caller_ID()!=server_thread) {\
command_queue.push_and_sync( server_name, &ServerName::m_type,p1, p2, p3, p4, p5);\
} else {\
server_name->m_type(p1, p2, p3, p4, p5);\
}\
}
#define FUNC5SC(m_type,m_arg1, m_arg2, m_arg3, m_arg4, m_arg5)\
virtual void m_type(m_arg1 p1, m_arg2 p2, m_arg3 p3, m_arg4 p4, m_arg5 p5) const { \
if (Thread::get_caller_ID()!=server_thread) {\
command_queue.push_and_sync( server_name, &ServerName::m_type,p1, p2, p3, p4, p5);\
} else {\
server_name->m_type(p1, p2, p3, p4, p5);\
}\
}
#define FUNC5(m_type,m_arg1, m_arg2, m_arg3, m_arg4, m_arg5)\
virtual void m_type(m_arg1 p1, m_arg2 p2, m_arg3 p3, m_arg4 p4, m_arg5 p5) { \
if (Thread::get_caller_ID()!=server_thread) {\
command_queue.push( server_name, &ServerName::m_type,p1, p2, p3, p4, p5);\
} else {\
server_name->m_type(p1, p2, p3, p4, p5);\
}\
}
#define FUNC5C(m_type,m_arg1, m_arg2, m_arg3, m_arg4, m_arg5)\
virtual void m_type(m_arg1 p1, m_arg2 p2, m_arg3 p3, m_arg4 p4, m_arg5 p5) const { \
if (Thread::get_caller_ID()!=server_thread) {\
command_queue.push( server_name, &ServerName::m_type,p1, p2, p3, p4, p5);\
} else {\
server_name->m_type(p1, p2, p3, p4, p5);\
}\
}
#define FUNC6R(m_r,m_type,m_arg1, m_arg2, m_arg3, m_arg4, m_arg5, m_arg6)\
virtual m_r m_type(m_arg1 p1, m_arg2 p2, m_arg3 p3, m_arg4 p4, m_arg5 p5, m_arg6 p6) { \
if (Thread::get_caller_ID()!=server_thread) {\
m_r ret;\
command_queue.push_and_ret( server_name, &ServerName::m_type,p1, p2, p3, p4, p5, p6,&ret);\
SYNC_DEBUG\
return ret;\
} else {\
return server_name->m_type(p1, p2, p3, p4, p5, p6);\
}\
}
#define FUNC6RC(m_r,m_type,m_arg1, m_arg2, m_arg3, m_arg4, m_arg5, m_arg6)\
virtual m_r m_type(m_arg1 p1, m_arg2 p2, m_arg3 p3, m_arg4 p4, m_arg5 p5, m_arg6 p6) const { \
if (Thread::get_caller_ID()!=server_thread) {\
m_r ret;\
command_queue.push_and_ret( server_name, &ServerName::m_type,p1, p2, p3, p4, p5, p6,&ret);\
return ret;\
} else {\
return server_name->m_type(p1, p2, p3, p4, p5, p6);\
}\
}
#define FUNC6S(m_type,m_arg1, m_arg2, m_arg3, m_arg4, m_arg5, m_arg6)\
virtual void m_type(m_arg1 p1, m_arg2 p2, m_arg3 p3, m_arg4 p4, m_arg5 p5, m_arg6 p6) { \
if (Thread::get_caller_ID()!=server_thread) {\
command_queue.push_and_sync( server_name, &ServerName::m_type,p1, p2, p3, p4, p5, p6);\
} else {\
server_name->m_type(p1, p2, p3, p4, p5, p6);\
}\
}
#define FUNC6SC(m_type,m_arg1, m_arg2, m_arg3, m_arg4, m_arg5, m_arg6)\
virtual void m_type(m_arg1 p1, m_arg2 p2, m_arg3 p3, m_arg4 p4, m_arg5 p5, m_arg6 p6) const { \
if (Thread::get_caller_ID()!=server_thread) {\
command_queue.push_and_sync( server_name, &ServerName::m_type,p1, p2, p3, p4, p5, p6);\
} else {\
server_name->m_type(p1, p2, p3, p4, p5, p6);\
}\
}
#define FUNC6(m_type,m_arg1, m_arg2, m_arg3, m_arg4, m_arg5, m_arg6)\
virtual void m_type(m_arg1 p1, m_arg2 p2, m_arg3 p3, m_arg4 p4, m_arg5 p5, m_arg6 p6) { \
if (Thread::get_caller_ID()!=server_thread) {\
command_queue.push( server_name, &ServerName::m_type,p1, p2, p3, p4, p5, p6);\
} else {\
server_name->m_type(p1, p2, p3, p4, p5, p6);\
}\
}
#define FUNC6C(m_type,m_arg1, m_arg2, m_arg3, m_arg4, m_arg5, m_arg6)\
virtual void m_type(m_arg1 p1, m_arg2 p2, m_arg3 p3, m_arg4 p4, m_arg5 p5, m_arg6 p6) const { \
if (Thread::get_caller_ID()!=server_thread) {\
command_queue.push( server_name, &ServerName::m_type,p1, p2, p3, p4, p5, p6);\
} else {\
server_name->m_type(p1, p2, p3, p4, p5, p6);\
}\
}
#define FUNC7R(m_r,m_type,m_arg1, m_arg2, m_arg3, m_arg4, m_arg5, m_arg6, m_arg7)\
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) { \
if (Thread::get_caller_ID()!=server_thread) {\
m_r ret;\
command_queue.push_and_ret( server_name, &ServerName::m_type,p1, p2, p3, p4, p5, p6, p7,&ret);\
SYNC_DEBUG\
return ret;\
} else {\
return server_name->m_type(p1, p2, p3, p4, p5, p6, p7);\
}\
}
#define FUNC7RC(m_r,m_type,m_arg1, m_arg2, m_arg3, m_arg4, m_arg5, m_arg6, m_arg7)\
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 { \
if (Thread::get_caller_ID()!=server_thread) {\
m_r ret;\
command_queue.push_and_ret( server_name, &ServerName::m_type,p1, p2, p3, p4, p5, p6, p7,&ret);\
SYNC_DEBUG\
return ret;\
} else {\
return server_name->m_type(p1, p2, p3, p4, p5, p6, p7);\
}\
}
#define FUNC7S(m_type,m_arg1, m_arg2, m_arg3, m_arg4, m_arg5, m_arg6, m_arg7)\
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) { \
if (Thread::get_caller_ID()!=server_thread) {\
command_queue.push_and_sync( server_name, &ServerName::m_type,p1, p2, p3, p4, p5, p6, p7);\
} else {\
server_name->m_type(p1, p2, p3, p4, p5, p6, p7);\
}\
}
#define FUNC7SC(m_type,m_arg1, m_arg2, m_arg3, m_arg4, m_arg5, m_arg6, m_arg7)\
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 { \
if (Thread::get_caller_ID()!=server_thread) {\
command_queue.push_and_sync( server_name, &ServerName::m_type,p1, p2, p3, p4, p5, p6, p7);\
} else {\
server_name->m_type(p1, p2, p3, p4, p5, p6, p7);\
}\
}
#define FUNC7(m_type,m_arg1, m_arg2, m_arg3, m_arg4, m_arg5, m_arg6, m_arg7)\
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) { \
if (Thread::get_caller_ID()!=server_thread) {\
command_queue.push( server_name, &ServerName::m_type,p1, p2, p3, p4, p5, p6, p7);\
} else {\
server_name->m_type(p1, p2, p3, p4, p5, p6, p7);\
}\
}
#define FUNC7C(m_type,m_arg1, m_arg2, m_arg3, m_arg4, m_arg5, m_arg6, m_arg7)\
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 { \
if (Thread::get_caller_ID()!=server_thread) {\
command_queue.push( server_name, &ServerName::m_type,p1, p2, p3, p4, p5, p6, p7);\
} else {\
server_name->m_type(p1, p2, p3, p4, p5, p6, p7);\
}\
}
#define FUNC8R(m_r,m_type,m_arg1, m_arg2, m_arg3, m_arg4, m_arg5, m_arg6, m_arg7, m_arg8)\
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, m_arg8 p8) { \
if (Thread::get_caller_ID()!=server_thread) {\
m_r ret;\
command_queue.push_and_ret( server_name, &ServerName::m_type,p1, p2, p3, p4, p5, p6, p7, p8, &ret);\
SYNC_DEBUG\
return ret;\
} else {\
return server_name->m_type(p1, p2, p3, p4, p5, p6, p7, p8);\
}\
}
#define FUNC8RC(m_r,m_type,m_arg1, m_arg2, m_arg3, m_arg4, m_arg5, m_arg6, m_arg7, m_arg8)\
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, m_arg8 p8) const { \
if (Thread::get_caller_ID()!=server_thread) {\
m_r ret;\
command_queue.push_and_ret( server_name, &ServerName::m_type,p1, p2, p3, p4, p5, p6, p7, p8, &ret);\
SYNC_DEBUG\
return ret;\
} else {\
return server_name->m_type(p1, p2, p3, p4, p5, p6, p7, p8);\
}\
}
#define FUNC8S(m_type,m_arg1, m_arg2, m_arg3, m_arg4, m_arg5, m_arg6, m_arg7, m_arg8)\
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, m_arg8 p8) { \
if (Thread::get_caller_ID()!=server_thread) {\
command_queue.push_and_sync( server_name, &ServerName::m_type,p1, p2, p3, p4, p5, p6, p7, p8);\
} else {\
server_name->m_type(p1, p2, p3, p4, p5, p6, p7, p8);\
}\
}
#define FUNC8SC(m_type,m_arg1, m_arg2, m_arg3, m_arg4, m_arg5, m_arg6, m_arg7, m_arg8)\
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, m_arg8 p8) const { \
if (Thread::get_caller_ID()!=server_thread) {\
command_queue.push_and_sync( server_name, &ServerName::m_type,p1, p2, p3, p4, p5, p6, p7, p8);\
} else {\
server_name->m_type(p1, p2, p3, p4, p5, p6, p7, p8);\
}\
}
#define FUNC8(m_type,m_arg1, m_arg2, m_arg3, m_arg4, m_arg5, m_arg6, m_arg7, m_arg8)\
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, m_arg8 p8) { \
if (Thread::get_caller_ID()!=server_thread) {\
command_queue.push( server_name, &ServerName::m_type,p1, p2, p3, p4, p5, p6, p7, p8);\
} else {\
server_name->m_type(p1, p2, p3, p4, p5, p6, p7, p8);\
}\
}
#define FUNC8C(m_type,m_arg1, m_arg2, m_arg3, m_arg4, m_arg5, m_arg6, m_arg7, m_arg8)\
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, m_arg8 p8) const { \
if (Thread::get_caller_ID()!=server_thread) {\
command_queue.push( server_name, &ServerName::m_type,p1, p2, p3, p4, p5, p6, p7, p8);\
} else {\
server_name->m_type(p1, p2, p3, p4, p5, p6, p7, p8);\
}\
}