| 
									
										
										
										
											2016-06-18 14:46:12 +02:00
										 |  |  | /*************************************************************************/ | 
					
						
							|  |  |  | /*  server_wrap_mt_common.h                                              */ | 
					
						
							|  |  |  | /*************************************************************************/ | 
					
						
							|  |  |  | /*                       This file is part of:                           */ | 
					
						
							|  |  |  | /*                           GODOT ENGINE                                */ | 
					
						
							|  |  |  | /*                    http://www.godotengine.org                         */ | 
					
						
							|  |  |  | /*************************************************************************/ | 
					
						
							|  |  |  | /* Copyright (c) 2007-2016 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.                */ | 
					
						
							|  |  |  | /*************************************************************************/ | 
					
						
							| 
									
										
										
										
											2015-05-26 01:05:08 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | #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);\ | 
					
						
							|  |  |  | 		}\ | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-03 22:11:10 +08:00
										 |  |  | #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);\ | 
					
						
							|  |  |  | 		}\ | 
					
						
							|  |  |  | 	} |