library of assembled shared sources

http://lass.cocamware.com

pyobject_macros.h

Go to the documentation of this file.
00001 /*
00002  * *** ATTENTION!  DO NOT MODIFY THIS FILE DIRECTLY! ***
00003  * 
00004  * It has automatically been generated from pyobject_macros.tmpl.h
00005  * by param_expander.py on Sun Nov 09 16:55:51 2008.
00006  */
00007 
00008 /** @file
00009  *  @author Bram de Greve (bramz@users.sourceforge.net)
00010  *  @author Tom De Muer (tomdemuer@users.sourceforge.net)
00011  *
00012  *  *** BEGIN LICENSE INFORMATION ***
00013  *  
00014  *  The contents of this file are subject to the Common Public Attribution License 
00015  *  Version 1.0 (the "License"); you may not use this file except in compliance with 
00016  *  the License. You may obtain a copy of the License at 
00017  *  http://lass.sourceforge.net/cpal-license. The License is based on the 
00018  *  Mozilla Public License Version 1.1 but Sections 14 and 15 have been added to cover 
00019  *  use of software over a computer network and provide for limited attribution for 
00020  *  the Original Developer. In addition, Exhibit A has been modified to be consistent 
00021  *  with Exhibit B.
00022  *  
00023  *  Software distributed under the License is distributed on an "AS IS" basis, WITHOUT 
00024  *  WARRANTY OF ANY KIND, either express or implied. See the License for the specific 
00025  *  language governing rights and limitations under the License.
00026  *  
00027  *  The Original Code is LASS - Library of Assembled Shared Sources.
00028  *  
00029  *  The Initial Developer of the Original Code is Bram de Greve and Tom De Muer.
00030  *  The Original Developer is the Initial Developer.
00031  *  
00032  *  All portions of the code written by the Initial Developer are:
00033  *  Copyright (C) 2004-2007 the Initial Developer.
00034  *  All Rights Reserved.
00035  *  
00036  *  Contributor(s):
00037  *
00038  *  Alternatively, the contents of this file may be used under the terms of the 
00039  *  GNU General Public License Version 2 or later (the GPL), in which case the 
00040  *  provisions of GPL are applicable instead of those above.  If you wish to allow use
00041  *  of your version of this file only under the terms of the GPL and not to allow 
00042  *  others to use your version of this file under the CPAL, indicate your decision by 
00043  *  deleting the provisions above and replace them with the notice and other 
00044  *  provisions required by the GPL License. If you do not delete the provisions above,
00045  *  a recipient may use your version of this file under either the CPAL or the GPL.
00046  *  
00047  *  *** END LICENSE INFORMATION ***
00048  */
00049 
00050 // convention for names of macro arguments:
00051 //
00052 // i_foo: must be an identifier (bar is an identifier, spam::bar is not)
00053 // s_foo: must be a string literal ("bar" is a string literal, bar is not)
00054 // t_foo: must be an declared type and may be qualified (could be spam::Bar<Ham>)
00055 // o_foo: must be an existing object (could be spam::bar if spam::bar exists as object)
00056 // f_foo: must be a declared function (could be spam::bar if spam::bar(...) is declared as function)
00057 
00058 #ifndef LASS_GUARDIAN_OF_INCLUSION_UTIL_PYOBJECT_MACROS_H
00059 #define LASS_GUARDIAN_OF_INCLUSION_UTIL_PYOBJECT_MACROS_H
00060 
00061 #include "pyobject_call.inl"
00062 #include "../meta/is_member.h"
00063 
00064 /** @ingroup Python
00065 *
00066 *   @deprecated Objects derived from PyObjectPlus should set this on in a clever way:
00067 *   impl::fixObjectType is called on an appropriate time and gets the object type through
00068 *   a virtual call to GetType().  If you get in a situation where ob_type seems to be NULL,
00069 *   try to solve the situation with a manual call to impl::fixObjectType first.
00070 *
00071 * Call this macro inside some class method, and it will set ob_type to the static type of that class.
00072 * Normally, you should never use this.  And if you must, then you better know what you're doing!
00073 */
00074 /*
00075 #define PY_PYTHONIZE \
00076     {this->ob_type = &this->_lassPyType;}
00077 */
00078 
00079 // --- modules -------------------------------------------------------------------------------------
00080 
00081 /** @ingroup Python
00082  *  Declare and define an object respresenting a python module.
00083  *
00084  *  @param i_module 
00085  *      the identifier of the module to be used in C++
00086  */
00087 #define PY_DECLARE_MODULE( i_module ) \
00088     PyObject* LASS_CONCATENATE( lassPythonModule_, i_module ) = 0;\
00089     std::vector<PyMethodDef> LASS_CONCATENATE( lassPythonModuleMethods_, i_module ); \
00090     std::vector< std::pair<std::string, PyObject* > > LASS_CONCATENATE( lassPythonModuleObjects_, i_module );\
00091     LASS_EXECUTE_BEFORE_MAIN_EX\
00092     ( LASS_CONCATENATE( lassExecutePyDeclareModule_, i_module ), \
00093         LASS_CONCATENATE( lassPythonModuleMethods_, i_module ).push_back( \
00094             ::lass::python::impl::createPyMethodDef( 0, 0, 0, 0 ) ) ;\
00095     )
00096 
00097 /** @ingroup Python
00098  *  Inject a python module so Python is aware of it.
00099  *
00100  *  @remark This is to be done at @e runtime!  So, it has to be somewhere in your main or any
00101  *  function called by main.
00102  *
00103  *  @param i_module
00104  *      the identifier of a module declared by PY_DECLARE_MODULE
00105  *  @param s_moduleName
00106  *      name of module as shown in Python (zero terminated C string)
00107  *  @param s_doc
00108  *      documentation of module as shown in Python (zero terminated C string)
00109  */
00110 #define PY_INJECT_MODULE_EX( i_module, s_moduleName, s_doc ) \
00111     {\
00112         Py_Initialize(); \
00113         LASS_CONCATENATE( lassPythonModule_, i_module ) = Py_InitModule3(\
00114             (char*)(s_moduleName), \
00115             &LASS_CONCATENATE( lassPythonModuleMethods_, i_module )[0], \
00116             (char*)(s_doc) ); \
00117         for (size_t i=0;i<LASS_CONCATENATE( lassPythonModuleObjects_, i_module ).size() ;++i)\
00118         {\
00119             PyModule_AddObject( LASS_CONCATENATE( lassPythonModule_, i_module ), \
00120                                 const_cast<char*>(LASS_CONCATENATE( lassPythonModuleObjects_, i_module )[i].first.c_str()),\
00121                                 LASS_CONCATENATE( lassPythonModuleObjects_, i_module )[i].second);\
00122         }\
00123     }
00124 
00125 /** @ingroup Python
00126  *  convenience macro, wraps PY_INJECT_MODULE_EX with
00127  *  @a s_doc = 0
00128  */
00129 #define PY_INJECT_MODULE_NAME( i_module, s_moduleName )\
00130     PY_INJECT_MODULE_EX( i_module, s_moduleName, 0)
00131 
00132 /** @ingroup Python
00133  *  convenience macro, wraps PY_INJECT_MODULE_EX with
00134  *  @a s_moduleName = # @a i_module
00135  */
00136 #define PY_INJECT_MODULE_DOC( i_module, s_doc )\
00137     PY_INJECT_MODULE_EX( i_module, LASS_STRINGIFY(i_module), s_doc)
00138 
00139 /** @ingroup Python
00140  *  convenience macro, wraps PY_INJECT_MODULE_EX with
00141  *  @a s_moduleName = # @a i_module and s_doc = 0
00142  */
00143 #define PY_INJECT_MODULE( i_module )\
00144     PY_INJECT_MODULE_EX( i_module, LASS_STRINGIFY(i_module), 0)
00145 
00146 
00147 
00148 /** @ingroup Python
00149  *  Inject a python module so Python is aware of it and produce all necessary code so a
00150  *  module can be used as extension of Python.  A limitation in comparison with embedded
00151  *  modules is that the name of the module cannot be changed anymore upon injection.
00152  *
00153  *  @param i_module
00154  *      the identifier of a module declared by PY_DECLARE_MODULE
00155  *  @param s_doc
00156  *      documentation of module as shown in Python (zero terminated C string)
00157  */
00158 #define PY_EXTENSION_MODULE_EX( i_module, s_doc ) \
00159     extern "C" __declspec(dllexport)\
00160     void LASS_CONCATENATE(init, i_module) () {\
00161         PY_INJECT_MODULE_EX(i_module, const_cast<char*>( LASS_STRINGIFY(i_module) ), s_doc);\
00162     }
00163 
00164 /** @ingroup Python
00165  *  convenience macro, wraps PY_EXTENSION_MODULE_EX with
00166  *  @a s_moduleName = # @a i_module
00167  */
00168 #define PY_EXTENSION_MODULE_DOC( i_module, s_doc )\
00169     PY_EXTENSION_MODULE_EX( i_module, s_doc)
00170 
00171 /** @ingroup Python
00172  *  convenience macro, wraps PY_EXTENSION_MODULE_EX with
00173  *  @a s_moduleName = # @a i_module and s_doc = 0
00174  */
00175 #define PY_EXTENSION_MODULE( i_module )\
00176     PY_EXTENSION_MODULE_EX( i_module, 0)
00177 
00178 
00179 // --- module variables ----------------------------------------------------------------------------
00180 
00181 /** @ingroup Python
00182  *  Inject a variable in a python module
00183  *
00184  *  @remark This is to be done at @e runtime!  So, it has to be somewhere in your main or any
00185  *  function called by main.
00186  *
00187  *  @param o_object
00188  *      the object/variable to be injected
00189  *  @param i_module
00190  *      the identifier of the module to inject the object in
00191  *  @param s_objectName
00192  *      name of object as shown in the module (zero terminated C string)
00193  */
00194 #define PY_INJECT_OBJECT_IN_MODULE_EX( o_object, i_module, s_objectName )\
00195     {\
00196         PyModule_AddObject(\
00197             LASS_CONCATENATE( lassPythonModule_, i_module ), s_objectName,\
00198             lass::python::pyBuildSimpleObject(o_object) );\
00199     }
00200 
00201 /** @ingroup Python
00202  *  convenience macro, wraps PY_INJECT_OBJECT_IN_MODULE_EX with
00203  *  @a s_objectName = # @a o_object
00204  */
00205 #define PY_INJECT_OBJECT_IN_MODULE( o_object, i_module )\
00206     PY_INJECT_OBJECT_IN_MODULE_EX(o_object, i_module, LASS_STRINGIFY(o_object))
00207 
00208 
00209 
00210 /** @ingroup 
00211  *  Inject a integer constant in a python module
00212  *
00213  *  @remark This is to be done at @e runtime!  So, it has to be somewhere in your main or any
00214  *  function called by main.
00215  *
00216  *  @param i_module
00217  *      the identifier of the module to inject the object in
00218  *  @param s_name
00219  *      name of constant as shown in the module (zero terminated C string)
00220  *  @param s_value
00221  *      value of the constant (zero terminated C string)
00222  */
00223 #define PY_MODULE_ADD_INTEGER_CONSTANT( i_module, s_name, s_value )\
00224     {\
00225         PyModule_AddIntConstant(\
00226             LASS_CONCATENATE( lassPythonModule_, i_module ),    s_name, s_value);\
00227     }
00228 
00229 
00230 
00231 /** @ingroup 
00232  *  Inject a string constant in a python module
00233  *
00234  *  @remark This is to be done at @e runtime!  So, it has to be somewhere in your main or any
00235  *  function called by main.
00236  *
00237  *  @param i_module
00238  *      the identifier of the module to inject the object in
00239  *  @param s_name
00240  *      name of constant as shown in the module (zero terminated C string)
00241  *  @param v_value
00242  *      value of the constant (long)
00243  */
00244 #define PY_MODULE_ADD_STRING_CONSTANT( i_module, s_name, v_value )\
00245     {\
00246         PyModule_AddStringConstant(\
00247             LASS_CONCATENATE( lassPythonModule_, i_module ), s_name, const_cast<char*>(v_value));\
00248     }
00249 
00250 // --- free module functions -----------------------------------------------------------------------
00251 
00252 /* @ingroup Python
00253  * @depracated
00254  * Use this macro for backward compatibility when wrapper functions don't 
00255  * need to be automatically generated or you want specific Python behaviour.
00256  */
00257 #define PY_MODULE_PY_FUNCTION_EX( i_module, f_cppFunction, s_functionName, s_doc )\
00258     extern std::vector< PyMethodDef > LASS_CONCATENATE( lassPythonModuleMethods_, i_module );\
00259     LASS_EXECUTE_BEFORE_MAIN_EX\
00260     ( LASS_CONCATENATE_3( lassExecutePyModulePyFunction_, i_module, f_cppFunction ),\
00261         LASS_CONCATENATE( lassPythonModuleMethods_, i_module ).insert(\
00262             LASS_CONCATENATE( lassPythonModuleMethods_, i_module ).begin(),\
00263                 ::lass::python::impl::createPyMethodDef( s_functionName, f_cppFunction , METH_VARARGS  , s_doc ));\
00264     )
00265 
00266 
00267 
00268 /** @ingroup Python
00269  *  Exports a C++ free function to Python
00270  *
00271  *  @param i_module
00272  *      the module object
00273  *  @param f_cppFunction
00274  *      the name of the function in C++
00275  *  @param s_functionName
00276  *      the name the method will have in Python
00277  *  @param s_doc
00278  *      documentation of function as shown in Python (zero terminated C string)
00279  *  @param i_dispatcher
00280  *      A unique name of the static C++ dispatcher function to be generated.  This name will be
00281  *      used for the names of automatic generated variables and functions and should be unique
00282  *      per exported C++ class/method pair.
00283  *
00284  *  Invoke this macro to export a function to python.  You can use this to generate overloaded
00285  *  Python functions by exporting multiple functions with the same @a s_methodName name.
00286  *
00287  *  @note
00288  *      unlike in C++ overload issues will be not be solved by best fit, but by first fit.
00289  *      If such an overloaded Python functions is called, the different overloads are called in
00290  *      the same order of export.  The first one that fits the arguments will be called.
00291  *
00292  *  @note
00293  *      the documentation of the Python method will be the @a s_doc of the first exported
00294  *      overload.
00295  *
00296  *  @code
00297  *  void barA(int a);
00298  *  void barB(const std::string& b);
00299  *
00300  *  PY_MODULE_FUNCTION_EX(foo_module, barA, "bar", 0, foo_bar_a)
00301  *  PY_MODULE_FUNCTION_EX(foo_module, barB, "bar", 0, foo_bar_b)
00302  *  @endcode
00303  */
00304 #define PY_MODULE_FUNCTION_EX( i_module, f_cppFunction, s_functionName, s_doc, i_dispatcher )\
00305     static PyCFunction LASS_CONCATENATE( pyOverloadChain_, i_dispatcher ) = 0;\
00306     inline PyObject* i_dispatcher( PyObject* iIgnore, PyObject* iArgs )\
00307     {\
00308         if (LASS_CONCATENATE( pyOverloadChain_, i_dispatcher ))\
00309         {\
00310             PyObject* result = LASS_CONCATENATE( pyOverloadChain_, i_dispatcher )(iIgnore, iArgs);\
00311             if (!(PyErr_Occurred() && PyErr_ExceptionMatches(PyExc_TypeError)))\
00312             {\
00313                 return result;\
00314             }\
00315             PyErr_Clear();\
00316             Py_XDECREF(result);\
00317         }\
00318         return ::lass::python::impl::callFunction( iArgs, &f_cppFunction );\
00319     }\
00320     extern std::vector< PyMethodDef > LASS_CONCATENATE( lassPythonModuleMethods_, i_module );\
00321     LASS_EXECUTE_BEFORE_MAIN_EX\
00322     ( LASS_CONCATENATE_3( lassExecutePyModuleFunction_, i_module, i_dispatcher ),\
00323         lass::python::impl::addModuleFunction(\
00324             LASS_CONCATENATE( lassPythonModuleMethods_, i_module ),\
00325             s_functionName, s_doc, i_dispatcher,\
00326             LASS_CONCATENATE( pyOverloadChain_, i_dispatcher ) );\
00327     )
00328 
00329 /** @ingroup Python
00330  *  convenience macro, wraps PY_MODULE_FUNCTION_EX with 
00331  *  @a i_dispatcher = lassPyImpl_function_ ## @a i_module ## __LINE__
00332  */
00333 #define PY_MODULE_FUNCTION_NAME_DOC( i_module, f_cppFunction, s_name, s_doc )\
00334     PY_MODULE_FUNCTION_EX( i_module, f_cppFunction, s_name, s_doc,\
00335         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_function_, i_module)))
00336 
00337 /** @ingroup Python
00338  *  convenience macro, wraps PY_MODULE_FUNCTION_NAME_DOC with @a s_doc = 0.
00339  */
00340 #define PY_MODULE_FUNCTION_NAME( i_module, f_cppFunction, s_name)\
00341     PY_MODULE_FUNCTION_NAME_DOC( i_module, f_cppFunction, s_name, 0)
00342 
00343 /** @ingroup Python
00344  *  convenience macro, wraps PY_MODULE_FUNCTION_NAME_DOC with @a s_name = "@a i_innerCppClass".
00345  */
00346 #define PY_MODULE_FUNCTION_DOC( i_module, f_cppFunction, s_doc )\
00347     PY_MODULE_FUNCTION_NAME_DOC( i_module, f_cppFunction, LASS_STRINGIFY(f_cppFunction), s_doc)
00348 
00349 /** @ingroup Python
00350  *  convenience macro, wraps PY_MODULE_FUNCTION_NAME_DOC with @a s_name = "@a i_innerCppClass" and s_doc = 0.
00351  */
00352 #define PY_MODULE_FUNCTION( i_module, f_cppFunction)\
00353     PY_MODULE_FUNCTION_NAME_DOC( i_module, f_cppFunction, LASS_STRINGIFY(f_cppFunction), 0)
00354 
00355 
00356 
00357 
00358 // --- explicit qualified free functions -----------------------------------------------------------
00359 
00360 /** @ingroup Python
00361  *  Exports a C++ free functions to Python will fully qualified return type and parameters
00362  *
00363  *  @param i_module
00364  *      the module object
00365  *  @param f_cppFunction
00366  *      the name of the function in C++
00367  *  @param t_return
00368  *      the return type of @a f_cppFunction
00369  *  @param t_params
00370  *      a lass::meta::TypeList of the parameter types of @a f_cppFunction
00371  *  @param s_functionName
00372  *      the name the method will have in Python
00373  *  @param s_doc
00374  *      documentation of function as shown in Python (zero terminated C string)
00375  *  @param i_dispatcher
00376  *      A unique name of the static C++ dispatcher function to be generated.  This name will be
00377  *      used for the names of automatic generated variables and functions and should be unique
00378  *
00379  *  You can use this macro instead of PY_MODULE_FUNCTION_EX if there's an ambiguity on 
00380  *  @a f_cppFunction. This macro will help you to solve this ambiguity by explicitely 
00381  *  specifying return type and parameter types.
00382  *
00383  *  @code
00384  *  void bar(int a);
00385  *  void bar(const std::string& b);
00386  *
00387  *  PY_MODULE_FUNCTION_QUALIFIED_EX(foo_module, bar, void, meta::type_list::Make<int>::Type, "bar", 0, foo_bar_a)
00388  *  PY_MODULE_FUNCTION_QUALIFIED_EX(foo_module, bar, void, meta::type_list::Make<const std::string&>::Type, "bar", 0, foo_bar_b)
00389  *  @endcode
00390  */
00391 #define PY_MODULE_FUNCTION_QUALIFIED_EX(i_module, f_cppFunction, t_return, t_params, s_functionName, s_doc, i_dispatcher)\
00392     static PyCFunction LASS_CONCATENATE( pyOverloadChain_, i_dispatcher ) = 0;\
00393     inline PyObject* i_dispatcher( PyObject* iIgnore, PyObject* iArgs )\
00394     {\
00395         if (LASS_CONCATENATE( pyOverloadChain_, i_dispatcher ))\
00396         {\
00397             PyObject* result = LASS_CONCATENATE( pyOverloadChain_, i_dispatcher )(iIgnore, iArgs);\
00398             if (!(PyErr_Occurred() && PyErr_ExceptionMatches(PyExc_TypeError)))\
00399             {\
00400                 return result;\
00401             }\
00402             PyErr_Clear();\
00403             Py_XDECREF(result);\
00404         }\
00405         return ::lass::python::impl::ExplicitResolver\
00406         <\
00407             lass::meta::NullType,\
00408             t_return,\
00409             t_params\
00410         >\
00411         ::TImpl::callFunction(iArgs, &f_cppFunction);\
00412     }\
00413     extern ::std::vector< PyMethodDef > LASS_CONCATENATE( lassPythonModuleMethods_, i_module );\
00414     LASS_EXECUTE_BEFORE_MAIN_EX\
00415     ( LASS_CONCATENATE_3( lassExecutePyModuleFunction_, i_module, i_dispatcher ),\
00416         ::lass::python::impl::addModuleFunction(\
00417             LASS_CONCATENATE( lassPythonModuleMethods_, i_module ),\
00418             s_functionName, s_doc, i_dispatcher,\
00419             LASS_CONCATENATE( pyOverloadChain_, i_dispatcher ) );\
00420     )
00421 
00422 /** @ingroup Python
00423  *  convenience macro, wraps PY_MODULE_FUNCTION_QUALIFIED_EX for 0 arguments
00424  */
00425 #define PY_MODULE_FUNCTION_QUALIFIED_EX_0( i_module, f_cppFunction, t_return, s_functionName, s_doc, i_dispatcher )\
00426     PY_MODULE_FUNCTION_QUALIFIED_EX(\
00427         i_module, f_cppFunction, t_return, ::lass::meta::NullType, s_functionName, s_doc, i_dispatcher )
00428 
00429 /** @ingroup Python
00430  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_EX for 1 arguments
00431  */
00432 #define PY_MODULE_FUNCTION_QUALIFIED_EX_1( i_module, f_cppFunction, t_return, t_P1, s_functionName, s_doc, i_dispatcher )\
00433     typedef ::lass::meta::type_list::Make< t_P1 >::Type \
00434         LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams));\
00435     PY_MODULE_FUNCTION_QUALIFIED_EX(\
00436         i_module, f_cppFunction, t_return,\
00437         LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams)),\
00438         s_functionName, s_doc, i_dispatcher )
00439 
00440 /** @ingroup Python
00441  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_EX for 2 arguments
00442  */
00443 #define PY_MODULE_FUNCTION_QUALIFIED_EX_2( i_module, f_cppFunction, t_return, t_P1, t_P2, s_functionName, s_doc, i_dispatcher )\
00444     typedef ::lass::meta::type_list::Make< t_P1, t_P2 >::Type \
00445         LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams));\
00446     PY_MODULE_FUNCTION_QUALIFIED_EX(\
00447         i_module, f_cppFunction, t_return,\
00448         LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams)),\
00449         s_functionName, s_doc, i_dispatcher )
00450 
00451 /** @ingroup Python
00452  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_EX for 3 arguments
00453  */
00454 #define PY_MODULE_FUNCTION_QUALIFIED_EX_3( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, s_functionName, s_doc, i_dispatcher )\
00455     typedef ::lass::meta::type_list::Make< t_P1, t_P2, t_P3 >::Type \
00456         LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams));\
00457     PY_MODULE_FUNCTION_QUALIFIED_EX(\
00458         i_module, f_cppFunction, t_return,\
00459         LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams)),\
00460         s_functionName, s_doc, i_dispatcher )
00461 
00462 /** @ingroup Python
00463  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_EX for 4 arguments
00464  */
00465 #define PY_MODULE_FUNCTION_QUALIFIED_EX_4( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, s_functionName, s_doc, i_dispatcher )\
00466     typedef ::lass::meta::type_list::Make< t_P1, t_P2, t_P3, t_P4 >::Type \
00467         LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams));\
00468     PY_MODULE_FUNCTION_QUALIFIED_EX(\
00469         i_module, f_cppFunction, t_return,\
00470         LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams)),\
00471         s_functionName, s_doc, i_dispatcher )
00472 
00473 /** @ingroup Python
00474  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_EX for 5 arguments
00475  */
00476 #define PY_MODULE_FUNCTION_QUALIFIED_EX_5( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, s_functionName, s_doc, i_dispatcher )\
00477     typedef ::lass::meta::type_list::Make< t_P1, t_P2, t_P3, t_P4, t_P5 >::Type \
00478         LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams));\
00479     PY_MODULE_FUNCTION_QUALIFIED_EX(\
00480         i_module, f_cppFunction, t_return,\
00481         LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams)),\
00482         s_functionName, s_doc, i_dispatcher )
00483 
00484 /** @ingroup Python
00485  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_EX for 6 arguments
00486  */
00487 #define PY_MODULE_FUNCTION_QUALIFIED_EX_6( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, s_functionName, s_doc, i_dispatcher )\
00488     typedef ::lass::meta::type_list::Make< t_P1, t_P2, t_P3, t_P4, t_P5, t_P6 >::Type \
00489         LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams));\
00490     PY_MODULE_FUNCTION_QUALIFIED_EX(\
00491         i_module, f_cppFunction, t_return,\
00492         LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams)),\
00493         s_functionName, s_doc, i_dispatcher )
00494 
00495 /** @ingroup Python
00496  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_EX for 7 arguments
00497  */
00498 #define PY_MODULE_FUNCTION_QUALIFIED_EX_7( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, s_functionName, s_doc, i_dispatcher )\
00499     typedef ::lass::meta::type_list::Make< t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7 >::Type \
00500         LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams));\
00501     PY_MODULE_FUNCTION_QUALIFIED_EX(\
00502         i_module, f_cppFunction, t_return,\
00503         LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams)),\
00504         s_functionName, s_doc, i_dispatcher )
00505 
00506 /** @ingroup Python
00507  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_EX for 8 arguments
00508  */
00509 #define PY_MODULE_FUNCTION_QUALIFIED_EX_8( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, s_functionName, s_doc, i_dispatcher )\
00510     typedef ::lass::meta::type_list::Make< t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8 >::Type \
00511         LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams));\
00512     PY_MODULE_FUNCTION_QUALIFIED_EX(\
00513         i_module, f_cppFunction, t_return,\
00514         LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams)),\
00515         s_functionName, s_doc, i_dispatcher )
00516 
00517 /** @ingroup Python
00518  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_EX for 9 arguments
00519  */
00520 #define PY_MODULE_FUNCTION_QUALIFIED_EX_9( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, s_functionName, s_doc, i_dispatcher )\
00521     typedef ::lass::meta::type_list::Make< t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9 >::Type \
00522         LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams));\
00523     PY_MODULE_FUNCTION_QUALIFIED_EX(\
00524         i_module, f_cppFunction, t_return,\
00525         LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams)),\
00526         s_functionName, s_doc, i_dispatcher )
00527 
00528 /** @ingroup Python
00529  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_EX for 10 arguments
00530  */
00531 #define PY_MODULE_FUNCTION_QUALIFIED_EX_10( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, s_functionName, s_doc, i_dispatcher )\
00532     typedef ::lass::meta::type_list::Make< t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10 >::Type \
00533         LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams));\
00534     PY_MODULE_FUNCTION_QUALIFIED_EX(\
00535         i_module, f_cppFunction, t_return,\
00536         LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams)),\
00537         s_functionName, s_doc, i_dispatcher )
00538 
00539 /** @ingroup Python
00540  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_EX for 11 arguments
00541  */
00542 #define PY_MODULE_FUNCTION_QUALIFIED_EX_11( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, s_functionName, s_doc, i_dispatcher )\
00543     typedef ::lass::meta::type_list::Make< t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11 >::Type \
00544         LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams));\
00545     PY_MODULE_FUNCTION_QUALIFIED_EX(\
00546         i_module, f_cppFunction, t_return,\
00547         LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams)),\
00548         s_functionName, s_doc, i_dispatcher )
00549 
00550 /** @ingroup Python
00551  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_EX for 12 arguments
00552  */
00553 #define PY_MODULE_FUNCTION_QUALIFIED_EX_12( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, s_functionName, s_doc, i_dispatcher )\
00554     typedef ::lass::meta::type_list::Make< t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12 >::Type \
00555         LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams));\
00556     PY_MODULE_FUNCTION_QUALIFIED_EX(\
00557         i_module, f_cppFunction, t_return,\
00558         LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams)),\
00559         s_functionName, s_doc, i_dispatcher )
00560 
00561 /** @ingroup Python
00562  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_EX for 13 arguments
00563  */
00564 #define PY_MODULE_FUNCTION_QUALIFIED_EX_13( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, s_functionName, s_doc, i_dispatcher )\
00565     typedef ::lass::meta::type_list::Make< t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13 >::Type \
00566         LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams));\
00567     PY_MODULE_FUNCTION_QUALIFIED_EX(\
00568         i_module, f_cppFunction, t_return,\
00569         LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams)),\
00570         s_functionName, s_doc, i_dispatcher )
00571 
00572 /** @ingroup Python
00573  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_EX for 14 arguments
00574  */
00575 #define PY_MODULE_FUNCTION_QUALIFIED_EX_14( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, s_functionName, s_doc, i_dispatcher )\
00576     typedef ::lass::meta::type_list::Make< t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14 >::Type \
00577         LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams));\
00578     PY_MODULE_FUNCTION_QUALIFIED_EX(\
00579         i_module, f_cppFunction, t_return,\
00580         LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams)),\
00581         s_functionName, s_doc, i_dispatcher )
00582 
00583 /** @ingroup Python
00584  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_EX for 15 arguments
00585  */
00586 #define PY_MODULE_FUNCTION_QUALIFIED_EX_15( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15, s_functionName, s_doc, i_dispatcher )\
00587     typedef ::lass::meta::type_list::Make< t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15 >::Type \
00588         LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams));\
00589     PY_MODULE_FUNCTION_QUALIFIED_EX(\
00590         i_module, f_cppFunction, t_return,\
00591         LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams)),\
00592         s_functionName, s_doc, i_dispatcher )
00593 
00594 
00595 /** @ingroup Python
00596  *  convenience macro, wraps PY_MODULE_FUNCTION_QUALIFIED_EX with
00597  *  @a i_dispatcher = lassPyImpl_function_ ## @a i_module ## __LINE__.
00598  */
00599 #define PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC( i_module, f_cppFunction, t_return, t_params, s_functionName, s_doc )\
00600     PY_MODULE_FUNCTION_QUALIFIED_EX(\
00601         i_module, f_cppFunction, t_return, t_params, s_functionName, s_doc,\
00602         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_function_, i_module)))
00603 
00604 
00605 /** @ingroup Python
00606  *  convenience macro, wraps PY_MODULE_FUNCTION_QUALIFIED_EX_0 with
00607  *  @a i_dispatcher = lassPyImpl_function_ ## @a i_module ## __LINE__.
00608  */
00609 #define PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_0( i_module, f_cppFunction, t_return, t_params, s_functionName, s_doc )\
00610     PY_MODULE_FUNCTION_QUALIFIED_EX_0(\
00611         i_module, f_cppFunction, t_return, s_functionName, s_doc,\
00612         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_function_, i_module)))
00613 
00614 /** @ingroup Python
00615  *  convenience macro, wraps PY_MODULE_FUNCTION_QUALIFIED_EX_1 with
00616  *  @a i_dispatcher = lassPyImpl_function_ ## @a i_module ## __LINE__.
00617  */
00618 #define PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_1( i_module, f_cppFunction, t_return, t_P1, s_functionName, s_doc )\
00619     PY_MODULE_FUNCTION_QUALIFIED_EX_1(\
00620         i_module, f_cppFunction, t_return, t_P1, s_functionName, s_doc,\
00621         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_function_, i_module)))
00622 
00623 /** @ingroup Python
00624  *  convenience macro, wraps PY_MODULE_FUNCTION_QUALIFIED_EX_2 with
00625  *  @a i_dispatcher = lassPyImpl_function_ ## @a i_module ## __LINE__.
00626  */
00627 #define PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_2( i_module, f_cppFunction, t_return, t_P1, t_P2, s_functionName, s_doc )\
00628     PY_MODULE_FUNCTION_QUALIFIED_EX_2(\
00629         i_module, f_cppFunction, t_return, t_P1, t_P2, s_functionName, s_doc,\
00630         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_function_, i_module)))
00631 
00632 /** @ingroup Python
00633  *  convenience macro, wraps PY_MODULE_FUNCTION_QUALIFIED_EX_3 with
00634  *  @a i_dispatcher = lassPyImpl_function_ ## @a i_module ## __LINE__.
00635  */
00636 #define PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_3( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, s_functionName, s_doc )\
00637     PY_MODULE_FUNCTION_QUALIFIED_EX_3(\
00638         i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, s_functionName, s_doc,\
00639         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_function_, i_module)))
00640 
00641 /** @ingroup Python
00642  *  convenience macro, wraps PY_MODULE_FUNCTION_QUALIFIED_EX_4 with
00643  *  @a i_dispatcher = lassPyImpl_function_ ## @a i_module ## __LINE__.
00644  */
00645 #define PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_4( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, s_functionName, s_doc )\
00646     PY_MODULE_FUNCTION_QUALIFIED_EX_4(\
00647         i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, s_functionName, s_doc,\
00648         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_function_, i_module)))
00649 
00650 /** @ingroup Python
00651  *  convenience macro, wraps PY_MODULE_FUNCTION_QUALIFIED_EX_5 with
00652  *  @a i_dispatcher = lassPyImpl_function_ ## @a i_module ## __LINE__.
00653  */
00654 #define PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_5( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, s_functionName, s_doc )\
00655     PY_MODULE_FUNCTION_QUALIFIED_EX_5(\
00656         i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, s_functionName, s_doc,\
00657         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_function_, i_module)))
00658 
00659 /** @ingroup Python
00660  *  convenience macro, wraps PY_MODULE_FUNCTION_QUALIFIED_EX_6 with
00661  *  @a i_dispatcher = lassPyImpl_function_ ## @a i_module ## __LINE__.
00662  */
00663 #define PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_6( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, s_functionName, s_doc )\
00664     PY_MODULE_FUNCTION_QUALIFIED_EX_6(\
00665         i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, s_functionName, s_doc,\
00666         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_function_, i_module)))
00667 
00668 /** @ingroup Python
00669  *  convenience macro, wraps PY_MODULE_FUNCTION_QUALIFIED_EX_7 with
00670  *  @a i_dispatcher = lassPyImpl_function_ ## @a i_module ## __LINE__.
00671  */
00672 #define PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_7( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, s_functionName, s_doc )\
00673     PY_MODULE_FUNCTION_QUALIFIED_EX_7(\
00674         i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, s_functionName, s_doc,\
00675         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_function_, i_module)))
00676 
00677 /** @ingroup Python
00678  *  convenience macro, wraps PY_MODULE_FUNCTION_QUALIFIED_EX_8 with
00679  *  @a i_dispatcher = lassPyImpl_function_ ## @a i_module ## __LINE__.
00680  */
00681 #define PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_8( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, s_functionName, s_doc )\
00682     PY_MODULE_FUNCTION_QUALIFIED_EX_8(\
00683         i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, s_functionName, s_doc,\
00684         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_function_, i_module)))
00685 
00686 /** @ingroup Python
00687  *  convenience macro, wraps PY_MODULE_FUNCTION_QUALIFIED_EX_9 with
00688  *  @a i_dispatcher = lassPyImpl_function_ ## @a i_module ## __LINE__.
00689  */
00690 #define PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_9( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, s_functionName, s_doc )\
00691     PY_MODULE_FUNCTION_QUALIFIED_EX_9(\
00692         i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, s_functionName, s_doc,\
00693         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_function_, i_module)))
00694 
00695 /** @ingroup Python
00696  *  convenience macro, wraps PY_MODULE_FUNCTION_QUALIFIED_EX_10 with
00697  *  @a i_dispatcher = lassPyImpl_function_ ## @a i_module ## __LINE__.
00698  */
00699 #define PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_10( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, s_functionName, s_doc )\
00700     PY_MODULE_FUNCTION_QUALIFIED_EX_10(\
00701         i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, s_functionName, s_doc,\
00702         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_function_, i_module)))
00703 
00704 /** @ingroup Python
00705  *  convenience macro, wraps PY_MODULE_FUNCTION_QUALIFIED_EX_11 with
00706  *  @a i_dispatcher = lassPyImpl_function_ ## @a i_module ## __LINE__.
00707  */
00708 #define PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_11( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, s_functionName, s_doc )\
00709     PY_MODULE_FUNCTION_QUALIFIED_EX_11(\
00710         i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, s_functionName, s_doc,\
00711         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_function_, i_module)))
00712 
00713 /** @ingroup Python
00714  *  convenience macro, wraps PY_MODULE_FUNCTION_QUALIFIED_EX_12 with
00715  *  @a i_dispatcher = lassPyImpl_function_ ## @a i_module ## __LINE__.
00716  */
00717 #define PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_12( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, s_functionName, s_doc )\
00718     PY_MODULE_FUNCTION_QUALIFIED_EX_12(\
00719         i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, s_functionName, s_doc,\
00720         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_function_, i_module)))
00721 
00722 /** @ingroup Python
00723  *  convenience macro, wraps PY_MODULE_FUNCTION_QUALIFIED_EX_13 with
00724  *  @a i_dispatcher = lassPyImpl_function_ ## @a i_module ## __LINE__.
00725  */
00726 #define PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_13( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, s_functionName, s_doc )\
00727     PY_MODULE_FUNCTION_QUALIFIED_EX_13(\
00728         i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, s_functionName, s_doc,\
00729         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_function_, i_module)))
00730 
00731 /** @ingroup Python
00732  *  convenience macro, wraps PY_MODULE_FUNCTION_QUALIFIED_EX_14 with
00733  *  @a i_dispatcher = lassPyImpl_function_ ## @a i_module ## __LINE__.
00734  */
00735 #define PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_14( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, s_functionName, s_doc )\
00736     PY_MODULE_FUNCTION_QUALIFIED_EX_14(\
00737         i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, s_functionName, s_doc,\
00738         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_function_, i_module)))
00739 
00740 /** @ingroup Python
00741  *  convenience macro, wraps PY_MODULE_FUNCTION_QUALIFIED_EX_15 with
00742  *  @a i_dispatcher = lassPyImpl_function_ ## @a i_module ## __LINE__.
00743  */
00744 #define PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_15( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15, s_functionName, s_doc )\
00745     PY_MODULE_FUNCTION_QUALIFIED_EX_15(\
00746         i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15, s_functionName, s_doc,\
00747         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_function_, i_module)))
00748 
00749 
00750 /** @ingroup Python
00751  *  convenience macro, wraps PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC with @a s_doc = 0.
00752  */
00753 #define PY_MODULE_FUNCTION_QUALIFIED_NAME( i_module, f_cppFunction, t_return, t_params, s_functionName )\
00754         PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC(\
00755             i_module, f_cppFunction, t_return, t_params, s_functionName, 0 )
00756 
00757 /** @ingroup Python
00758  *  convenience macro, wraps PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_0 with @a s_doc = 0.
00759  */
00760 #define PY_MODULE_FUNCTION_QUALIFIED_NAME_0( i_module, f_cppFunction, t_return, s_functionName )\
00761     PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_0(\
00762         i_module, f_cppFunction, t_return, s_functionName, 0 )
00763 
00764 /** @ingroup Python
00765  *  convenience macro, wraps PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_1 with @a s_doc = 0.
00766  */
00767 #define PY_MODULE_FUNCTION_QUALIFIED_NAME_1( i_module, f_cppFunction, t_return, t_P1, s_functionName )\
00768     PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_1(\
00769         i_module, f_cppFunction, t_return, t_P1, s_functionName, 0 )
00770 
00771 /** @ingroup Python
00772  *  convenience macro, wraps PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_2 with @a s_doc = 0.
00773  */
00774 #define PY_MODULE_FUNCTION_QUALIFIED_NAME_2( i_module, f_cppFunction, t_return, t_P1, t_P2, s_functionName )\
00775     PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_2(\
00776         i_module, f_cppFunction, t_return, t_P1, t_P2, s_functionName, 0 )
00777 
00778 /** @ingroup Python
00779  *  convenience macro, wraps PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_3 with @a s_doc = 0.
00780  */
00781 #define PY_MODULE_FUNCTION_QUALIFIED_NAME_3( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, s_functionName )\
00782     PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_3(\
00783         i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, s_functionName, 0 )
00784 
00785 /** @ingroup Python
00786  *  convenience macro, wraps PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_4 with @a s_doc = 0.
00787  */
00788 #define PY_MODULE_FUNCTION_QUALIFIED_NAME_4( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, s_functionName )\
00789     PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_4(\
00790         i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, s_functionName, 0 )
00791 
00792 /** @ingroup Python
00793  *  convenience macro, wraps PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_5 with @a s_doc = 0.
00794  */
00795 #define PY_MODULE_FUNCTION_QUALIFIED_NAME_5( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, s_functionName )\
00796     PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_5(\
00797         i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, s_functionName, 0 )
00798 
00799 /** @ingroup Python
00800  *  convenience macro, wraps PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_6 with @a s_doc = 0.
00801  */
00802 #define PY_MODULE_FUNCTION_QUALIFIED_NAME_6( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, s_functionName )\
00803     PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_6(\
00804         i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, s_functionName, 0 )
00805 
00806 /** @ingroup Python
00807  *  convenience macro, wraps PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_7 with @a s_doc = 0.
00808  */
00809 #define PY_MODULE_FUNCTION_QUALIFIED_NAME_7( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, s_functionName )\
00810     PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_7(\
00811         i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, s_functionName, 0 )
00812 
00813 /** @ingroup Python
00814  *  convenience macro, wraps PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_8 with @a s_doc = 0.
00815  */
00816 #define PY_MODULE_FUNCTION_QUALIFIED_NAME_8( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, s_functionName )\
00817     PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_8(\
00818         i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, s_functionName, 0 )
00819 
00820 /** @ingroup Python
00821  *  convenience macro, wraps PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_9 with @a s_doc = 0.
00822  */
00823 #define PY_MODULE_FUNCTION_QUALIFIED_NAME_9( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, s_functionName )\
00824     PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_9(\
00825         i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, s_functionName, 0 )
00826 
00827 /** @ingroup Python
00828  *  convenience macro, wraps PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_10 with @a s_doc = 0.
00829  */
00830 #define PY_MODULE_FUNCTION_QUALIFIED_NAME_10( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, s_functionName )\
00831     PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_10(\
00832         i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, s_functionName, 0 )
00833 
00834 /** @ingroup Python
00835  *  convenience macro, wraps PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_11 with @a s_doc = 0.
00836  */
00837 #define PY_MODULE_FUNCTION_QUALIFIED_NAME_11( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, s_functionName )\
00838     PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_11(\
00839         i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, s_functionName, 0 )
00840 
00841 /** @ingroup Python
00842  *  convenience macro, wraps PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_12 with @a s_doc = 0.
00843  */
00844 #define PY_MODULE_FUNCTION_QUALIFIED_NAME_12( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, s_functionName )\
00845     PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_12(\
00846         i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, s_functionName, 0 )
00847 
00848 /** @ingroup Python
00849  *  convenience macro, wraps PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_13 with @a s_doc = 0.
00850  */
00851 #define PY_MODULE_FUNCTION_QUALIFIED_NAME_13( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, s_functionName )\
00852     PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_13(\
00853         i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, s_functionName, 0 )
00854 
00855 /** @ingroup Python
00856  *  convenience macro, wraps PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_14 with @a s_doc = 0.
00857  */
00858 #define PY_MODULE_FUNCTION_QUALIFIED_NAME_14( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, s_functionName )\
00859     PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_14(\
00860         i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, s_functionName, 0 )
00861 
00862 /** @ingroup Python
00863  *  convenience macro, wraps PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_15 with @a s_doc = 0.
00864  */
00865 #define PY_MODULE_FUNCTION_QUALIFIED_NAME_15( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15, s_functionName )\
00866     PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_15(\
00867         i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15, s_functionName, 0 )
00868 
00869 
00870 /** @ingroup Python
00871  *  convenience macro, wraps PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC
00872  *  with @a s_functionName = # @a f_cppFunction.
00873  */
00874 #define PY_MODULE_FUNCTION_QUALIFIED_DOC( i_module, f_cppFunction, t_return, t_params, s_doc )\
00875     PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC( \
00876         i_module, f_cppFunction, t_return, t_params, LASS_STRINGIFY(f_cppFunction), s_doc)
00877 
00878 /** @ingroup Python
00879  *  convenience macro, wraps PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_0
00880  *  with @a s_functionName = # @a f_cppFunction.
00881  */
00882 #define PY_MODULE_FUNCTION_QUALIFIED_DOC_0( i_module, f_cppFunction, t_return, s_doc )\
00883     PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_0( \
00884         i_module, f_cppFunction, t_return, LASS_STRINGIFY(f_cppFunction), s_doc)
00885 
00886 /** @ingroup Python
00887  *  convenience macro, wraps PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_1
00888  *  with @a s_functionName = # @a f_cppFunction.
00889  */
00890 #define PY_MODULE_FUNCTION_QUALIFIED_DOC_1( i_module, f_cppFunction, t_return, t_P1, s_doc )\
00891     PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_1( \
00892         i_module, f_cppFunction, t_return, t_P1, LASS_STRINGIFY(f_cppFunction), s_doc)
00893 
00894 /** @ingroup Python
00895  *  convenience macro, wraps PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_2
00896  *  with @a s_functionName = # @a f_cppFunction.
00897  */
00898 #define PY_MODULE_FUNCTION_QUALIFIED_DOC_2( i_module, f_cppFunction, t_return, t_P1, t_P2, s_doc )\
00899     PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_2( \
00900         i_module, f_cppFunction, t_return, t_P1, t_P2, LASS_STRINGIFY(f_cppFunction), s_doc)
00901 
00902 /** @ingroup Python
00903  *  convenience macro, wraps PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_3
00904  *  with @a s_functionName = # @a f_cppFunction.
00905  */
00906 #define PY_MODULE_FUNCTION_QUALIFIED_DOC_3( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, s_doc )\
00907     PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_3( \
00908         i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, LASS_STRINGIFY(f_cppFunction), s_doc)
00909 
00910 /** @ingroup Python
00911  *  convenience macro, wraps PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_4
00912  *  with @a s_functionName = # @a f_cppFunction.
00913  */
00914 #define PY_MODULE_FUNCTION_QUALIFIED_DOC_4( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, s_doc )\
00915     PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_4( \
00916         i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, LASS_STRINGIFY(f_cppFunction), s_doc)
00917 
00918 /** @ingroup Python
00919  *  convenience macro, wraps PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_5
00920  *  with @a s_functionName = # @a f_cppFunction.
00921  */
00922 #define PY_MODULE_FUNCTION_QUALIFIED_DOC_5( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, s_doc )\
00923     PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_5( \
00924         i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, LASS_STRINGIFY(f_cppFunction), s_doc)
00925 
00926 /** @ingroup Python
00927  *  convenience macro, wraps PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_6
00928  *  with @a s_functionName = # @a f_cppFunction.
00929  */
00930 #define PY_MODULE_FUNCTION_QUALIFIED_DOC_6( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, s_doc )\
00931     PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_6( \
00932         i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, LASS_STRINGIFY(f_cppFunction), s_doc)
00933 
00934 /** @ingroup Python
00935  *  convenience macro, wraps PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_7
00936  *  with @a s_functionName = # @a f_cppFunction.
00937  */
00938 #define PY_MODULE_FUNCTION_QUALIFIED_DOC_7( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, s_doc )\
00939     PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_7( \
00940         i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, LASS_STRINGIFY(f_cppFunction), s_doc)
00941 
00942 /** @ingroup Python
00943  *  convenience macro, wraps PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_8
00944  *  with @a s_functionName = # @a f_cppFunction.
00945  */
00946 #define PY_MODULE_FUNCTION_QUALIFIED_DOC_8( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, s_doc )\
00947     PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_8( \
00948         i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, LASS_STRINGIFY(f_cppFunction), s_doc)
00949 
00950 /** @ingroup Python
00951  *  convenience macro, wraps PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_9
00952  *  with @a s_functionName = # @a f_cppFunction.
00953  */
00954 #define PY_MODULE_FUNCTION_QUALIFIED_DOC_9( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, s_doc )\
00955     PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_9( \
00956         i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, LASS_STRINGIFY(f_cppFunction), s_doc)
00957 
00958 /** @ingroup Python
00959  *  convenience macro, wraps PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_10
00960  *  with @a s_functionName = # @a f_cppFunction.
00961  */
00962 #define PY_MODULE_FUNCTION_QUALIFIED_DOC_10( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, s_doc )\
00963     PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_10( \
00964         i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, LASS_STRINGIFY(f_cppFunction), s_doc)
00965 
00966 /** @ingroup Python
00967  *  convenience macro, wraps PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_11
00968  *  with @a s_functionName = # @a f_cppFunction.
00969  */
00970 #define PY_MODULE_FUNCTION_QUALIFIED_DOC_11( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, s_doc )\
00971     PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_11( \
00972         i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, LASS_STRINGIFY(f_cppFunction), s_doc)
00973 
00974 /** @ingroup Python
00975  *  convenience macro, wraps PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_12
00976  *  with @a s_functionName = # @a f_cppFunction.
00977  */
00978 #define PY_MODULE_FUNCTION_QUALIFIED_DOC_12( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, s_doc )\
00979     PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_12( \
00980         i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, LASS_STRINGIFY(f_cppFunction), s_doc)
00981 
00982 /** @ingroup Python
00983  *  convenience macro, wraps PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_13
00984  *  with @a s_functionName = # @a f_cppFunction.
00985  */
00986 #define PY_MODULE_FUNCTION_QUALIFIED_DOC_13( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, s_doc )\
00987     PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_13( \
00988         i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, LASS_STRINGIFY(f_cppFunction), s_doc)
00989 
00990 /** @ingroup Python
00991  *  convenience macro, wraps PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_14
00992  *  with @a s_functionName = # @a f_cppFunction.
00993  */
00994 #define PY_MODULE_FUNCTION_QUALIFIED_DOC_14( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, s_doc )\
00995     PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_14( \
00996         i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, LASS_STRINGIFY(f_cppFunction), s_doc)
00997 
00998 /** @ingroup Python
00999  *  convenience macro, wraps PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_15
01000  *  with @a s_functionName = # @a f_cppFunction.
01001  */
01002 #define PY_MODULE_FUNCTION_QUALIFIED_DOC_15( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15, s_doc )\
01003     PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_15( \
01004         i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15, LASS_STRINGIFY(f_cppFunction), s_doc)
01005 
01006 
01007 /** @ingroup Python
01008  *  convenience macro, wraps PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC
01009  *  with @a s_functionName = # @a f_cppFunction and @a s_doc = 0.
01010  */
01011 #define PY_MODULE_FUNCTION_QUALIFIED( i_module, f_cppFunction, t_return, t_params )\
01012     PY_MODULE_FUNCTION_QUALIFIED_DOC( i_module, f_cppFunction, t_return, t_params, 0 )
01013 
01014 /** @ingroup Python
01015  *  convenience macro, wraps PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_0
01016  *  with @a s_functionName = # @a f_cppFunction and @a s_doc = 0.
01017  */
01018 #define PY_MODULE_FUNCTION_QUALIFIED_0( i_module, f_cppFunction, t_return )\
01019     PY_MODULE_FUNCTION_QUALIFIED_DOC_0( i_module, f_cppFunction, t_return, 0 )
01020 
01021 /** @ingroup Python
01022  *  convenience macro, wraps PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_1
01023  *  with @a s_functionName = # @a f_cppFunction and @a s_doc = 0.
01024  */
01025 #define PY_MODULE_FUNCTION_QUALIFIED_1( i_module, f_cppFunction, t_return, t_P1 )\
01026     PY_MODULE_FUNCTION_QUALIFIED_DOC_1( i_module, f_cppFunction, t_return, t_P1, 0 )
01027 
01028 /** @ingroup Python
01029  *  convenience macro, wraps PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_2
01030  *  with @a s_functionName = # @a f_cppFunction and @a s_doc = 0.
01031  */
01032 #define PY_MODULE_FUNCTION_QUALIFIED_2( i_module, f_cppFunction, t_return, t_P1, t_P2 )\
01033     PY_MODULE_FUNCTION_QUALIFIED_DOC_2( i_module, f_cppFunction, t_return, t_P1, t_P2, 0 )
01034 
01035 /** @ingroup Python
01036  *  convenience macro, wraps PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_3
01037  *  with @a s_functionName = # @a f_cppFunction and @a s_doc = 0.
01038  */
01039 #define PY_MODULE_FUNCTION_QUALIFIED_3( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3 )\
01040     PY_MODULE_FUNCTION_QUALIFIED_DOC_3( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, 0 )
01041 
01042 /** @ingroup Python
01043  *  convenience macro, wraps PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_4
01044  *  with @a s_functionName = # @a f_cppFunction and @a s_doc = 0.
01045  */
01046 #define PY_MODULE_FUNCTION_QUALIFIED_4( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4 )\
01047     PY_MODULE_FUNCTION_QUALIFIED_DOC_4( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, 0 )
01048 
01049 /** @ingroup Python
01050  *  convenience macro, wraps PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_5
01051  *  with @a s_functionName = # @a f_cppFunction and @a s_doc = 0.
01052  */
01053 #define PY_MODULE_FUNCTION_QUALIFIED_5( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5 )\
01054     PY_MODULE_FUNCTION_QUALIFIED_DOC_5( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, 0 )
01055 
01056 /** @ingroup Python
01057  *  convenience macro, wraps PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_6
01058  *  with @a s_functionName = # @a f_cppFunction and @a s_doc = 0.
01059  */
01060 #define PY_MODULE_FUNCTION_QUALIFIED_6( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6 )\
01061     PY_MODULE_FUNCTION_QUALIFIED_DOC_6( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, 0 )
01062 
01063 /** @ingroup Python
01064  *  convenience macro, wraps PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_7
01065  *  with @a s_functionName = # @a f_cppFunction and @a s_doc = 0.
01066  */
01067 #define PY_MODULE_FUNCTION_QUALIFIED_7( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7 )\
01068     PY_MODULE_FUNCTION_QUALIFIED_DOC_7( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, 0 )
01069 
01070 /** @ingroup Python
01071  *  convenience macro, wraps PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_8
01072  *  with @a s_functionName = # @a f_cppFunction and @a s_doc = 0.
01073  */
01074 #define PY_MODULE_FUNCTION_QUALIFIED_8( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8 )\
01075     PY_MODULE_FUNCTION_QUALIFIED_DOC_8( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, 0 )
01076 
01077 /** @ingroup Python
01078  *  convenience macro, wraps PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_9
01079  *  with @a s_functionName = # @a f_cppFunction and @a s_doc = 0.
01080  */
01081 #define PY_MODULE_FUNCTION_QUALIFIED_9( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9 )\
01082     PY_MODULE_FUNCTION_QUALIFIED_DOC_9( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, 0 )
01083 
01084 /** @ingroup Python
01085  *  convenience macro, wraps PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_10
01086  *  with @a s_functionName = # @a f_cppFunction and @a s_doc = 0.
01087  */
01088 #define PY_MODULE_FUNCTION_QUALIFIED_10( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10 )\
01089     PY_MODULE_FUNCTION_QUALIFIED_DOC_10( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, 0 )
01090 
01091 /** @ingroup Python
01092  *  convenience macro, wraps PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_11
01093  *  with @a s_functionName = # @a f_cppFunction and @a s_doc = 0.
01094  */
01095 #define PY_MODULE_FUNCTION_QUALIFIED_11( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11 )\
01096     PY_MODULE_FUNCTION_QUALIFIED_DOC_11( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, 0 )
01097 
01098 /** @ingroup Python
01099  *  convenience macro, wraps PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_12
01100  *  with @a s_functionName = # @a f_cppFunction and @a s_doc = 0.
01101  */
01102 #define PY_MODULE_FUNCTION_QUALIFIED_12( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12 )\
01103     PY_MODULE_FUNCTION_QUALIFIED_DOC_12( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, 0 )
01104 
01105 /** @ingroup Python
01106  *  convenience macro, wraps PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_13
01107  *  with @a s_functionName = # @a f_cppFunction and @a s_doc = 0.
01108  */
01109 #define PY_MODULE_FUNCTION_QUALIFIED_13( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13 )\
01110     PY_MODULE_FUNCTION_QUALIFIED_DOC_13( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, 0 )
01111 
01112 /** @ingroup Python
01113  *  convenience macro, wraps PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_14
01114  *  with @a s_functionName = # @a f_cppFunction and @a s_doc = 0.
01115  */
01116 #define PY_MODULE_FUNCTION_QUALIFIED_14( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14 )\
01117     PY_MODULE_FUNCTION_QUALIFIED_DOC_14( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, 0 )
01118 
01119 /** @ingroup Python
01120  *  convenience macro, wraps PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_15
01121  *  with @a s_functionName = # @a f_cppFunction and @a s_doc = 0.
01122  */
01123 #define PY_MODULE_FUNCTION_QUALIFIED_15( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15 )\
01124     PY_MODULE_FUNCTION_QUALIFIED_DOC_15( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15, 0 )
01125 
01126 
01127 
01128 
01129 
01130 // --- classes -------------------------------------------------------------------------------------
01131 
01132 /** @ingroup Python
01133  *  Bring alive one derived pupil of PyObjectPlus
01134  *
01135  *  @param t_cppClass
01136  *      the type of the class to be brought alive
01137  *  @param s_className
01138  *      the name of class as shown in Python (zero terminated C string)
01139  *  @param i_uniqueClassIdentifier
01140  *      a unique identifier for household stuff
01141  *
01142  *  @remark put each PY_DECLARE_CLASS_EX in only one translation unit.  So not in headers!
01143  */
01144 #define PY_DECLARE_CLASS_EX( t_cppClass, s_className, i_uniqueClassIdentifier ) \
01145     PyTypeObject t_cppClass::_lassPyType = {\
01146         PY_STATIC_FUNCTION_FORWARD_PLUS( t_cppClass, s_className ) };\
01147     ::std::vector<PyMethodDef> t_cppClass::_lassPyMethods;\
01148     ::std::vector<PyGetSetDef> t_cppClass::_lassPyGetSetters;\
01149     ::lass::python::impl::TStaticMembers t_cppClass::_lassPyStatics;\
01150     ::lass::python::impl::TCompareFuncs t_cppClass::_lassPyCompareFuncs;\
01151     LASS_EXECUTE_BEFORE_MAIN_EX( LASS_CONCATENATE( lassPythonImplExecutePyDeclareClass_, i_uniqueClassIdentifier ),\
01152         t_cppClass::_lassPyMethods.push_back( ::lass::python::impl::createPyMethodDef( 0, 0, 0, 0 ) ) ; \
01153         t_cppClass::_lassPyGetSetters.push_back( ::lass::python::impl::createPyGetSetDef( 0, 0, 0, 0, 0 ) ) ; \
01154 )
01155 
01156 /** @ingroup Python
01157  *  convenience macro, wraps PY_DECLARE_CLASS_EX for with
01158  *  @a i_uniqueClassIdentifier = @a i_cppClass
01159  */
01160 #define PY_DECLARE_CLASS_NAME( i_cppClass, s_className )\
01161     PY_DECLARE_CLASS_EX( i_cppClass, s_className, i_cppClass )
01162 
01163 /** @ingroup Python
01164  *  convenience macro, wraps PY_DECLARE_CLASS_EX for with
01165  *  @a i_uniqueClassIdentifier = @a i_cppClass and @a s_className = # @a i_cppClass
01166  */
01167 #define PY_DECLARE_CLASS( i_cppClass ) \
01168     PY_DECLARE_CLASS_EX( i_cppClass, LASS_STRINGIFY(i_cppClass), i_cppClass );
01169 
01170 
01171 
01172 #define PY_DECLARE_CLASS_PLUS_NAME( i_cppClass, s_className ) \
01173     PY_DECLARE_CLASS_PLUS_EX( i_cppClass, s_className, i_cppClass )
01174 
01175 #define PY_DECLARE_CLASS_PLUS( i_cppClass ) \
01176     PY_DECLARE_CLASS_PLUS_EX( i_cppClass, LASS_STRINGIFY( i_cppClass ) i_cppClass )
01177 
01178 
01179 /** @ingroup Python
01180  *  Inject a class in a module
01181  *
01182  *  @remark This is to be done at @e runtime!  So, it has to be somewhere in your main or any
01183  *  function called by main.
01184  *
01185  *  @param t_cppClass
01186  *      the type of the class to be injected
01187  *  @param i_module
01188  *      the identifier of the module object to inject the class in.
01189  *  @param s_doc
01190  *      documentation of class as shown in Python (zero terminated C string)
01191  */
01192  /*  // executing this before the main has unwanted consequences: the module or python interpreter may not yet have been
01193     // initialized
01194 namespace impl { typedef std::pair< std::string, PyObject* > TPairStringPyObject; }
01195 #define PY_MODULE_CLASS( i_module, t_cppClass, s_doc ) \
01196     LASS_EXECUTE_BEFORE_MAIN( {\
01197         impl::TPairStringPyObject classForModule = ::lass::python::impl::prepareClassForModuleInjection< t_cppClass >(LASS_STRINGIFY(i_module), s_doc);\
01198         LASS_CONCATENATE( lassPythonModuleObjects_, i_module ).push_back( classForModule );\
01199     } )
01200 */
01201 
01202 /** @ingroup Python
01203  *  Inject a class in a module
01204  *
01205  *  @remark This is to be done at @e runtime!  So, it has to be somewhere in your main or any
01206  *  function called by main.
01207  *  @deprecated use PY_MODULE_CLASS instead
01208  *
01209  *  @param t_cppClass
01210  *      the type of the class to be injected
01211  *  @param i_module
01212  *      the identifier of the module object to inject the class in.
01213  *  @param s_doc
01214  *      documentation of class as shown in Python (zero terminated C string)
01215  */
01216 #define PY_INJECT_CLASS_IN_MODULE( t_cppClass, i_module, s_doc ) \
01217     {\
01218         ::lass::python::impl::injectClassInModule< t_cppClass >(\
01219             LASS_CONCATENATE(lassPythonModule_, i_module), s_doc);\
01220     }
01221 
01222 /** @ingroup Python
01223  *  @deprecated
01224  */
01225 #define PY_INJECT_CLASS_IN_MODULE_BEFORE_MAIN( i_cppClass, i_module, s_doc ) \
01226     extern PyObject* LASS_CONCATENATE( lassPythonModule_, i_module );\
01227     LASS_EXECUTE_BEFORE_MAIN_EX\
01228     ( LASS_CONCATENATE_3( lassExecutePyInjectClassInModule_, i_cppClass, i_module ),\
01229         PY_INJECT_CLASS_IN_MODULE_AT_RUNTIME( i_cppClass, i_module, s_doc );\
01230     )
01231 
01232 
01233 
01234 /** @ingroup Python
01235  *  export some value as a static constant of a class
01236  *
01237  *  @param i_cppClass
01238  *      the class to add the constant to.
01239  *  @param s_name
01240  *      name of static constant as shown in python (zero terminated C string)
01241  *  @param v_value
01242  *      the value of the constant.  it should be convertible to a PyObject by using the
01243  *      python::PyExportTraits::build functions
01244  */
01245 #define PY_CLASS_STATIC_CONST( i_cppClass, s_name, v_value )\
01246     LASS_EXECUTE_BEFORE_MAIN_EX\
01247     ( LASS_CONCATENATE( lassExecutePyClassStaticConst, i_cppClass ),\
01248         ::lass::python::impl::addClassStaticConst<i_cppClass>(s_name, v_value);\
01249     )
01250 
01251 
01252 
01253 // --- inner class ---------------------------------------------------------------------------------
01254 
01255 /** @ingroup Python
01256  *  Adds an inner class.
01257  *
01258  *  @param t_outerCppClass
01259  *      the C++ class you want to add an inner class to.
01260  *  @param t_innerCppClass
01261  *      the C++ class you want to add as inner class.
01262  *  @param s_name
01263  *      the name the inner class will have in python (zero terminated C string)
01264  *  @param s_doc
01265  *      documentation of inner class as shown in Python (zero terminated C string)
01266  *  @param i_uniqueId
01267  *      some identifier that is unique to this innerclass/outerclass combination
01268  *
01269  *  Invoke this macro to add an inner class to a class in Python.  Both classes (inner and outer)
01270  *  should be derived from PyObjectPlus.
01271  *
01272  *  @code
01273  *  // inner_and_outer.h
01274  *  class Inner
01275  *  {
01276  *      PY_HEADER(python::PyObjectPlus)
01277  *  public:
01278  *      ...
01279  *  };
01280  *
01281  *  class Outer
01282  *  {
01283  *      PY_HEADER(python::PyObjectPlus)
01284  *  public:
01285  *      ...
01286  *  };
01287  *
01288  *  // inner_and_outer.cpp
01289  *  PY_DECLARE_CLASS(Inner)
01290  *  PY_DECLARE_CLASS(Outer)
01291  *  PY_CLASS_INNCER_CLASS_EX( Outer, Inner, "Inner", "Inner class" )
01292  *  @endcode
01293  */
01294 #define PY_CLASS_INNER_CLASS_EX( t_outerCppClass, t_innerCppClass, s_name, s_doc, i_uniqueClassId )\
01295     LASS_EXECUTE_BEFORE_MAIN_EX( LASS_CONCATENATE(lassPythonImplExecuteBeforeMain_, i_uniqueClassId),\
01296         ::lass::python::impl::addClassInnerClass<t_innerCppClass>(t_outerCppClass::_lassPyStatics, s_name, s_doc);\
01297     )
01298 
01299 /** @ingroup Python
01300  *  convenience macro, wraps PY_CLASS_INNER_CLASS_EX with @a i_uniqueId = @a i_outerCppClass ## @a i_innerCppClass.
01301  */
01302 #define PY_CLASS_INNER_CLASS_NAME_DOC( i_outerCppClass, i_innerCppClass, s_name, s_doc )\
01303     PY_CLASS_INNER_CLASS_EX( i_outerCppClass, i_innerCppClass, s_name, s_doc,\
01304         LASS_CONCATENATE(i_outerCppClass, i_innerCppClass) )
01305 
01306 /** @ingroup Python
01307  *  convenience macro, wraps PY_CLASS_INNER_CLASS_NAME_DOC with @a s_doc = 0.
01308  */
01309 #define PY_CLASS_INNER_CLASS_NAME( i_outerCppClass, i_innerCppClass, s_name)\
01310     PY_CLASS_INNER_CLASS_NAME_DOC( i_outerCppClass, i_innerCppClass, s_name, 0)
01311 
01312 /** @ingroup Python
01313  *  convenience macro, wraps PY_CLASS_INNER_CLASS_NAME_DOC with @a s_name = "@a i_innerCppClass".
01314  */
01315 #define PY_CLASS_INNER_CLASS_DOC( i_outerCppClass, i_innerCppClass, s_doc )\
01316     PY_CLASS_INNER_CLASS_NAME_DOC( i_outerCppClass, i_innerCppClass, LASS_STRINGIFY(i_innerCppClass), s_doc)
01317 
01318 /** @ingroup Python
01319  *  convenience macro, wraps PY_CLASS_INNER_CLASS_NAME_DOC with @a s_name = "@a i_innerCppClass" and s_doc = 0.
01320  */
01321 #define PY_CLASS_INNER_CLASS( i_outerCppClass, i_innerCppClass)\
01322     PY_CLASS_INNER_CLASS_NAME_DOC( i_outerCppClass, i_innerCppClass, LASS_STRINGIFY(i_innerCppClass), 0)
01323 
01324 
01325 // --- methods -------------------------------------------------------------------------------------
01326 /** @ingroup Python
01327 *   @deprecated 
01328 *   This macro is provided when there is need for a function in Python where there is no
01329 *   direct equivalent in C++.  An example is when you would need a true polymorphic python list returned
01330 *   from a C++ function.  Or when you need sth very Python specific returning from your function where there
01331 *   is no PyExportTraits::build defined for.
01332 */
01333 #define PY_CLASS_PY_METHOD_EX( i_cppClass, i_cppMethod, s_methodName, s_doc  )\
01334     inline PyObject* LASS_CONCATENATE_3( staticDispatch, i_cppClass, i_cppMethod) ( PyObject* iObject, PyObject* iArgs )\
01335     {\
01336         if (!PyType_IsSubtype(iObject->ob_type , &i_cppClass::_lassPyType ))\
01337         {\
01338             PyErr_Format(PyExc_TypeError,"PyObject not castable to %s", i_cppClass::_lassPyType.tp_name);\
01339             return 0;\
01340         }\
01341         i_cppClass* object = static_cast<i_cppClass*>(iObject);\
01342         return object->i_cppMethod( iArgs );\
01343     }\
01344     LASS_EXECUTE_BEFORE_MAIN_EX\
01345     ( LASS_CONCATENATE_3( lassExecutePyClassPyMethod_, i_cppClass, i_cppMethod ),\
01346         i_cppClass::_lassPyMethods.insert(\
01347             i_cppClass::_lassPyMethods.begin(),\
01348             ::lass::python::impl::createPyMethodDef(\
01349                 s_methodName, (PyCFunction) LASS_CONCATENATE_3( staticDispatch, i_cppClass, i_cppMethod),\
01350                 METH_VARARGS, s_doc));\
01351     )
01352 
01353 
01354 // --- methods -------------------------------------------------------------------------------------
01355 
01356 /** @ingroup Python
01357  *  Exports a C++ method to Python
01358  *
01359  *  @param t_cppClass
01360  *      the C++ class you're exporting a method of
01361  *  @param i_cppMethod
01362  *      the name of the method in C++
01363  *  @param s_methodName
01364  *      the name the method will have in Python
01365  *  @param s_doc
01366  *      documentation of method as shown in Python (zero terminated C string)
01367  *  @param i_dispatcher
01368  *      A unique name of the static C++ dispatcher function to be generated.  This name will be
01369  *      used for the names of automatic generated variables and functions and should be unique
01370  *      per exported C++ class/method pair.
01371  *
01372  *  Invoke this macro to export a method to python.  You can use this to generate overloaded
01373  *  Python methods by exporting multiple methods with the same @a s_methodName name.
01374  *
01375  *  @note
01376  *      unlike in C++ overload issues will be not be solved by best fit, but by first fit.
01377  *      If such an overloaded Python method is called, the different overloads are called in
01378  *      the same order of export.  The first one that fits the arguments will be called.
01379  *
01380  *  @note
01381  *      the documentation of the Python method will be the @a s_doc of the first exported
01382  *      overload.
01383  *
01384  *  @code
01385  *  // foo.h
01386  *  class Foo
01387  *  {
01388  *      PY_HEADER(python::PyObjectPlus)
01389  *  public:
01390  *      void barA(int a);
01391  *      void barB(const std::string& b) const;
01392  *  };
01393  *
01394  *  // foo.cpp
01395  *  PY_DECLARE_CLASS(Foo)
01396  *  PY_CLASS_METHOD_EX(Foo, barA, "bar", 0, foo_bar_a)
01397  *  PY_CLASS_METHOD_EX(Foo, barB, "bar", 0, foo_bar_b)
01398  *  @endcode
01399  */
01400 #define PY_CLASS_METHOD_EX(t_cppClass, i_cppMethod, s_methodName, s_doc, i_dispatcher)\
01401     PY_CLASS_METHOD_IMPL(t_cppClass, &TCppClass::i_cppMethod, s_methodName, s_doc, i_dispatcher,\
01402         ::lass::python::impl::CallMethod<TCppClass>::call)
01403 
01404 /** @ingroup Python
01405  *  convenience macro, wraps PY_CLASS_METHOD_EX with
01406  *  @a i_dispatcher = lassPyImpl_method_ ## @a i_cppClass ## __LINE__.
01407  */
01408 #define PY_CLASS_METHOD_NAME_DOC( i_cppClass, i_cppMethod, s_methodName, s_doc )\
01409         PY_CLASS_METHOD_EX(\
01410             i_cppClass, i_cppMethod, s_methodName, s_doc,\
01411             LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)))
01412 
01413 /** @ingroup Python
01414  *  convenience macro, wraps PY_CLASS_METHOD_NAME_DOC with @a s_doc = 0.
01415  */
01416 #define PY_CLASS_METHOD_NAME( i_cppClass, i_cppMethod, s_methodName )\
01417         PY_CLASS_METHOD_NAME_DOC( i_cppClass, i_cppMethod, s_methodName, 0 )
01418 
01419 /** @ingroup Python
01420  *  convenience macro, wraps PY_CLASS_METHOD_NAME_DOC with @a s_methodName = # @a i_cppMethod.
01421  */
01422 #define PY_CLASS_METHOD_DOC( i_cppClass, i_cppMethod, s_doc )\
01423         PY_CLASS_METHOD_NAME_DOC( i_cppClass, i_cppMethod, LASS_STRINGIFY(i_cppMethod), s_doc)
01424 
01425 /** @ingroup Python
01426  *  convenience macro, wraps PY_CLASS_METHOD_NAME_DOC  with @a s_methodName = # @a i_cppMethod
01427  *  and @a s_doc = 0.
01428  */
01429 #define PY_CLASS_METHOD( i_cppClass, i_cppMethod )\
01430         PY_CLASS_METHOD_DOC( i_cppClass, i_cppMethod, 0 )
01431 
01432 
01433 
01434 // --- explicit qualified methods ------------------------------------------------------------------
01435 
01436 /** @ingroup Python
01437  *  @sa PY_CLASS_METHOD_EX
01438  *  @brief Exports a C++ method to Python will fully qualified return type and parameters
01439  *
01440  *  @param t_cppClass
01441  *      the C++ class you're exporting a method of
01442  *  @param i_cppMethod
01443  *      the name of the method in C++
01444  *  @param t_return
01445  *      the return type of @a i_cppMethod
01446  *  @param t_params
01447  *      a lass::meta::TypeList of the parameter types of @a i_cppMethod
01448  *  @param s_methodName
01449  *      the name the method will have in Python
01450  *  @param s_doc
01451  *      documentation of method as shown in Python (zero terminated C string)
01452  *  @param i_dispatcher
01453  *      A unique name of the static C++ dispatcher function to be generated.  This name will be
01454  *      used for the names of automatic generated variables and functions and should be unique
01455  *      per exported C++ class/method pair.
01456  *
01457  *  You can use this macro instead of PY_CLASS_METHOD_EX if there's an ambiguity on @a i_cppMethod.
01458  *  This macro will help you to solve this ambiguity by explicitely specifying return type
01459  *  and parameter types.
01460  *
01461  *  Just like PY_CLASS_METHOD_EX, PY_CLASS_METHOD_QUALIFIED_EX allows for overloading.  These
01462  *  overloads may be mixed with PY_CLASS_METHOD_EX methods.
01463  *
01464  *  @code
01465  *  // foo.h
01466  *  class Foo
01467  *  {
01468  *      PY_HEADER(python::PyObjectPlus)
01469  *  public:
01470  *      void bar(int a);
01471  *      void bar(const std::string& b) const;
01472  *  };
01473  *
01474  *  // foo.cpp
01475  *  PY_DECLARE_CLASS(Foo)
01476  *  PY_CLASS_METHOD_QUALIFIED_EX(Foo, bar, void, meta::type_list::Make<int>::Type, "bar", 0, foo_bar_a)
01477  *  PY_CLASS_METHOD_QUALIFIED_EX(Foo, bar, void, meta::type_list::Make<const std::string&>::Type, "bar", 0, foo_bar_b)
01478  *  @endcode
01479  */
01480 /*
01481 #define PY_CLASS_METHOD_QUALIFIED_EX(t_cppClass, i_cppMethod, t_return, t_params, s_methodName, s_doc, i_dispatcher)\
01482     PY_CLASS_METHOD_IMPL(t_cppClass, &TCppClass::i_cppMethod, s_methodName, s_doc, i_dispatcher,\
01483         (&::lass::python::impl::ExplicitResolver<TCppClass,t_return,t_params>::TImpl::callMethod))
01484 /*/
01485 #define PY_CLASS_METHOD_QUALIFIED_EX(t_cppClass, i_cppMethod, t_return, t_params, s_methodName, s_doc, i_dispatcher)\
01486     static ::lass::python::impl::OverloadLink LASS_CONCATENATE(i_dispatcher, _overloadChain);\
01487     PyObject* i_dispatcher(PyObject* iObject, PyObject* iArgs)\
01488     {\
01489         PyObject* result = 0;\
01490         if (LASS_CONCATENATE(i_dispatcher, _overloadChain)(iObject, iArgs, result))\
01491         {\
01492             return result;\
01493         }\
01494         LASS_ASSERT(result == 0);\
01495         typedef ::lass::python::impl::ShadowTraits< t_cppClass > TShadowTraits;\
01496         typedef TShadowTraits::TCppClass TCppClass;\
01497         const TCppClass* const constCppObject = TShadowTraits::constCppObject(iObject);\
01498         if (::lass::python::impl::ExplicitResolver<TCppClass,t_return,t_params>::TImpl::isConstMember( &TCppClass::i_cppMethod )) \
01499         {\
01500             if (!constCppObject)\
01501                 return 0;\
01502             return ::lass::python::impl::ExplicitResolver<TCppClass,t_return,t_params>::TImpl::callMethod(\
01503                 iArgs, const_cast<TCppClass*>(constCppObject), &TCppClass::i_cppMethod); \
01504         }\
01505         TCppClass* const cppObject = TShadowTraits::cppObject(iObject);\
01506         if (!cppObject)\
01507         {\
01508             return 0;\
01509         }\
01510         return ::lass::python::impl::ExplicitResolver<TCppClass,t_return,t_params>::TImpl::callMethod(\
01511             iArgs, cppObject, &TCppClass::i_cppMethod); \
01512     }\
01513     LASS_EXECUTE_BEFORE_MAIN_EX(LASS_CONCATENATE(i_dispatcher, _executeBeforeMain),\
01514         ::lass::python::impl::addClassMethod(\
01515             t_cppClass::_lassPyType,\
01516             t_cppClass::_lassPyMethods, t_cppClass::_lassPyCompareFuncs,\
01517             s_methodName, s_doc, \
01518             i_dispatcher,\
01519             ::lass::python::impl::unaryDispatcher<i_dispatcher>,\
01520             ::lass::python::impl::binaryDispatcher<i_dispatcher>,\
01521             ::lass::python::impl::ternaryDispatcher<i_dispatcher>,\
01522             ::lass::python::impl::ssizeargDispatcher<i_dispatcher>,\
01523             ::lass::python::impl::ssizessizeargDispatcher<i_dispatcher>,\
01524             ::lass::python::impl::lenDispatcher<i_dispatcher>,\
01525             ::lass::python::impl::ssizeobjargDispatcher<i_dispatcher>,\
01526             ::lass::python::impl::ssizessizeobjargDispatcher<i_dispatcher>,\
01527             ::lass::python::impl::objobjDispatcher<i_dispatcher>,\
01528             LASS_CONCATENATE(i_dispatcher, _overloadChain));\
01529     )
01530 /**/
01531 
01532 /** @ingroup Python
01533  *  @sa PY_CLASS_METHOD_QUALIFIED_EX
01534  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_EX for 0 arguments
01535  */
01536 #define PY_CLASS_METHOD_QUALIFIED_EX_0( t_cppClass, i_cppMethod, t_return, s_methodName, s_doc, i_dispatcher )\
01537     PY_CLASS_METHOD_QUALIFIED_EX(\
01538         t_cppClass, i_cppMethod, t_return, ::lass::meta::NullType, s_methodName, s_doc, i_dispatcher )
01539 
01540 /** @ingroup Python
01541  *  @sa PY_CLASS_METHOD_QUALIFIED_EX
01542  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_EX for 1 arguments
01543  */
01544 #define PY_CLASS_METHOD_QUALIFIED_EX_1( t_cppClass, i_cppMethod, t_return, t_P1, s_methodName, s_doc, i_dispatcher )\
01545     typedef ::lass::meta::type_list::Make< t_P1 >::Type \
01546         LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams));\
01547     PY_CLASS_METHOD_QUALIFIED_EX(\
01548         t_cppClass, i_cppMethod, t_return,\
01549         LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams)), s_methodName, s_doc,\
01550         i_dispatcher )
01551 
01552 /** @ingroup Python
01553  *  @sa PY_CLASS_METHOD_QUALIFIED_EX
01554  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_EX for 2 arguments
01555  */
01556 #define PY_CLASS_METHOD_QUALIFIED_EX_2( t_cppClass, i_cppMethod, t_return, t_P1, t_P2, s_methodName, s_doc, i_dispatcher )\
01557     typedef ::lass::meta::type_list::Make< t_P1, t_P2 >::Type \
01558         LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams));\
01559     PY_CLASS_METHOD_QUALIFIED_EX(\
01560         t_cppClass, i_cppMethod, t_return,\
01561         LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams)), s_methodName, s_doc,\
01562         i_dispatcher )
01563 
01564 /** @ingroup Python
01565  *  @sa PY_CLASS_METHOD_QUALIFIED_EX
01566  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_EX for 3 arguments
01567  */
01568 #define PY_CLASS_METHOD_QUALIFIED_EX_3( t_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, s_methodName, s_doc, i_dispatcher )\
01569     typedef ::lass::meta::type_list::Make< t_P1, t_P2, t_P3 >::Type \
01570         LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams));\
01571     PY_CLASS_METHOD_QUALIFIED_EX(\
01572         t_cppClass, i_cppMethod, t_return,\
01573         LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams)), s_methodName, s_doc,\
01574         i_dispatcher )
01575 
01576 /** @ingroup Python
01577  *  @sa PY_CLASS_METHOD_QUALIFIED_EX
01578  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_EX for 4 arguments
01579  */
01580 #define PY_CLASS_METHOD_QUALIFIED_EX_4( t_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, s_methodName, s_doc, i_dispatcher )\
01581     typedef ::lass::meta::type_list::Make< t_P1, t_P2, t_P3, t_P4 >::Type \
01582         LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams));\
01583     PY_CLASS_METHOD_QUALIFIED_EX(\
01584         t_cppClass, i_cppMethod, t_return,\
01585         LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams)), s_methodName, s_doc,\
01586         i_dispatcher )
01587 
01588 /** @ingroup Python
01589  *  @sa PY_CLASS_METHOD_QUALIFIED_EX
01590  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_EX for 5 arguments
01591  */
01592 #define PY_CLASS_METHOD_QUALIFIED_EX_5( t_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, s_methodName, s_doc, i_dispatcher )\
01593     typedef ::lass::meta::type_list::Make< t_P1, t_P2, t_P3, t_P4, t_P5 >::Type \
01594         LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams));\
01595     PY_CLASS_METHOD_QUALIFIED_EX(\
01596         t_cppClass, i_cppMethod, t_return,\
01597         LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams)), s_methodName, s_doc,\
01598         i_dispatcher )
01599 
01600 /** @ingroup Python
01601  *  @sa PY_CLASS_METHOD_QUALIFIED_EX
01602  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_EX for 6 arguments
01603  */
01604 #define PY_CLASS_METHOD_QUALIFIED_EX_6( t_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, s_methodName, s_doc, i_dispatcher )\
01605     typedef ::lass::meta::type_list::Make< t_P1, t_P2, t_P3, t_P4, t_P5, t_P6 >::Type \
01606         LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams));\
01607     PY_CLASS_METHOD_QUALIFIED_EX(\
01608         t_cppClass, i_cppMethod, t_return,\
01609         LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams)), s_methodName, s_doc,\
01610         i_dispatcher )
01611 
01612 /** @ingroup Python
01613  *  @sa PY_CLASS_METHOD_QUALIFIED_EX
01614  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_EX for 7 arguments
01615  */
01616 #define PY_CLASS_METHOD_QUALIFIED_EX_7( t_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, s_methodName, s_doc, i_dispatcher )\
01617     typedef ::lass::meta::type_list::Make< t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7 >::Type \
01618         LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams));\
01619     PY_CLASS_METHOD_QUALIFIED_EX(\
01620         t_cppClass, i_cppMethod, t_return,\
01621         LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams)), s_methodName, s_doc,\
01622         i_dispatcher )
01623 
01624 /** @ingroup Python
01625  *  @sa PY_CLASS_METHOD_QUALIFIED_EX
01626  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_EX for 8 arguments
01627  */
01628 #define PY_CLASS_METHOD_QUALIFIED_EX_8( t_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, s_methodName, s_doc, i_dispatcher )\
01629     typedef ::lass::meta::type_list::Make< t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8 >::Type \
01630         LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams));\
01631     PY_CLASS_METHOD_QUALIFIED_EX(\
01632         t_cppClass, i_cppMethod, t_return,\
01633         LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams)), s_methodName, s_doc,\
01634         i_dispatcher )
01635 
01636 /** @ingroup Python
01637  *  @sa PY_CLASS_METHOD_QUALIFIED_EX
01638  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_EX for 9 arguments
01639  */
01640 #define PY_CLASS_METHOD_QUALIFIED_EX_9( t_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, s_methodName, s_doc, i_dispatcher )\
01641     typedef ::lass::meta::type_list::Make< t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9 >::Type \
01642         LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams));\
01643     PY_CLASS_METHOD_QUALIFIED_EX(\
01644         t_cppClass, i_cppMethod, t_return,\
01645         LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams)), s_methodName, s_doc,\
01646         i_dispatcher )
01647 
01648 /** @ingroup Python
01649  *  @sa PY_CLASS_METHOD_QUALIFIED_EX
01650  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_EX for 10 arguments
01651  */
01652 #define PY_CLASS_METHOD_QUALIFIED_EX_10( t_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, s_methodName, s_doc, i_dispatcher )\
01653     typedef ::lass::meta::type_list::Make< t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10 >::Type \
01654         LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams));\
01655     PY_CLASS_METHOD_QUALIFIED_EX(\
01656         t_cppClass, i_cppMethod, t_return,\
01657         LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams)), s_methodName, s_doc,\
01658         i_dispatcher )
01659 
01660 /** @ingroup Python
01661  *  @sa PY_CLASS_METHOD_QUALIFIED_EX
01662  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_EX for 11 arguments
01663  */
01664 #define PY_CLASS_METHOD_QUALIFIED_EX_11( t_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, s_methodName, s_doc, i_dispatcher )\
01665     typedef ::lass::meta::type_list::Make< t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11 >::Type \
01666         LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams));\
01667     PY_CLASS_METHOD_QUALIFIED_EX(\
01668         t_cppClass, i_cppMethod, t_return,\
01669         LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams)), s_methodName, s_doc,\
01670         i_dispatcher )
01671 
01672 /** @ingroup Python
01673  *  @sa PY_CLASS_METHOD_QUALIFIED_EX
01674  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_EX for 12 arguments
01675  */
01676 #define PY_CLASS_METHOD_QUALIFIED_EX_12( t_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, s_methodName, s_doc, i_dispatcher )\
01677     typedef ::lass::meta::type_list::Make< t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12 >::Type \
01678         LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams));\
01679     PY_CLASS_METHOD_QUALIFIED_EX(\
01680         t_cppClass, i_cppMethod, t_return,\
01681         LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams)), s_methodName, s_doc,\
01682         i_dispatcher )
01683 
01684 /** @ingroup Python
01685  *  @sa PY_CLASS_METHOD_QUALIFIED_EX
01686  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_EX for 13 arguments
01687  */
01688 #define PY_CLASS_METHOD_QUALIFIED_EX_13( t_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, s_methodName, s_doc, i_dispatcher )\
01689     typedef ::lass::meta::type_list::Make< t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13 >::Type \
01690         LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams));\
01691     PY_CLASS_METHOD_QUALIFIED_EX(\
01692         t_cppClass, i_cppMethod, t_return,\
01693         LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams)), s_methodName, s_doc,\
01694         i_dispatcher )
01695 
01696 /** @ingroup Python
01697  *  @sa PY_CLASS_METHOD_QUALIFIED_EX
01698  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_EX for 14 arguments
01699  */
01700 #define PY_CLASS_METHOD_QUALIFIED_EX_14( t_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, s_methodName, s_doc, i_dispatcher )\
01701     typedef ::lass::meta::type_list::Make< t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14 >::Type \
01702         LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams));\
01703     PY_CLASS_METHOD_QUALIFIED_EX(\
01704         t_cppClass, i_cppMethod, t_return,\
01705         LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams)), s_methodName, s_doc,\
01706         i_dispatcher )
01707 
01708 /** @ingroup Python
01709  *  @sa PY_CLASS_METHOD_QUALIFIED_EX
01710  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_EX for 15 arguments
01711  */
01712 #define PY_CLASS_METHOD_QUALIFIED_EX_15( t_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15, s_methodName, s_doc, i_dispatcher )\
01713     typedef ::lass::meta::type_list::Make< t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15 >::Type \
01714         LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams));\
01715     PY_CLASS_METHOD_QUALIFIED_EX(\
01716         t_cppClass, i_cppMethod, t_return,\
01717         LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams)), s_methodName, s_doc,\
01718         i_dispatcher )
01719 
01720 
01721 /** @ingroup Python
01722  *  @sa PY_CLASS_METHOD_QUALIFIED_EX
01723  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_EX with
01724  *  @a i_dispatcher = lassPyImpl_method_ ## @a t_cppClass ## __LINE__.
01725  */
01726 #define PY_CLASS_METHOD_QUALIFIED_NAME_DOC( i_cppClass, i_cppMethod, t_return, t_params, s_methodName, s_doc )\
01727     PY_CLASS_METHOD_QUALIFIED_EX(\
01728         i_cppClass, i_cppMethod, t_return, t_params, s_methodName, s_doc,\
01729         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)))
01730 
01731 /** @ingroup Python
01732  *  @sa PY_CLASS_METHOD_QUALIFIED_EX
01733  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_EX_0 with
01734  *  @a i_dispatcher = lassPyImpl_method_ ## @a t_cppClass ## __LINE__.
01735  */
01736 #define PY_CLASS_METHOD_QUALIFIED_NAME_DOC_0( i_cppClass, i_cppMethod, t_return, s_methodName, s_doc )\
01737     PY_CLASS_METHOD_QUALIFIED_EX_0(\
01738         i_cppClass, i_cppMethod, t_return, s_methodName, s_doc,\
01739         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)))
01740 
01741 /** @ingroup Python
01742  *  @sa PY_CLASS_METHOD_QUALIFIED_EX
01743  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_EX_1 with
01744  *  @a i_dispatcher = lassPyImpl_method_ ## @a t_cppClass ## __LINE__.
01745  */
01746 #define PY_CLASS_METHOD_QUALIFIED_NAME_DOC_1( i_cppClass, i_cppMethod, t_return, t_P1, s_methodName, s_doc )\
01747     PY_CLASS_METHOD_QUALIFIED_EX_1(\
01748         i_cppClass, i_cppMethod, t_return, t_P1, s_methodName, s_doc,\
01749         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)))
01750 
01751 /** @ingroup Python
01752  *  @sa PY_CLASS_METHOD_QUALIFIED_EX
01753  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_EX_2 with
01754  *  @a i_dispatcher = lassPyImpl_method_ ## @a t_cppClass ## __LINE__.
01755  */
01756 #define PY_CLASS_METHOD_QUALIFIED_NAME_DOC_2( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, s_methodName, s_doc )\
01757     PY_CLASS_METHOD_QUALIFIED_EX_2(\
01758         i_cppClass, i_cppMethod, t_return, t_P1, t_P2, s_methodName, s_doc,\
01759         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)))
01760 
01761 /** @ingroup Python
01762  *  @sa PY_CLASS_METHOD_QUALIFIED_EX
01763  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_EX_3 with
01764  *  @a i_dispatcher = lassPyImpl_method_ ## @a t_cppClass ## __LINE__.
01765  */
01766 #define PY_CLASS_METHOD_QUALIFIED_NAME_DOC_3( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, s_methodName, s_doc )\
01767     PY_CLASS_METHOD_QUALIFIED_EX_3(\
01768         i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, s_methodName, s_doc,\
01769         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)))
01770 
01771 /** @ingroup Python
01772  *  @sa PY_CLASS_METHOD_QUALIFIED_EX
01773  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_EX_4 with
01774  *  @a i_dispatcher = lassPyImpl_method_ ## @a t_cppClass ## __LINE__.
01775  */
01776 #define PY_CLASS_METHOD_QUALIFIED_NAME_DOC_4( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, s_methodName, s_doc )\
01777     PY_CLASS_METHOD_QUALIFIED_EX_4(\
01778         i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, s_methodName, s_doc,\
01779         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)))
01780 
01781 /** @ingroup Python
01782  *  @sa PY_CLASS_METHOD_QUALIFIED_EX
01783  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_EX_5 with
01784  *  @a i_dispatcher = lassPyImpl_method_ ## @a t_cppClass ## __LINE__.
01785  */
01786 #define PY_CLASS_METHOD_QUALIFIED_NAME_DOC_5( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, s_methodName, s_doc )\
01787     PY_CLASS_METHOD_QUALIFIED_EX_5(\
01788         i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, s_methodName, s_doc,\
01789         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)))
01790 
01791 /** @ingroup Python
01792  *  @sa PY_CLASS_METHOD_QUALIFIED_EX
01793  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_EX_6 with
01794  *  @a i_dispatcher = lassPyImpl_method_ ## @a t_cppClass ## __LINE__.
01795  */
01796 #define PY_CLASS_METHOD_QUALIFIED_NAME_DOC_6( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, s_methodName, s_doc )\
01797     PY_CLASS_METHOD_QUALIFIED_EX_6(\
01798         i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, s_methodName, s_doc,\
01799         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)))
01800 
01801 /** @ingroup Python
01802  *  @sa PY_CLASS_METHOD_QUALIFIED_EX
01803  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_EX_7 with
01804  *  @a i_dispatcher = lassPyImpl_method_ ## @a t_cppClass ## __LINE__.
01805  */
01806 #define PY_CLASS_METHOD_QUALIFIED_NAME_DOC_7( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, s_methodName, s_doc )\
01807     PY_CLASS_METHOD_QUALIFIED_EX_7(\
01808         i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, s_methodName, s_doc,\
01809         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)))
01810 
01811 /** @ingroup Python
01812  *  @sa PY_CLASS_METHOD_QUALIFIED_EX
01813  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_EX_8 with
01814  *  @a i_dispatcher = lassPyImpl_method_ ## @a t_cppClass ## __LINE__.
01815  */
01816 #define PY_CLASS_METHOD_QUALIFIED_NAME_DOC_8( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, s_methodName, s_doc )\
01817     PY_CLASS_METHOD_QUALIFIED_EX_8(\
01818         i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, s_methodName, s_doc,\
01819         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)))
01820 
01821 /** @ingroup Python
01822  *  @sa PY_CLASS_METHOD_QUALIFIED_EX
01823  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_EX_9 with
01824  *  @a i_dispatcher = lassPyImpl_method_ ## @a t_cppClass ## __LINE__.
01825  */
01826 #define PY_CLASS_METHOD_QUALIFIED_NAME_DOC_9( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, s_methodName, s_doc )\
01827     PY_CLASS_METHOD_QUALIFIED_EX_9(\
01828         i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, s_methodName, s_doc,\
01829         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)))
01830 
01831 /** @ingroup Python
01832  *  @sa PY_CLASS_METHOD_QUALIFIED_EX
01833  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_EX_10 with
01834  *  @a i_dispatcher = lassPyImpl_method_ ## @a t_cppClass ## __LINE__.
01835  */
01836 #define PY_CLASS_METHOD_QUALIFIED_NAME_DOC_10( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, s_methodName, s_doc )\
01837     PY_CLASS_METHOD_QUALIFIED_EX_10(\
01838         i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, s_methodName, s_doc,\
01839         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)))
01840 
01841 /** @ingroup Python
01842  *  @sa PY_CLASS_METHOD_QUALIFIED_EX
01843  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_EX_11 with
01844  *  @a i_dispatcher = lassPyImpl_method_ ## @a t_cppClass ## __LINE__.
01845  */
01846 #define PY_CLASS_METHOD_QUALIFIED_NAME_DOC_11( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, s_methodName, s_doc )\
01847     PY_CLASS_METHOD_QUALIFIED_EX_11(\
01848         i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, s_methodName, s_doc,\
01849         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)))
01850 
01851 /** @ingroup Python
01852  *  @sa PY_CLASS_METHOD_QUALIFIED_EX
01853  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_EX_12 with
01854  *  @a i_dispatcher = lassPyImpl_method_ ## @a t_cppClass ## __LINE__.
01855  */
01856 #define PY_CLASS_METHOD_QUALIFIED_NAME_DOC_12( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, s_methodName, s_doc )\
01857     PY_CLASS_METHOD_QUALIFIED_EX_12(\
01858         i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, s_methodName, s_doc,\
01859         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)))
01860 
01861 /** @ingroup Python
01862  *  @sa PY_CLASS_METHOD_QUALIFIED_EX
01863  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_EX_13 with
01864  *  @a i_dispatcher = lassPyImpl_method_ ## @a t_cppClass ## __LINE__.
01865  */
01866 #define PY_CLASS_METHOD_QUALIFIED_NAME_DOC_13( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, s_methodName, s_doc )\
01867     PY_CLASS_METHOD_QUALIFIED_EX_13(\
01868         i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, s_methodName, s_doc,\
01869         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)))
01870 
01871 /** @ingroup Python
01872  *  @sa PY_CLASS_METHOD_QUALIFIED_EX
01873  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_EX_14 with
01874  *  @a i_dispatcher = lassPyImpl_method_ ## @a t_cppClass ## __LINE__.
01875  */
01876 #define PY_CLASS_METHOD_QUALIFIED_NAME_DOC_14( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, s_methodName, s_doc )\
01877     PY_CLASS_METHOD_QUALIFIED_EX_14(\
01878         i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, s_methodName, s_doc,\
01879         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)))
01880 
01881 /** @ingroup Python
01882  *  @sa PY_CLASS_METHOD_QUALIFIED_EX
01883  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_EX_15 with
01884  *  @a i_dispatcher = lassPyImpl_method_ ## @a t_cppClass ## __LINE__.
01885  */
01886 #define PY_CLASS_METHOD_QUALIFIED_NAME_DOC_15( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15, s_methodName, s_doc )\
01887     PY_CLASS_METHOD_QUALIFIED_EX_15(\
01888         i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15, s_methodName, s_doc,\
01889         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)))
01890 
01891 
01892 /** @ingroup Python
01893  *  @sa PY_CLASS_METHOD_QUALIFIED_EX
01894  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_NAME_DOC with @a s_doc = 0.
01895  */
01896 #define PY_CLASS_METHOD_QUALIFIED_NAME( i_cppClass, i_cppMethod, t_return, t_params, s_methodName )\
01897         PY_CLASS_METHOD_QUALIFIED_NAME_DOC(\
01898             i_cppClass, i_cppMethod, t_return, t_params, s_methodName, 0 )
01899 
01900 /** @ingroup Python
01901  *  @sa PY_CLASS_METHOD_QUALIFIED_EX
01902  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_NAME_DOC_0 with @a s_doc = 0.
01903  */
01904 #define PY_CLASS_METHOD_QUALIFIED_NAME_0( i_cppClass, i_cppMethod, t_return, s_methodName )\
01905     PY_CLASS_METHOD_QUALIFIED_NAME_DOC_0(\
01906         i_cppClass, i_cppMethod, t_return, s_methodName, 0 )
01907 
01908 /** @ingroup Python
01909  *  @sa PY_CLASS_METHOD_QUALIFIED_EX
01910  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_NAME_DOC_1 with @a s_doc = 0.
01911  */
01912 #define PY_CLASS_METHOD_QUALIFIED_NAME_1( i_cppClass, i_cppMethod, t_return, t_P1, s_methodName )\
01913     PY_CLASS_METHOD_QUALIFIED_NAME_DOC_1(\
01914         i_cppClass, i_cppMethod, t_return, t_P1, s_methodName, 0 )
01915 
01916 /** @ingroup Python
01917  *  @sa PY_CLASS_METHOD_QUALIFIED_EX
01918  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_NAME_DOC_2 with @a s_doc = 0.
01919  */
01920 #define PY_CLASS_METHOD_QUALIFIED_NAME_2( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, s_methodName )\
01921     PY_CLASS_METHOD_QUALIFIED_NAME_DOC_2(\
01922         i_cppClass, i_cppMethod, t_return, t_P1, t_P2, s_methodName, 0 )
01923 
01924 /** @ingroup Python
01925  *  @sa PY_CLASS_METHOD_QUALIFIED_EX
01926  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_NAME_DOC_3 with @a s_doc = 0.
01927  */
01928 #define PY_CLASS_METHOD_QUALIFIED_NAME_3( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, s_methodName )\
01929     PY_CLASS_METHOD_QUALIFIED_NAME_DOC_3(\
01930         i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, s_methodName, 0 )
01931 
01932 /** @ingroup Python
01933  *  @sa PY_CLASS_METHOD_QUALIFIED_EX
01934  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_NAME_DOC_4 with @a s_doc = 0.
01935  */
01936 #define PY_CLASS_METHOD_QUALIFIED_NAME_4( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, s_methodName )\
01937     PY_CLASS_METHOD_QUALIFIED_NAME_DOC_4(\
01938         i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, s_methodName, 0 )
01939 
01940 /** @ingroup Python
01941  *  @sa PY_CLASS_METHOD_QUALIFIED_EX
01942  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_NAME_DOC_5 with @a s_doc = 0.
01943  */
01944 #define PY_CLASS_METHOD_QUALIFIED_NAME_5( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, s_methodName )\
01945     PY_CLASS_METHOD_QUALIFIED_NAME_DOC_5(\
01946         i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, s_methodName, 0 )
01947 
01948 /** @ingroup Python
01949  *  @sa PY_CLASS_METHOD_QUALIFIED_EX
01950  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_NAME_DOC_6 with @a s_doc = 0.
01951  */
01952 #define PY_CLASS_METHOD_QUALIFIED_NAME_6( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, s_methodName )\
01953     PY_CLASS_METHOD_QUALIFIED_NAME_DOC_6(\
01954         i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, s_methodName, 0 )
01955 
01956 /** @ingroup Python
01957  *  @sa PY_CLASS_METHOD_QUALIFIED_EX
01958  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_NAME_DOC_7 with @a s_doc = 0.
01959  */
01960 #define PY_CLASS_METHOD_QUALIFIED_NAME_7( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, s_methodName )\
01961     PY_CLASS_METHOD_QUALIFIED_NAME_DOC_7(\
01962         i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, s_methodName, 0 )
01963 
01964 /** @ingroup Python
01965  *  @sa PY_CLASS_METHOD_QUALIFIED_EX
01966  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_NAME_DOC_8 with @a s_doc = 0.
01967  */
01968 #define PY_CLASS_METHOD_QUALIFIED_NAME_8( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, s_methodName )\
01969     PY_CLASS_METHOD_QUALIFIED_NAME_DOC_8(\
01970         i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, s_methodName, 0 )
01971 
01972 /** @ingroup Python
01973  *  @sa PY_CLASS_METHOD_QUALIFIED_EX
01974  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_NAME_DOC_9 with @a s_doc = 0.
01975  */
01976 #define PY_CLASS_METHOD_QUALIFIED_NAME_9( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, s_methodName )\
01977     PY_CLASS_METHOD_QUALIFIED_NAME_DOC_9(\
01978         i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, s_methodName, 0 )
01979 
01980 /** @ingroup Python
01981  *  @sa PY_CLASS_METHOD_QUALIFIED_EX
01982  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_NAME_DOC_10 with @a s_doc = 0.
01983  */
01984 #define PY_CLASS_METHOD_QUALIFIED_NAME_10( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, s_methodName )\
01985     PY_CLASS_METHOD_QUALIFIED_NAME_DOC_10(\
01986         i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, s_methodName, 0 )
01987 
01988 /** @ingroup Python
01989  *  @sa PY_CLASS_METHOD_QUALIFIED_EX
01990  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_NAME_DOC_11 with @a s_doc = 0.
01991  */
01992 #define PY_CLASS_METHOD_QUALIFIED_NAME_11( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, s_methodName )\
01993     PY_CLASS_METHOD_QUALIFIED_NAME_DOC_11(\
01994         i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, s_methodName, 0 )
01995 
01996 /** @ingroup Python
01997  *  @sa PY_CLASS_METHOD_QUALIFIED_EX
01998  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_NAME_DOC_12 with @a s_doc = 0.
01999  */
02000 #define PY_CLASS_METHOD_QUALIFIED_NAME_12( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, s_methodName )\
02001     PY_CLASS_METHOD_QUALIFIED_NAME_DOC_12(\
02002         i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, s_methodName, 0 )
02003 
02004 /** @ingroup Python
02005  *  @sa PY_CLASS_METHOD_QUALIFIED_EX
02006  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_NAME_DOC_13 with @a s_doc = 0.
02007  */
02008 #define PY_CLASS_METHOD_QUALIFIED_NAME_13( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, s_methodName )\
02009     PY_CLASS_METHOD_QUALIFIED_NAME_DOC_13(\
02010         i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, s_methodName, 0 )
02011 
02012 /** @ingroup Python
02013  *  @sa PY_CLASS_METHOD_QUALIFIED_EX
02014  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_NAME_DOC_14 with @a s_doc = 0.
02015  */
02016 #define PY_CLASS_METHOD_QUALIFIED_NAME_14( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, s_methodName )\
02017     PY_CLASS_METHOD_QUALIFIED_NAME_DOC_14(\
02018         i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, s_methodName, 0 )
02019 
02020 /** @ingroup Python
02021  *  @sa PY_CLASS_METHOD_QUALIFIED_EX
02022  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_NAME_DOC_15 with @a s_doc = 0.
02023  */
02024 #define PY_CLASS_METHOD_QUALIFIED_NAME_15( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15, s_methodName )\
02025     PY_CLASS_METHOD_QUALIFIED_NAME_DOC_15(\
02026         i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15, s_methodName, 0 )
02027 
02028 
02029 /** @ingroup Python
02030  *  @sa PY_CLASS_METHOD_QUALIFIED_EX
02031  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_NAME_DOC
02032  *  with @a s_methodName = # @a i_cppMethod.
02033  */
02034 #define PY_CLASS_METHOD_QUALIFIED_DOC( i_cppClass, i_cppMethod, t_return, t_params, s_doc )\
02035     PY_CLASS_METHOD_QUALIFIED_NAME_DOC(\
02036         i_cppClass, i_cppMethod, t_return, t_params, LASS_STRINGIFY(i_cppMethod), s_doc )
02037 
02038 /** @ingroup Python
02039  *  @sa PY_CLASS_METHOD_QUALIFIED_EX
02040  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_NAME_DOC
02041  *  with @a s_methodName = # @a i_cppMethod.
02042  */
02043 #define PY_CLASS_METHOD_QUALIFIED_DOC_0( i_cppClass, i_cppMethod, t_return, s_doc )\
02044     PY_CLASS_METHOD_QUALIFIED_NAME_DOC_0(\
02045         i_cppClass, i_cppMethod, t_return, LASS_STRINGIFY(i_cppMethod), s_doc )
02046 
02047 /** @ingroup Python
02048  *  @sa PY_CLASS_METHOD_QUALIFIED_EX
02049  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_NAME_DOC
02050  *  with @a s_methodName = # @a i_cppMethod.
02051  */
02052 #define PY_CLASS_METHOD_QUALIFIED_DOC_1( i_cppClass, i_cppMethod, t_return, t_P1, s_doc )\
02053     PY_CLASS_METHOD_QUALIFIED_NAME_DOC_1(\
02054         i_cppClass, i_cppMethod, t_return, t_P1, LASS_STRINGIFY(i_cppMethod), s_doc )
02055 
02056 /** @ingroup Python
02057  *  @sa PY_CLASS_METHOD_QUALIFIED_EX
02058  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_NAME_DOC
02059  *  with @a s_methodName = # @a i_cppMethod.
02060  */
02061 #define PY_CLASS_METHOD_QUALIFIED_DOC_2( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, s_doc )\
02062     PY_CLASS_METHOD_QUALIFIED_NAME_DOC_2(\
02063         i_cppClass, i_cppMethod, t_return, t_P1, t_P2, LASS_STRINGIFY(i_cppMethod), s_doc )
02064 
02065 /** @ingroup Python
02066  *  @sa PY_CLASS_METHOD_QUALIFIED_EX
02067  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_NAME_DOC
02068  *  with @a s_methodName = # @a i_cppMethod.
02069  */
02070 #define PY_CLASS_METHOD_QUALIFIED_DOC_3( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, s_doc )\
02071     PY_CLASS_METHOD_QUALIFIED_NAME_DOC_3(\
02072         i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, LASS_STRINGIFY(i_cppMethod), s_doc )
02073 
02074 /** @ingroup Python
02075  *  @sa PY_CLASS_METHOD_QUALIFIED_EX
02076  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_NAME_DOC
02077  *  with @a s_methodName = # @a i_cppMethod.
02078  */
02079 #define PY_CLASS_METHOD_QUALIFIED_DOC_4( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, s_doc )\
02080     PY_CLASS_METHOD_QUALIFIED_NAME_DOC_4(\
02081         i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, LASS_STRINGIFY(i_cppMethod), s_doc )
02082 
02083 /** @ingroup Python
02084  *  @sa PY_CLASS_METHOD_QUALIFIED_EX
02085  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_NAME_DOC
02086  *  with @a s_methodName = # @a i_cppMethod.
02087  */
02088 #define PY_CLASS_METHOD_QUALIFIED_DOC_5( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, s_doc )\
02089     PY_CLASS_METHOD_QUALIFIED_NAME_DOC_5(\
02090         i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, LASS_STRINGIFY(i_cppMethod), s_doc )
02091 
02092 /** @ingroup Python
02093  *  @sa PY_CLASS_METHOD_QUALIFIED_EX
02094  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_NAME_DOC
02095  *  with @a s_methodName = # @a i_cppMethod.
02096  */
02097 #define PY_CLASS_METHOD_QUALIFIED_DOC_6( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, s_doc )\
02098     PY_CLASS_METHOD_QUALIFIED_NAME_DOC_6(\
02099         i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, LASS_STRINGIFY(i_cppMethod), s_doc )
02100 
02101 /** @ingroup Python
02102  *  @sa PY_CLASS_METHOD_QUALIFIED_EX
02103  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_NAME_DOC
02104  *  with @a s_methodName = # @a i_cppMethod.
02105  */
02106 #define PY_CLASS_METHOD_QUALIFIED_DOC_7( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, s_doc )\
02107     PY_CLASS_METHOD_QUALIFIED_NAME_DOC_7(\
02108         i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, LASS_STRINGIFY(i_cppMethod), s_doc )
02109 
02110 /** @ingroup Python
02111  *  @sa PY_CLASS_METHOD_QUALIFIED_EX
02112  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_NAME_DOC
02113  *  with @a s_methodName = # @a i_cppMethod.
02114  */
02115 #define PY_CLASS_METHOD_QUALIFIED_DOC_8( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, s_doc )\
02116     PY_CLASS_METHOD_QUALIFIED_NAME_DOC_8(\
02117         i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, LASS_STRINGIFY(i_cppMethod), s_doc )
02118 
02119 /** @ingroup Python
02120  *  @sa PY_CLASS_METHOD_QUALIFIED_EX
02121  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_NAME_DOC
02122  *  with @a s_methodName = # @a i_cppMethod.
02123  */
02124 #define PY_CLASS_METHOD_QUALIFIED_DOC_9( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, s_doc )\
02125     PY_CLASS_METHOD_QUALIFIED_NAME_DOC_9(\
02126         i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, LASS_STRINGIFY(i_cppMethod), s_doc )
02127 
02128 /** @ingroup Python
02129  *  @sa PY_CLASS_METHOD_QUALIFIED_EX
02130  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_NAME_DOC
02131  *  with @a s_methodName = # @a i_cppMethod.
02132  */
02133 #define PY_CLASS_METHOD_QUALIFIED_DOC_10( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, s_doc )\
02134     PY_CLASS_METHOD_QUALIFIED_NAME_DOC_10(\
02135         i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, LASS_STRINGIFY(i_cppMethod), s_doc )
02136 
02137 /** @ingroup Python
02138  *  @sa PY_CLASS_METHOD_QUALIFIED_EX
02139  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_NAME_DOC
02140  *  with @a s_methodName = # @a i_cppMethod.
02141  */
02142 #define PY_CLASS_METHOD_QUALIFIED_DOC_11( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, s_doc )\
02143     PY_CLASS_METHOD_QUALIFIED_NAME_DOC_11(\
02144         i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, LASS_STRINGIFY(i_cppMethod), s_doc )
02145 
02146 /** @ingroup Python
02147  *  @sa PY_CLASS_METHOD_QUALIFIED_EX
02148  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_NAME_DOC
02149  *  with @a s_methodName = # @a i_cppMethod.
02150  */
02151 #define PY_CLASS_METHOD_QUALIFIED_DOC_12( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, s_doc )\
02152     PY_CLASS_METHOD_QUALIFIED_NAME_DOC_12(\
02153         i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, LASS_STRINGIFY(i_cppMethod), s_doc )
02154 
02155 /** @ingroup Python
02156  *  @sa PY_CLASS_METHOD_QUALIFIED_EX
02157  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_NAME_DOC
02158  *  with @a s_methodName = # @a i_cppMethod.
02159  */
02160 #define PY_CLASS_METHOD_QUALIFIED_DOC_13( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, s_doc )\
02161     PY_CLASS_METHOD_QUALIFIED_NAME_DOC_13(\
02162         i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, LASS_STRINGIFY(i_cppMethod), s_doc )
02163 
02164 /** @ingroup Python
02165  *  @sa PY_CLASS_METHOD_QUALIFIED_EX
02166  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_NAME_DOC
02167  *  with @a s_methodName = # @a i_cppMethod.
02168  */
02169 #define PY_CLASS_METHOD_QUALIFIED_DOC_14( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, s_doc )\
02170     PY_CLASS_METHOD_QUALIFIED_NAME_DOC_14(\
02171         i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, LASS_STRINGIFY(i_cppMethod), s_doc )
02172 
02173 /** @ingroup Python
02174  *  @sa PY_CLASS_METHOD_QUALIFIED_EX
02175  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_NAME_DOC
02176  *  with @a s_methodName = # @a i_cppMethod.
02177  */
02178 #define PY_CLASS_METHOD_QUALIFIED_DOC_15( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15, s_doc )\
02179     PY_CLASS_METHOD_QUALIFIED_NAME_DOC_15(\
02180         i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15, LASS_STRINGIFY(i_cppMethod), s_doc )
02181 
02182 
02183 /** @ingroup Python
02184  *  @sa PY_CLASS_METHOD_QUALIFIED_EX
02185  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_NAME_DOC
02186  *  with @a s_methodName = # @a i_cppMethod and @a s_doc = 0.
02187  */
02188 #define PY_CLASS_METHOD_QUALIFIED( i_cppClass, i_cppMethod, t_return, t_params )\
02189     PY_CLASS_METHOD_QUALIFIED_DOC( i_cppClass, i_cppMethod, t_return, t_params, 0 )
02190 
02191 /** @ingroup Python
02192  *  @sa PY_CLASS_METHOD_QUALIFIED_EX
02193  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_NAME_DOC
02194  *  with @a s_methodName = # @a i_cppMethod and @a s_doc = 0.
02195  */
02196 #define PY_CLASS_METHOD_QUALIFIED_0( i_cppClass, i_cppMethod, t_return )\
02197     PY_CLASS_METHOD_QUALIFIED_DOC_0( i_cppClass, i_cppMethod, t_return, 0 )
02198 
02199 /** @ingroup Python
02200  *  @sa PY_CLASS_METHOD_QUALIFIED_EX
02201  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_NAME_DOC
02202  *  with @a s_methodName = # @a i_cppMethod and @a s_doc = 0.
02203  */
02204 #define PY_CLASS_METHOD_QUALIFIED_1( i_cppClass, i_cppMethod, t_return, t_P1 )\
02205     PY_CLASS_METHOD_QUALIFIED_DOC_1( i_cppClass, i_cppMethod, t_return, t_P1, 0 )
02206 
02207 /** @ingroup Python
02208  *  @sa PY_CLASS_METHOD_QUALIFIED_EX
02209  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_NAME_DOC
02210  *  with @a s_methodName = # @a i_cppMethod and @a s_doc = 0.
02211  */
02212 #define PY_CLASS_METHOD_QUALIFIED_2( i_cppClass, i_cppMethod, t_return, t_P1, t_P2 )\
02213     PY_CLASS_METHOD_QUALIFIED_DOC_2( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, 0 )
02214 
02215 /** @ingroup Python
02216  *  @sa PY_CLASS_METHOD_QUALIFIED_EX
02217  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_NAME_DOC
02218  *  with @a s_methodName = # @a i_cppMethod and @a s_doc = 0.
02219  */
02220 #define PY_CLASS_METHOD_QUALIFIED_3( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3 )\
02221     PY_CLASS_METHOD_QUALIFIED_DOC_3( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, 0 )
02222 
02223 /** @ingroup Python
02224  *  @sa PY_CLASS_METHOD_QUALIFIED_EX
02225  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_NAME_DOC
02226  *  with @a s_methodName = # @a i_cppMethod and @a s_doc = 0.
02227  */
02228 #define PY_CLASS_METHOD_QUALIFIED_4( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4 )\
02229     PY_CLASS_METHOD_QUALIFIED_DOC_4( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, 0 )
02230 
02231 /** @ingroup Python
02232  *  @sa PY_CLASS_METHOD_QUALIFIED_EX
02233  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_NAME_DOC
02234  *  with @a s_methodName = # @a i_cppMethod and @a s_doc = 0.
02235  */
02236 #define PY_CLASS_METHOD_QUALIFIED_5( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5 )\
02237     PY_CLASS_METHOD_QUALIFIED_DOC_5( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, 0 )
02238 
02239 /** @ingroup Python
02240  *  @sa PY_CLASS_METHOD_QUALIFIED_EX
02241  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_NAME_DOC
02242  *  with @a s_methodName = # @a i_cppMethod and @a s_doc = 0.
02243  */
02244 #define PY_CLASS_METHOD_QUALIFIED_6( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6 )\
02245     PY_CLASS_METHOD_QUALIFIED_DOC_6( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, 0 )
02246 
02247 /** @ingroup Python
02248  *  @sa PY_CLASS_METHOD_QUALIFIED_EX
02249  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_NAME_DOC
02250  *  with @a s_methodName = # @a i_cppMethod and @a s_doc = 0.
02251  */
02252 #define PY_CLASS_METHOD_QUALIFIED_7( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7 )\
02253     PY_CLASS_METHOD_QUALIFIED_DOC_7( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, 0 )
02254 
02255 /** @ingroup Python
02256  *  @sa PY_CLASS_METHOD_QUALIFIED_EX
02257  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_NAME_DOC
02258  *  with @a s_methodName = # @a i_cppMethod and @a s_doc = 0.
02259  */
02260 #define PY_CLASS_METHOD_QUALIFIED_8( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8 )\
02261     PY_CLASS_METHOD_QUALIFIED_DOC_8( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, 0 )
02262 
02263 /** @ingroup Python
02264  *  @sa PY_CLASS_METHOD_QUALIFIED_EX
02265  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_NAME_DOC
02266  *  with @a s_methodName = # @a i_cppMethod and @a s_doc = 0.
02267  */
02268 #define PY_CLASS_METHOD_QUALIFIED_9( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9 )\
02269     PY_CLASS_METHOD_QUALIFIED_DOC_9( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, 0 )
02270 
02271 /** @ingroup Python
02272  *  @sa PY_CLASS_METHOD_QUALIFIED_EX
02273  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_NAME_DOC
02274  *  with @a s_methodName = # @a i_cppMethod and @a s_doc = 0.
02275  */
02276 #define PY_CLASS_METHOD_QUALIFIED_10( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10 )\
02277     PY_CLASS_METHOD_QUALIFIED_DOC_10( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, 0 )
02278 
02279 /** @ingroup Python
02280  *  @sa PY_CLASS_METHOD_QUALIFIED_EX
02281  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_NAME_DOC
02282  *  with @a s_methodName = # @a i_cppMethod and @a s_doc = 0.
02283  */
02284 #define PY_CLASS_METHOD_QUALIFIED_11( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11 )\
02285     PY_CLASS_METHOD_QUALIFIED_DOC_11( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, 0 )
02286 
02287 /** @ingroup Python
02288  *  @sa PY_CLASS_METHOD_QUALIFIED_EX
02289  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_NAME_DOC
02290  *  with @a s_methodName = # @a i_cppMethod and @a s_doc = 0.
02291  */
02292 #define PY_CLASS_METHOD_QUALIFIED_12( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12 )\
02293     PY_CLASS_METHOD_QUALIFIED_DOC_12( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, 0 )
02294 
02295 /** @ingroup Python
02296  *  @sa PY_CLASS_METHOD_QUALIFIED_EX
02297  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_NAME_DOC
02298  *  with @a s_methodName = # @a i_cppMethod and @a s_doc = 0.
02299  */
02300 #define PY_CLASS_METHOD_QUALIFIED_13( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13 )\
02301     PY_CLASS_METHOD_QUALIFIED_DOC_13( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, 0 )
02302 
02303 /** @ingroup Python
02304  *  @sa PY_CLASS_METHOD_QUALIFIED_EX
02305  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_NAME_DOC
02306  *  with @a s_methodName = # @a i_cppMethod and @a s_doc = 0.
02307  */
02308 #define PY_CLASS_METHOD_QUALIFIED_14( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14 )\
02309     PY_CLASS_METHOD_QUALIFIED_DOC_14( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, 0 )
02310 
02311 /** @ingroup Python
02312  *  @sa PY_CLASS_METHOD_QUALIFIED_EX
02313  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_NAME_DOC
02314  *  with @a s_methodName = # @a i_cppMethod and @a s_doc = 0.
02315  */
02316 #define PY_CLASS_METHOD_QUALIFIED_15( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15 )\
02317     PY_CLASS_METHOD_QUALIFIED_DOC_15( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15, 0 )
02318 
02319 
02320 
02321 
02322 // --- "free" methods ------------------------------------------------------------------------------
02323 
02324 /** @ingroup Python
02325  *  @brief Exports a C/C++ free function as Python method
02326  *  @sa PY_CLASS_METHOD_EX
02327  *
02328  *  @param t_cppClass
02329  *      the C++ class you're exporting the method for
02330  *  @param i_cppFreeMethod
02331  *      the name of the C++ function you're exporting as free method
02332  *  @param s_methodName
02333  *      the name the method will have in Python
02334  *  @param s_doc
02335  *      documentation of method as shown in Python (zero terminated C string)
02336  *  @param i_dispatcher
02337  *      A unique name of the static C++ dispatcher function to be generated.  This name will be
02338  *      used for the names of automatic generated variables and functions and should be unique
02339  *      per exported C++ class/method pair.
02340  *
02341  *  This macro allows you to export a C/C++ free function as a Python method.  This allows you to
02342  *  export additional functions that are written outside the class definition as methods in the 
02343  *  Python class.  This is extremely usefull when using shadow classes to export a C++ class,
02344  *  because in such case, it's often undesirable or impossible to write the function as a method.
02345  *
02346  *  The free function has to accept a pointer or reference to the object as first argument.
02347  *  This may be a const or non-const pointer/reference.
02348  *
02349  *  Just like PY_CLASS_METHOD_EX, PY_CLASS_FREE_METHOD_EX allows for overloading.  These
02350  *  overloads may be mixed with PY_CLASS_METHOD_EX methods.
02351  *
02352  *  @code
02353  *  // foo.h
02354  *  class Foo
02355  *  {
02356  *      PY_HEADER(python::PyObjectPlus)
02357  *  };
02358  *
02359  *  void barA(Foo* foo, int a);
02360  *  void barB(const Foo&, const std::string& b);
02361  *
02362  *  // foo.cpp
02363  *  PY_DECLARE_CLASS(Foo)
02364  *  PY_CLASS_FREE_METHOD_EX(Foo, barA, "bar", 0, foo_bar_a)
02365  *  PY_CLASS_FREE_METHOD_EX(Foo, barB, "bar", 0, foo_bar_b)
02366  *  @endcode
02367  */
02368 #define PY_CLASS_FREE_METHOD_EX(t_cppClass, i_cppFreeMethod, s_methodName, s_doc, i_dispatcher)\
02369     PY_CLASS_METHOD_IMPL(t_cppClass, i_cppFreeMethod, s_methodName, s_doc, i_dispatcher,\
02370         ::lass::python::impl::CallMethod<TCppClass>::callFree)
02371 
02372 /** @ingroup Python
02373  *  @sa PY_CLASS_FREE_METHOD_EX
02374  *  convenience macro, wraps PY_CLASS_FREE_METHOD_EX 
02375  *  with @a i_dispatcher = lassPyImpl_method_ ## @a i_cppClass ## __LINE__.
02376  */
02377 #define PY_CLASS_FREE_METHOD_NAME_DOC( i_cppClass, i_cppFreeMethod, s_methodName, s_doc )\
02378     PY_CLASS_FREE_METHOD_EX(\
02379         i_cppClass, i_cppFreeMethod, s_methodName, s_doc,\
02380         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)))
02381 
02382 /** @ingroup Python
02383  *  @sa PY_CLASS_FREE_METHOD_EX
02384  *  convenience macro, wraps PY_CLASS_FREE_METHOD_NAME_DOC with @a s_doc = 0.
02385  */
02386 #define PY_CLASS_FREE_METHOD_NAME( i_cppClass, i_cppFreeMethod, s_methodName )\
02387     PY_CLASS_FREE_METHOD_NAME_DOC( i_cppClass, i_cppFreeMethod, s_methodName, 0 )
02388 
02389 /** @ingroup Python
02390  *  @sa PY_CLASS_FREE_METHOD_EX
02391  *  convenience macro, wraps PY_CLASS_FREE_METHOD_NAME_DOC with @a s_methodName = "@a i_cppFreeMethod".
02392  */
02393 #define PY_CLASS_FREE_METHOD_DOC( i_cppClass, i_cppFreeMethod, s_doc )\
02394     PY_CLASS_FREE_METHOD_NAME_DOC( i_cppClass, i_cppFreeMethod, LASS_STRINGIFY(i_cppFreeMethod), s_doc)
02395 
02396 /** @ingroup Python
02397  *  @sa PY_CLASS_FREE_METHOD_EX
02398  *  convenience macro, wraps PY_CLASS_FREE_METHOD_NAME_DOC  with @a s_methodName = "@a i_cppFreeMethod"
02399  *  and @a s_doc = 0.
02400  */
02401 #define PY_CLASS_FREE_METHOD( i_cppClass, i_cppFreeMethod )\
02402     PY_CLASS_FREE_METHOD_DOC( i_cppClass, i_cppFreeMethod, 0 )
02403 
02404 
02405 
02406 // --- explicit qualified "free" methods -----------------------------------------------------------
02407 
02408 /** @ingroup Python
02409  *  @sa PY_CLASS_FREE_METHOD_EX
02410  *  @brief Exports a C++ "free" method to Python will fully qualified return type and parameters
02411  *
02412  *  @param t_cppClass
02413  *      the C++ class you're exporting a method of
02414  *  @param i_cppFreeMethod
02415  *      the name of the "free" method in C++
02416  *  @param t_return
02417  *      the return type of @a i_cppFreeMethod
02418  *  @param t_params
02419  *      a lass::meta::TypeList of the parameter types of @a i_cppFreeMethod
02420  *  @param s_methodName
02421  *      the name the method will have in Python
02422  *  @param s_doc
02423  *      documentation of method as shown in Python (zero terminated C string)
02424  *  @param i_dispatcher
02425  *      A unique name of the static C++ dispatcher function to be generated.  This name will be
02426  *      used for the names of automatic generated variables and functions and should be unique
02427  *      per exported C++ class/method pair.
02428  *
02429  *  You can use this macro instead of PY_CLASS_FREE_METHOD_EX if there's an ambiguity on @a i_cppFreeMethod.
02430  *  This macro will help you to solve this ambiguity by explicitely specifying return type
02431  *  and parameter types.
02432  *
02433  *  Just like PY_CLASS_FREE_METHOD_EX, PY_CLASS_FREE_METHOD_QUALIFIED_EX allows for overloading.  These
02434  *  overloads may be mixed with PY_CLASS_FREE_METHOD_EX methods.
02435  *
02436  *  @code
02437  *  // foo.h
02438  *  class Foo
02439  *  {
02440  *      PY_HEADER(python::PyObjectPlus)
02441  *  public:
02442  *      // ...
02443  *  };
02444  *
02445  *  void bar(Foo* foo, int a);
02446  *  void bar(const Foo&, const std::string& b);
02447 
02448  *  // foo.cpp
02449  *  PY_DECLARE_CLASS(Foo)
02450  *  PY_CLASS_FREE_METHOD_QUALIFIED_EX(Foo, bar, void, meta::type_list::Make<int>::Type, "bar", 0, foo_bar_a)
02451  *  PY_CLASS_FREE_METHOD_QUALIFIED_EX(Foo, bar, void, meta::type_list::Make<const std::string&>::Type), "bar", 0, foo_bar_b)
02452  *  @endcode
02453  */
02454 /*
02455 #define PY_CLASS_FREE_METHOD_QUALIFIED_EX(t_cppClass, i_cppFreeMethod, t_return, t_params, s_methodName, s_doc, i_dispatcher)\
02456     PY_CLASS_FREE_METHOD_IMPL(t_cppClass, &TCppClass::i_cppFreeMethod, s_methodName, s_doc, i_dispatcher,\
02457         (&::lass::python::impl::ExplicitResolver<TCppClass,t_return,t_params>::TImpl::callMethod))
02458 /*/
02459 #define PY_CLASS_FREE_METHOD_QUALIFIED_EX(t_cppClass, i_cppFreeMethod, t_return, t_params, s_methodName, s_doc, i_dispatcher)\
02460     static ::lass::python::impl::OverloadLink LASS_CONCATENATE(i_dispatcher, _overloadChain);\
02461     PyObject* i_dispatcher(PyObject* iObject, PyObject* iArgs)\
02462     {\
02463         PyObject* result = 0;\
02464         if (LASS_CONCATENATE(i_dispatcher, _overloadChain)(iObject, iArgs, result))\
02465         {\
02466             return result;\
02467         }\
02468         LASS_ASSERT(result == 0);\
02469         typedef ::lass::python::impl::ShadowTraits< t_cppClass > TShadowTraits;\
02470         typedef TShadowTraits::TCppClass TCppClass;\
02471         TCppClass* const cppObject = TShadowTraits::cppObject(iObject);\
02472         if (!cppObject)\
02473         {\
02474             return 0;\
02475         }\
02476         return ::lass::python::impl::ExplicitResolver<TCppClass,t_return,t_params>::TImpl::callFreeMethod(\
02477             iArgs, cppObject, i_cppFreeMethod); \
02478     }\
02479     LASS_EXECUTE_BEFORE_MAIN_EX(LASS_CONCATENATE(i_dispatcher, _executeBeforeMain),\
02480         ::lass::python::impl::addClassMethod(\
02481             t_cppClass::_lassPyType,\
02482             t_cppClass::_lassPyMethods, t_cppClass::_lassPyCompareFuncs,\
02483             s_methodName, s_doc, \
02484             i_dispatcher,\
02485             ::lass::python::impl::unaryDispatcher<i_dispatcher>,\
02486             ::lass::python::impl::binaryDispatcher<i_dispatcher>,\
02487             ::lass::python::impl::ternaryDispatcher<i_dispatcher>,\
02488             ::lass::python::impl::ssizeargDispatcher<i_dispatcher>,\
02489             ::lass::python::impl::ssizessizeargDispatcher<i_dispatcher>,\
02490             ::lass::python::impl::lenDispatcher<i_dispatcher>,\
02491             ::lass::python::impl::ssizeobjargDispatcher<i_dispatcher>,\
02492             ::lass::python::impl::ssizessizeobjargDispatcher<i_dispatcher>,\
02493             ::lass::python::impl::objobjDispatcher<i_dispatcher>,\
02494             LASS_CONCATENATE(i_dispatcher, _overloadChain));\
02495     )
02496 /**/
02497 
02498 /** @ingroup Python
02499  *  @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
02500  *  convenience macro, wraps PY_CLASS_FREE_METHOD_QUALIFIED_EX for 0 arguments
02501  */
02502 #define PY_CLASS_FREE_METHOD_QUALIFIED_EX_0( t_cppClass, i_cppFreeMethod, t_return, s_methodName, s_doc, i_dispatcher )\
02503     PY_CLASS_FREE_METHOD_QUALIFIED_EX(\
02504         t_cppClass, i_cppFreeMethod, t_return, ::lass::meta::NullType, s_methodName, s_doc, i_dispatcher )
02505 
02506 /** @ingroup Python
02507  *  @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
02508  *  convenience macro, wraps PY_CLASS_FREE_METHOD_QUALIFIED_EX for 1 arguments
02509  */
02510 #define PY_CLASS_FREE_METHOD_QUALIFIED_EX_1( t_cppClass, i_cppFreeMethod, t_return, t_P1, s_methodName, s_doc, i_dispatcher )\
02511     typedef ::lass::meta::type_list::Make< t_P1 >::Type\
02512         LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams));\
02513     PY_CLASS_FREE_METHOD_QUALIFIED_EX(\
02514         t_cppClass, i_cppFreeMethod, t_return,\
02515         LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams)), s_methodName, s_doc,\
02516         i_dispatcher )
02517 
02518 /** @ingroup Python
02519  *  @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
02520  *  convenience macro, wraps PY_CLASS_FREE_METHOD_QUALIFIED_EX for 2 arguments
02521  */
02522 #define PY_CLASS_FREE_METHOD_QUALIFIED_EX_2( t_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, s_methodName, s_doc, i_dispatcher )\
02523     typedef ::lass::meta::type_list::Make< t_P1, t_P2 >::Type\
02524         LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams));\
02525     PY_CLASS_FREE_METHOD_QUALIFIED_EX(\
02526         t_cppClass, i_cppFreeMethod, t_return,\
02527         LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams)), s_methodName, s_doc,\
02528         i_dispatcher )
02529 
02530 /** @ingroup Python
02531  *  @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
02532  *  convenience macro, wraps PY_CLASS_FREE_METHOD_QUALIFIED_EX for 3 arguments
02533  */
02534 #define PY_CLASS_FREE_METHOD_QUALIFIED_EX_3( t_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, s_methodName, s_doc, i_dispatcher )\
02535     typedef ::lass::meta::type_list::Make< t_P1, t_P2, t_P3 >::Type\
02536         LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams));\
02537     PY_CLASS_FREE_METHOD_QUALIFIED_EX(\
02538         t_cppClass, i_cppFreeMethod, t_return,\
02539         LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams)), s_methodName, s_doc,\
02540         i_dispatcher )
02541 
02542 /** @ingroup Python
02543  *  @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
02544  *  convenience macro, wraps PY_CLASS_FREE_METHOD_QUALIFIED_EX for 4 arguments
02545  */
02546 #define PY_CLASS_FREE_METHOD_QUALIFIED_EX_4( t_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, s_methodName, s_doc, i_dispatcher )\
02547     typedef ::lass::meta::type_list::Make< t_P1, t_P2, t_P3, t_P4 >::Type\
02548         LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams));\
02549     PY_CLASS_FREE_METHOD_QUALIFIED_EX(\
02550         t_cppClass, i_cppFreeMethod, t_return,\
02551         LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams)), s_methodName, s_doc,\
02552         i_dispatcher )
02553 
02554 /** @ingroup Python
02555  *  @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
02556  *  convenience macro, wraps PY_CLASS_FREE_METHOD_QUALIFIED_EX for 5 arguments
02557  */
02558 #define PY_CLASS_FREE_METHOD_QUALIFIED_EX_5( t_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, s_methodName, s_doc, i_dispatcher )\
02559     typedef ::lass::meta::type_list::Make< t_P1, t_P2, t_P3, t_P4, t_P5 >::Type\
02560         LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams));\
02561     PY_CLASS_FREE_METHOD_QUALIFIED_EX(\
02562         t_cppClass, i_cppFreeMethod, t_return,\
02563         LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams)), s_methodName, s_doc,\
02564         i_dispatcher )
02565 
02566 /** @ingroup Python
02567  *  @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
02568  *  convenience macro, wraps PY_CLASS_FREE_METHOD_QUALIFIED_EX for 6 arguments
02569  */
02570 #define PY_CLASS_FREE_METHOD_QUALIFIED_EX_6( t_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, s_methodName, s_doc, i_dispatcher )\
02571     typedef ::lass::meta::type_list::Make< t_P1, t_P2, t_P3, t_P4, t_P5, t_P6 >::Type\
02572         LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams));\
02573     PY_CLASS_FREE_METHOD_QUALIFIED_EX(\
02574         t_cppClass, i_cppFreeMethod, t_return,\
02575         LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams)), s_methodName, s_doc,\
02576         i_dispatcher )
02577 
02578 /** @ingroup Python
02579  *  @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
02580  *  convenience macro, wraps PY_CLASS_FREE_METHOD_QUALIFIED_EX for 7 arguments
02581  */
02582 #define PY_CLASS_FREE_METHOD_QUALIFIED_EX_7( t_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, s_methodName, s_doc, i_dispatcher )\
02583     typedef ::lass::meta::type_list::Make< t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7 >::Type\
02584         LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams));\
02585     PY_CLASS_FREE_METHOD_QUALIFIED_EX(\
02586         t_cppClass, i_cppFreeMethod, t_return,\
02587         LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams)), s_methodName, s_doc,\
02588         i_dispatcher )
02589 
02590 /** @ingroup Python
02591  *  @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
02592  *  convenience macro, wraps PY_CLASS_FREE_METHOD_QUALIFIED_EX for 8 arguments
02593  */
02594 #define PY_CLASS_FREE_METHOD_QUALIFIED_EX_8( t_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, s_methodName, s_doc, i_dispatcher )\
02595     typedef ::lass::meta::type_list::Make< t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8 >::Type\
02596         LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams));\
02597     PY_CLASS_FREE_METHOD_QUALIFIED_EX(\
02598         t_cppClass, i_cppFreeMethod, t_return,\
02599         LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams)), s_methodName, s_doc,\
02600         i_dispatcher )
02601 
02602 /** @ingroup Python
02603  *  @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
02604  *  convenience macro, wraps PY_CLASS_FREE_METHOD_QUALIFIED_EX for 9 arguments
02605  */
02606 #define PY_CLASS_FREE_METHOD_QUALIFIED_EX_9( t_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, s_methodName, s_doc, i_dispatcher )\
02607     typedef ::lass::meta::type_list::Make< t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9 >::Type\
02608         LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams));\
02609     PY_CLASS_FREE_METHOD_QUALIFIED_EX(\
02610         t_cppClass, i_cppFreeMethod, t_return,\
02611         LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams)), s_methodName, s_doc,\
02612         i_dispatcher )
02613 
02614 /** @ingroup Python
02615  *  @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
02616  *  convenience macro, wraps PY_CLASS_FREE_METHOD_QUALIFIED_EX for 10 arguments
02617  */
02618 #define PY_CLASS_FREE_METHOD_QUALIFIED_EX_10( t_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, s_methodName, s_doc, i_dispatcher )\
02619     typedef ::lass::meta::type_list::Make< t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10 >::Type\
02620         LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams));\
02621     PY_CLASS_FREE_METHOD_QUALIFIED_EX(\
02622         t_cppClass, i_cppFreeMethod, t_return,\
02623         LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams)), s_methodName, s_doc,\
02624         i_dispatcher )
02625 
02626 /** @ingroup Python
02627  *  @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
02628  *  convenience macro, wraps PY_CLASS_FREE_METHOD_QUALIFIED_EX for 11 arguments
02629  */
02630 #define PY_CLASS_FREE_METHOD_QUALIFIED_EX_11( t_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, s_methodName, s_doc, i_dispatcher )\
02631     typedef ::lass::meta::type_list::Make< t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11 >::Type\
02632         LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams));\
02633     PY_CLASS_FREE_METHOD_QUALIFIED_EX(\
02634         t_cppClass, i_cppFreeMethod, t_return,\
02635         LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams)), s_methodName, s_doc,\
02636         i_dispatcher )
02637 
02638 /** @ingroup Python
02639  *  @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
02640  *  convenience macro, wraps PY_CLASS_FREE_METHOD_QUALIFIED_EX for 12 arguments
02641  */
02642 #define PY_CLASS_FREE_METHOD_QUALIFIED_EX_12( t_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, s_methodName, s_doc, i_dispatcher )\
02643     typedef ::lass::meta::type_list::Make< t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12 >::Type\
02644         LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams));\
02645     PY_CLASS_FREE_METHOD_QUALIFIED_EX(\
02646         t_cppClass, i_cppFreeMethod, t_return,\
02647         LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams)), s_methodName, s_doc,\
02648         i_dispatcher )
02649 
02650 /** @ingroup Python
02651  *  @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
02652  *  convenience macro, wraps PY_CLASS_FREE_METHOD_QUALIFIED_EX for 13 arguments
02653  */
02654 #define PY_CLASS_FREE_METHOD_QUALIFIED_EX_13( t_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, s_methodName, s_doc, i_dispatcher )\
02655     typedef ::lass::meta::type_list::Make< t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13 >::Type\
02656         LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams));\
02657     PY_CLASS_FREE_METHOD_QUALIFIED_EX(\
02658         t_cppClass, i_cppFreeMethod, t_return,\
02659         LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams)), s_methodName, s_doc,\
02660         i_dispatcher )
02661 
02662 /** @ingroup Python
02663  *  @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
02664  *  convenience macro, wraps PY_CLASS_FREE_METHOD_QUALIFIED_EX for 14 arguments
02665  */
02666 #define PY_CLASS_FREE_METHOD_QUALIFIED_EX_14( t_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, s_methodName, s_doc, i_dispatcher )\
02667     typedef ::lass::meta::type_list::Make< t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14 >::Type\
02668         LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams));\
02669     PY_CLASS_FREE_METHOD_QUALIFIED_EX(\
02670         t_cppClass, i_cppFreeMethod, t_return,\
02671         LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams)), s_methodName, s_doc,\
02672         i_dispatcher )
02673 
02674 /** @ingroup Python
02675  *  @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
02676  *  convenience macro, wraps PY_CLASS_FREE_METHOD_QUALIFIED_EX for 15 arguments
02677  */
02678 #define PY_CLASS_FREE_METHOD_QUALIFIED_EX_15( t_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15, s_methodName, s_doc, i_dispatcher )\
02679     typedef ::lass::meta::type_list::Make< t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15 >::Type\
02680         LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams));\
02681     PY_CLASS_FREE_METHOD_QUALIFIED_EX(\
02682         t_cppClass, i_cppFreeMethod, t_return,\
02683         LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams)), s_methodName, s_doc,\
02684         i_dispatcher )
02685 
02686 
02687 /** @ingroup Python
02688  *  @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
02689  *  convenience macro, wraps PY_CLASS_FREE_METHOD_QUALIFIED_EX with
02690  *  @a i_dispatcher = lassPyImpl_method_ ## @a t_cppClass ## __LINE__.
02691  */
02692 #define PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC( i_cppClass, i_cppFreeMethod, t_return, t_params, s_methodName, s_doc )\
02693     PY_CLASS_FREE_METHOD_QUALIFIED_EX(\
02694         i_cppClass, i_cppFreeMethod, t_return, t_params, s_methodName, s_doc,\
02695         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)))
02696 
02697 /** @ingroup Python
02698  *  @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
02699  *  convenience macro, wraps PY_CLASS_FREE_METHOD_QUALIFIED_EX_0 with
02700  *  @a i_dispatcher = lassPyImpl_method_ ## @a t_cppClass ## __LINE__.
02701  */
02702 #define PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_0( i_cppClass, i_cppFreeMethod, t_return, s_methodName, s_doc )\
02703     PY_CLASS_FREE_METHOD_QUALIFIED_EX_0(\
02704         i_cppClass, i_cppFreeMethod, t_return, s_methodName, s_doc,\
02705         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)))
02706 
02707 /** @ingroup Python
02708  *  @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
02709  *  convenience macro, wraps PY_CLASS_FREE_METHOD_QUALIFIED_EX_1 with
02710  *  @a i_dispatcher = lassPyImpl_method_ ## @a t_cppClass ## __LINE__.
02711  */
02712 #define PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_1( i_cppClass, i_cppFreeMethod, t_return, t_P1, s_methodName, s_doc )\
02713     PY_CLASS_FREE_METHOD_QUALIFIED_EX_1(\
02714         i_cppClass, i_cppFreeMethod, t_return, t_P1, s_methodName, s_doc,\
02715         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)))
02716 
02717 /** @ingroup Python
02718  *  @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
02719  *  convenience macro, wraps PY_CLASS_FREE_METHOD_QUALIFIED_EX_2 with
02720  *  @a i_dispatcher = lassPyImpl_method_ ## @a t_cppClass ## __LINE__.
02721  */
02722 #define PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_2( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, s_methodName, s_doc )\
02723     PY_CLASS_FREE_METHOD_QUALIFIED_EX_2(\
02724         i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, s_methodName, s_doc,\
02725         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)))
02726 
02727 /** @ingroup Python
02728  *  @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
02729  *  convenience macro, wraps PY_CLASS_FREE_METHOD_QUALIFIED_EX_3 with
02730  *  @a i_dispatcher = lassPyImpl_method_ ## @a t_cppClass ## __LINE__.
02731  */
02732 #define PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_3( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, s_methodName, s_doc )\
02733     PY_CLASS_FREE_METHOD_QUALIFIED_EX_3(\
02734         i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, s_methodName, s_doc,\
02735         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)))
02736 
02737 /** @ingroup Python
02738  *  @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
02739  *  convenience macro, wraps PY_CLASS_FREE_METHOD_QUALIFIED_EX_4 with
02740  *  @a i_dispatcher = lassPyImpl_method_ ## @a t_cppClass ## __LINE__.
02741  */
02742 #define PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_4( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, s_methodName, s_doc )\
02743     PY_CLASS_FREE_METHOD_QUALIFIED_EX_4(\
02744         i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, s_methodName, s_doc,\
02745         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)))
02746 
02747 /** @ingroup Python
02748  *  @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
02749  *  convenience macro, wraps PY_CLASS_FREE_METHOD_QUALIFIED_EX_5 with
02750  *  @a i_dispatcher = lassPyImpl_method_ ## @a t_cppClass ## __LINE__.
02751  */
02752 #define PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_5( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, s_methodName, s_doc )\
02753     PY_CLASS_FREE_METHOD_QUALIFIED_EX_5(\
02754         i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, s_methodName, s_doc,\
02755         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)))
02756 
02757 /** @ingroup Python
02758  *  @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
02759  *  convenience macro, wraps PY_CLASS_FREE_METHOD_QUALIFIED_EX_6 with
02760  *  @a i_dispatcher = lassPyImpl_method_ ## @a t_cppClass ## __LINE__.
02761  */
02762 #define PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_6( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, s_methodName, s_doc )\
02763     PY_CLASS_FREE_METHOD_QUALIFIED_EX_6(\
02764         i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, s_methodName, s_doc,\
02765         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)))
02766 
02767 /** @ingroup Python
02768  *  @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
02769  *  convenience macro, wraps PY_CLASS_FREE_METHOD_QUALIFIED_EX_7 with
02770  *  @a i_dispatcher = lassPyImpl_method_ ## @a t_cppClass ## __LINE__.
02771  */
02772 #define PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_7( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, s_methodName, s_doc )\
02773     PY_CLASS_FREE_METHOD_QUALIFIED_EX_7(\
02774         i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, s_methodName, s_doc,\
02775         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)))
02776 
02777 /** @ingroup Python
02778  *  @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
02779  *  convenience macro, wraps PY_CLASS_FREE_METHOD_QUALIFIED_EX_8 with
02780  *  @a i_dispatcher = lassPyImpl_method_ ## @a t_cppClass ## __LINE__.
02781  */
02782 #define PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_8( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, s_methodName, s_doc )\
02783     PY_CLASS_FREE_METHOD_QUALIFIED_EX_8(\
02784         i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, s_methodName, s_doc,\
02785         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)))
02786 
02787 /** @ingroup Python
02788  *  @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
02789  *  convenience macro, wraps PY_CLASS_FREE_METHOD_QUALIFIED_EX_9 with
02790  *  @a i_dispatcher = lassPyImpl_method_ ## @a t_cppClass ## __LINE__.
02791  */
02792 #define PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_9( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, s_methodName, s_doc )\
02793     PY_CLASS_FREE_METHOD_QUALIFIED_EX_9(\
02794         i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, s_methodName, s_doc,\
02795         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)))
02796 
02797 /** @ingroup Python
02798  *  @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
02799  *  convenience macro, wraps PY_CLASS_FREE_METHOD_QUALIFIED_EX_10 with
02800  *  @a i_dispatcher = lassPyImpl_method_ ## @a t_cppClass ## __LINE__.
02801  */
02802 #define PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_10( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, s_methodName, s_doc )\
02803     PY_CLASS_FREE_METHOD_QUALIFIED_EX_10(\
02804         i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, s_methodName, s_doc,\
02805         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)))
02806 
02807 /** @ingroup Python
02808  *  @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
02809  *  convenience macro, wraps PY_CLASS_FREE_METHOD_QUALIFIED_EX_11 with
02810  *  @a i_dispatcher = lassPyImpl_method_ ## @a t_cppClass ## __LINE__.
02811  */
02812 #define PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_11( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, s_methodName, s_doc )\
02813     PY_CLASS_FREE_METHOD_QUALIFIED_EX_11(\
02814         i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, s_methodName, s_doc,\
02815         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)))
02816 
02817 /** @ingroup Python
02818  *  @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
02819  *  convenience macro, wraps PY_CLASS_FREE_METHOD_QUALIFIED_EX_12 with
02820  *  @a i_dispatcher = lassPyImpl_method_ ## @a t_cppClass ## __LINE__.
02821  */
02822 #define PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_12( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, s_methodName, s_doc )\
02823     PY_CLASS_FREE_METHOD_QUALIFIED_EX_12(\
02824         i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, s_methodName, s_doc,\
02825         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)))
02826 
02827 /** @ingroup Python
02828  *  @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
02829  *  convenience macro, wraps PY_CLASS_FREE_METHOD_QUALIFIED_EX_13 with
02830  *  @a i_dispatcher = lassPyImpl_method_ ## @a t_cppClass ## __LINE__.
02831  */
02832 #define PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_13( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, s_methodName, s_doc )\
02833     PY_CLASS_FREE_METHOD_QUALIFIED_EX_13(\
02834         i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, s_methodName, s_doc,\
02835         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)))
02836 
02837 /** @ingroup Python
02838  *  @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
02839  *  convenience macro, wraps PY_CLASS_FREE_METHOD_QUALIFIED_EX_14 with
02840  *  @a i_dispatcher = lassPyImpl_method_ ## @a t_cppClass ## __LINE__.
02841  */
02842 #define PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_14( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, s_methodName, s_doc )\
02843     PY_CLASS_FREE_METHOD_QUALIFIED_EX_14(\
02844         i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, s_methodName, s_doc,\
02845         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)))
02846 
02847 /** @ingroup Python
02848  *  @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
02849  *  convenience macro, wraps PY_CLASS_FREE_METHOD_QUALIFIED_EX_15 with
02850  *  @a i_dispatcher = lassPyImpl_method_ ## @a t_cppClass ## __LINE__.
02851  */
02852 #define PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_15( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15, s_methodName, s_doc )\
02853     PY_CLASS_FREE_METHOD_QUALIFIED_EX_15(\
02854         i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15, s_methodName, s_doc,\
02855         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)))
02856 
02857 
02858 /** @ingroup Python
02859  *  @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
02860  *  convenience macro, wraps PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC with @a s_doc = 0.
02861  */
02862 #define PY_CLASS_FREE_METHOD_QUALIFIED_NAME( i_cppClass, i_cppFreeMethod, t_return, t_params, s_methodName )\
02863         PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC(\
02864             i_cppClass, i_cppFreeMethod, t_return, t_params, s_methodName, 0 )
02865 
02866 /** @ingroup Python
02867  *  @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
02868  *  convenience macro, wraps PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_0 with @a s_doc = 0.
02869  */
02870 #define PY_CLASS_FREE_METHOD_QUALIFIED_NAME_0( i_cppClass, i_cppFreeMethod, t_return, s_methodName )\
02871     PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_0(\
02872         i_cppClass, i_cppFreeMethod, t_return, s_methodName, 0 )
02873 
02874 /** @ingroup Python
02875  *  @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
02876  *  convenience macro, wraps PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_1 with @a s_doc = 0.
02877  */
02878 #define PY_CLASS_FREE_METHOD_QUALIFIED_NAME_1( i_cppClass, i_cppFreeMethod, t_return, t_P1, s_methodName )\
02879     PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_1(\
02880         i_cppClass, i_cppFreeMethod, t_return, t_P1, s_methodName, 0 )
02881 
02882 /** @ingroup Python
02883  *  @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
02884  *  convenience macro, wraps PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_2 with @a s_doc = 0.
02885  */
02886 #define PY_CLASS_FREE_METHOD_QUALIFIED_NAME_2( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, s_methodName )\
02887     PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_2(\
02888         i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, s_methodName, 0 )
02889 
02890 /** @ingroup Python
02891  *  @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
02892  *  convenience macro, wraps PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_3 with @a s_doc = 0.
02893  */
02894 #define PY_CLASS_FREE_METHOD_QUALIFIED_NAME_3( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, s_methodName )\
02895     PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_3(\
02896         i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, s_methodName, 0 )
02897 
02898 /** @ingroup Python
02899  *  @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
02900  *  convenience macro, wraps PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_4 with @a s_doc = 0.
02901  */
02902 #define PY_CLASS_FREE_METHOD_QUALIFIED_NAME_4( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, s_methodName )\
02903     PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_4(\
02904         i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, s_methodName, 0 )
02905 
02906 /** @ingroup Python
02907  *  @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
02908  *  convenience macro, wraps PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_5 with @a s_doc = 0.
02909  */
02910 #define PY_CLASS_FREE_METHOD_QUALIFIED_NAME_5( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, s_methodName )\
02911     PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_5(\
02912         i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, s_methodName, 0 )
02913 
02914 /** @ingroup Python
02915  *  @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
02916  *  convenience macro, wraps PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_6 with @a s_doc = 0.
02917  */
02918 #define PY_CLASS_FREE_METHOD_QUALIFIED_NAME_6( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, s_methodName )\
02919     PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_6(\
02920         i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, s_methodName, 0 )
02921 
02922 /** @ingroup Python
02923  *  @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
02924  *  convenience macro, wraps PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_7 with @a s_doc = 0.
02925  */
02926 #define PY_CLASS_FREE_METHOD_QUALIFIED_NAME_7( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, s_methodName )\
02927     PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_7(\
02928         i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, s_methodName, 0 )
02929 
02930 /** @ingroup Python
02931  *  @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
02932  *  convenience macro, wraps PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_8 with @a s_doc = 0.
02933  */
02934 #define PY_CLASS_FREE_METHOD_QUALIFIED_NAME_8( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, s_methodName )\
02935     PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_8(\
02936         i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, s_methodName, 0 )
02937 
02938 /** @ingroup Python
02939  *  @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
02940  *  convenience macro, wraps PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_9 with @a s_doc = 0.
02941  */
02942 #define PY_CLASS_FREE_METHOD_QUALIFIED_NAME_9( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, s_methodName )\
02943     PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_9(\
02944         i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, s_methodName, 0 )
02945 
02946 /** @ingroup Python
02947  *  @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
02948  *  convenience macro, wraps PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_10 with @a s_doc = 0.
02949  */
02950 #define PY_CLASS_FREE_METHOD_QUALIFIED_NAME_10( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, s_methodName )\
02951     PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_10(\
02952         i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, s_methodName, 0 )
02953 
02954 /** @ingroup Python
02955  *  @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
02956  *  convenience macro, wraps PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_11 with @a s_doc = 0.
02957  */
02958 #define PY_CLASS_FREE_METHOD_QUALIFIED_NAME_11( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, s_methodName )\
02959     PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_11(\
02960         i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, s_methodName, 0 )
02961 
02962 /** @ingroup Python
02963  *  @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
02964  *  convenience macro, wraps PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_12 with @a s_doc = 0.
02965  */
02966 #define PY_CLASS_FREE_METHOD_QUALIFIED_NAME_12( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, s_methodName )\
02967     PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_12(\
02968         i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, s_methodName, 0 )
02969 
02970 /** @ingroup Python
02971  *  @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
02972  *  convenience macro, wraps PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_13 with @a s_doc = 0.
02973  */
02974 #define PY_CLASS_FREE_METHOD_QUALIFIED_NAME_13( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, s_methodName )\
02975     PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_13(\
02976         i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, s_methodName, 0 )
02977 
02978 /** @ingroup Python
02979  *  @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
02980  *  convenience macro, wraps PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_14 with @a s_doc = 0.
02981  */
02982 #define PY_CLASS_FREE_METHOD_QUALIFIED_NAME_14( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, s_methodName )\
02983     PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_14(\
02984         i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, s_methodName, 0 )
02985 
02986 /** @ingroup Python
02987  *  @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
02988  *  convenience macro, wraps PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_15 with @a s_doc = 0.
02989  */
02990 #define PY_CLASS_FREE_METHOD_QUALIFIED_NAME_15( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15, s_methodName )\
02991     PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_15(\
02992         i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15, s_methodName, 0 )
02993 
02994 
02995 /** @ingroup Python
02996  *  @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
02997  *  convenience macro, wraps PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC
02998  *  with @a s_methodName = # @a i_cppFreeMethod.
02999  */
03000 #define PY_CLASS_FREE_METHOD_QUALIFIED_DOC( i_cppClass, i_cppFreeMethod, t_return, t_params, s_doc )\
03001     PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC(\
03002         i_cppClass, i_cppFreeMethod, t_return, t_params, LASS_STRINGIFY(i_cppFreeMethod), s_doc )
03003 
03004 /** @ingroup Python
03005  *  @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
03006  *  convenience macro, wraps PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC
03007  *  with @a s_methodName = # @a i_cppFreeMethod.
03008  */
03009 #define PY_CLASS_FREE_METHOD_QUALIFIED_DOC_0( i_cppClass, i_cppFreeMethod, t_return, s_doc )\
03010     PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_0(\
03011         i_cppClass, i_cppFreeMethod, t_return, LASS_STRINGIFY(i_cppFreeMethod), s_doc )
03012 
03013 /** @ingroup Python
03014  *  @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
03015  *  convenience macro, wraps PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC
03016  *  with @a s_methodName = # @a i_cppFreeMethod.
03017  */
03018 #define PY_CLASS_FREE_METHOD_QUALIFIED_DOC_1( i_cppClass, i_cppFreeMethod, t_return, t_P1, s_doc )\
03019     PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_1(\
03020         i_cppClass, i_cppFreeMethod, t_return, t_P1, LASS_STRINGIFY(i_cppFreeMethod), s_doc )
03021 
03022 /** @ingroup Python
03023  *  @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
03024  *  convenience macro, wraps PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC
03025  *  with @a s_methodName = # @a i_cppFreeMethod.
03026  */
03027 #define PY_CLASS_FREE_METHOD_QUALIFIED_DOC_2( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, s_doc )\
03028     PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_2(\
03029         i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, LASS_STRINGIFY(i_cppFreeMethod), s_doc )
03030 
03031 /** @ingroup Python
03032  *  @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
03033  *  convenience macro, wraps PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC
03034  *  with @a s_methodName = # @a i_cppFreeMethod.
03035  */
03036 #define PY_CLASS_FREE_METHOD_QUALIFIED_DOC_3( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, s_doc )\
03037     PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_3(\
03038         i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, LASS_STRINGIFY(i_cppFreeMethod), s_doc )
03039 
03040 /** @ingroup Python
03041  *  @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
03042  *  convenience macro, wraps PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC
03043  *  with @a s_methodName = # @a i_cppFreeMethod.
03044  */
03045 #define PY_CLASS_FREE_METHOD_QUALIFIED_DOC_4( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, s_doc )\
03046     PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_4(\
03047         i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, LASS_STRINGIFY(i_cppFreeMethod), s_doc )
03048 
03049 /** @ingroup Python
03050  *  @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
03051  *  convenience macro, wraps PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC
03052  *  with @a s_methodName = # @a i_cppFreeMethod.
03053  */
03054 #define PY_CLASS_FREE_METHOD_QUALIFIED_DOC_5( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, s_doc )\
03055     PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_5(\
03056         i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, LASS_STRINGIFY(i_cppFreeMethod), s_doc )
03057 
03058 /** @ingroup Python
03059  *  @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
03060  *  convenience macro, wraps PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC
03061  *  with @a s_methodName = # @a i_cppFreeMethod.
03062  */
03063 #define PY_CLASS_FREE_METHOD_QUALIFIED_DOC_6( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, s_doc )\
03064     PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_6(\
03065         i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, LASS_STRINGIFY(i_cppFreeMethod), s_doc )
03066 
03067 /** @ingroup Python
03068  *  @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
03069  *  convenience macro, wraps PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC
03070  *  with @a s_methodName = # @a i_cppFreeMethod.
03071  */
03072 #define PY_CLASS_FREE_METHOD_QUALIFIED_DOC_7( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, s_doc )\
03073     PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_7(\
03074         i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, LASS_STRINGIFY(i_cppFreeMethod), s_doc )
03075 
03076 /** @ingroup Python
03077  *  @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
03078  *  convenience macro, wraps PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC
03079  *  with @a s_methodName = # @a i_cppFreeMethod.
03080  */
03081 #define PY_CLASS_FREE_METHOD_QUALIFIED_DOC_8( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, s_doc )\
03082     PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_8(\
03083         i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, LASS_STRINGIFY(i_cppFreeMethod), s_doc )
03084 
03085 /** @ingroup Python
03086  *  @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
03087  *  convenience macro, wraps PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC
03088  *  with @a s_methodName = # @a i_cppFreeMethod.
03089  */
03090 #define PY_CLASS_FREE_METHOD_QUALIFIED_DOC_9( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, s_doc )\
03091     PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_9(\
03092         i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, LASS_STRINGIFY(i_cppFreeMethod), s_doc )
03093 
03094 /** @ingroup Python
03095  *  @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
03096  *  convenience macro, wraps PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC
03097  *  with @a s_methodName = # @a i_cppFreeMethod.
03098  */
03099 #define PY_CLASS_FREE_METHOD_QUALIFIED_DOC_10( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, s_doc )\
03100     PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_10(\
03101         i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, LASS_STRINGIFY(i_cppFreeMethod), s_doc )
03102 
03103 /** @ingroup Python
03104  *  @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
03105  *  convenience macro, wraps PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC
03106  *  with @a s_methodName = # @a i_cppFreeMethod.
03107  */
03108 #define PY_CLASS_FREE_METHOD_QUALIFIED_DOC_11( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, s_doc )\
03109     PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_11(\
03110         i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, LASS_STRINGIFY(i_cppFreeMethod), s_doc )
03111 
03112 /** @ingroup Python
03113  *  @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
03114  *  convenience macro, wraps PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC
03115  *  with @a s_methodName = # @a i_cppFreeMethod.
03116  */
03117 #define PY_CLASS_FREE_METHOD_QUALIFIED_DOC_12( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, s_doc )\
03118     PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_12(\
03119         i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, LASS_STRINGIFY(i_cppFreeMethod), s_doc )
03120 
03121 /** @ingroup Python
03122  *  @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
03123  *  convenience macro, wraps PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC
03124  *  with @a s_methodName = # @a i_cppFreeMethod.
03125  */
03126 #define PY_CLASS_FREE_METHOD_QUALIFIED_DOC_13( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, s_doc )\
03127     PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_13(\
03128         i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, LASS_STRINGIFY(i_cppFreeMethod), s_doc )
03129 
03130 /** @ingroup Python
03131  *  @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
03132  *  convenience macro, wraps PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC
03133  *  with @a s_methodName = # @a i_cppFreeMethod.
03134  */
03135 #define PY_CLASS_FREE_METHOD_QUALIFIED_DOC_14( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, s_doc )\
03136     PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_14(\
03137         i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, LASS_STRINGIFY(i_cppFreeMethod), s_doc )
03138 
03139 /** @ingroup Python
03140  *  @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
03141  *  convenience macro, wraps PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC
03142  *  with @a s_methodName = # @a i_cppFreeMethod.
03143  */
03144 #define PY_CLASS_FREE_METHOD_QUALIFIED_DOC_15( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15, s_doc )\
03145     PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_15(\
03146         i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15, LASS_STRINGIFY(i_cppFreeMethod), s_doc )
03147 
03148 
03149 /** @ingroup Python
03150  *  @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
03151  *  convenience macro, wraps PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC
03152  *  with @a s_methodName = # @a i_cppFreeMethod and @a s_doc = 0.
03153  */
03154 #define PY_CLASS_FREE_METHOD_QUALIFIED( i_cppClass, i_cppFreeMethod, t_return, t_params )\
03155     PY_CLASS_FREE_METHOD_QUALIFIED_DOC( i_cppClass, i_cppFreeMethod, t_return, t_params, 0 )
03156 
03157 /** @ingroup Python
03158  *  @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
03159  *  convenience macro, wraps PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC
03160  *  with @a s_methodName = # @a i_cppFreeMethod and @a s_doc = 0.
03161  */
03162 #define PY_CLASS_FREE_METHOD_QUALIFIED_0( i_cppClass, i_cppFreeMethod, t_return )\
03163     PY_CLASS_FREE_METHOD_QUALIFIED_DOC_0( i_cppClass, i_cppFreeMethod, t_return, 0 )
03164 
03165 /** @ingroup Python
03166  *  @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
03167  *  convenience macro, wraps PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC
03168  *  with @a s_methodName = # @a i_cppFreeMethod and @a s_doc = 0.
03169  */
03170 #define PY_CLASS_FREE_METHOD_QUALIFIED_1( i_cppClass, i_cppFreeMethod, t_return, t_P1 )\
03171     PY_CLASS_FREE_METHOD_QUALIFIED_DOC_1( i_cppClass, i_cppFreeMethod, t_return, t_P1, 0 )
03172 
03173 /** @ingroup Python
03174  *  @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
03175  *  convenience macro, wraps PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC
03176  *  with @a s_methodName = # @a i_cppFreeMethod and @a s_doc = 0.
03177  */
03178 #define PY_CLASS_FREE_METHOD_QUALIFIED_2( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2 )\
03179     PY_CLASS_FREE_METHOD_QUALIFIED_DOC_2( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, 0 )
03180 
03181 /** @ingroup Python
03182  *  @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
03183  *  convenience macro, wraps PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC
03184  *  with @a s_methodName = # @a i_cppFreeMethod and @a s_doc = 0.
03185  */
03186 #define PY_CLASS_FREE_METHOD_QUALIFIED_3( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3 )\
03187     PY_CLASS_FREE_METHOD_QUALIFIED_DOC_3( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, 0 )
03188 
03189 /** @ingroup Python
03190  *  @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
03191  *  convenience macro, wraps PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC
03192  *  with @a s_methodName = # @a i_cppFreeMethod and @a s_doc = 0.
03193  */
03194 #define PY_CLASS_FREE_METHOD_QUALIFIED_4( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4 )\
03195     PY_CLASS_FREE_METHOD_QUALIFIED_DOC_4( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, 0 )
03196 
03197 /** @ingroup Python
03198  *  @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
03199  *  convenience macro, wraps PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC
03200  *  with @a s_methodName = # @a i_cppFreeMethod and @a s_doc = 0.
03201  */
03202 #define PY_CLASS_FREE_METHOD_QUALIFIED_5( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5 )\
03203     PY_CLASS_FREE_METHOD_QUALIFIED_DOC_5( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, 0 )
03204 
03205 /** @ingroup Python
03206  *  @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
03207  *  convenience macro, wraps PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC
03208  *  with @a s_methodName = # @a i_cppFreeMethod and @a s_doc = 0.
03209  */
03210 #define PY_CLASS_FREE_METHOD_QUALIFIED_6( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6 )\
03211     PY_CLASS_FREE_METHOD_QUALIFIED_DOC_6( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, 0 )
03212 
03213 /** @ingroup Python
03214  *  @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
03215  *  convenience macro, wraps PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC
03216  *  with @a s_methodName = # @a i_cppFreeMethod and @a s_doc = 0.
03217  */
03218 #define PY_CLASS_FREE_METHOD_QUALIFIED_7( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7 )\
03219     PY_CLASS_FREE_METHOD_QUALIFIED_DOC_7( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, 0 )
03220 
03221 /** @ingroup Python
03222  *  @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
03223  *  convenience macro, wraps PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC
03224  *  with @a s_methodName = # @a i_cppFreeMethod and @a s_doc = 0.
03225  */
03226 #define PY_CLASS_FREE_METHOD_QUALIFIED_8( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8 )\
03227     PY_CLASS_FREE_METHOD_QUALIFIED_DOC_8( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, 0 )
03228 
03229 /** @ingroup Python
03230  *  @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
03231  *  convenience macro, wraps PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC
03232  *  with @a s_methodName = # @a i_cppFreeMethod and @a s_doc = 0.
03233  */
03234 #define PY_CLASS_FREE_METHOD_QUALIFIED_9( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9 )\
03235     PY_CLASS_FREE_METHOD_QUALIFIED_DOC_9( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, 0 )
03236 
03237 /** @ingroup Python
03238  *  @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
03239  *  convenience macro, wraps PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC
03240  *  with @a s_methodName = # @a i_cppFreeMethod and @a s_doc = 0.
03241  */
03242 #define PY_CLASS_FREE_METHOD_QUALIFIED_10( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10 )\
03243     PY_CLASS_FREE_METHOD_QUALIFIED_DOC_10( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, 0 )
03244 
03245 /** @ingroup Python
03246  *  @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
03247  *  convenience macro, wraps PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC
03248  *  with @a s_methodName = # @a i_cppFreeMethod and @a s_doc = 0.
03249  */
03250 #define PY_CLASS_FREE_METHOD_QUALIFIED_11( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11 )\
03251     PY_CLASS_FREE_METHOD_QUALIFIED_DOC_11( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, 0 )
03252 
03253 /** @ingroup Python
03254  *  @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
03255  *  convenience macro, wraps PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC
03256  *  with @a s_methodName = # @a i_cppFreeMethod and @a s_doc = 0.
03257  */
03258 #define PY_CLASS_FREE_METHOD_QUALIFIED_12( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12 )\
03259     PY_CLASS_FREE_METHOD_QUALIFIED_DOC_12( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, 0 )
03260 
03261 /** @ingroup Python
03262  *  @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
03263  *  convenience macro, wraps PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC
03264  *  with @a s_methodName = # @a i_cppFreeMethod and @a s_doc = 0.
03265  */
03266 #define PY_CLASS_FREE_METHOD_QUALIFIED_13( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13 )\
03267     PY_CLASS_FREE_METHOD_QUALIFIED_DOC_13( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, 0 )
03268 
03269 /** @ingroup Python
03270  *  @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
03271  *  convenience macro, wraps PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC
03272  *  with @a s_methodName = # @a i_cppFreeMethod and @a s_doc = 0.
03273  */
03274 #define PY_CLASS_FREE_METHOD_QUALIFIED_14( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14 )\
03275     PY_CLASS_FREE_METHOD_QUALIFIED_DOC_14( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, 0 )
03276 
03277 /** @ingroup Python
03278  *  @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
03279  *  convenience macro, wraps PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC
03280  *  with @a s_methodName = # @a i_cppFreeMethod and @a s_doc = 0.
03281  */
03282 #define PY_CLASS_FREE_METHOD_QUALIFIED_15( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15 )\
03283     PY_CLASS_FREE_METHOD_QUALIFIED_DOC_15( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15, 0 )
03284 
03285 
03286 
03287 // --- "casting" methods ------------------------------------------------------------------------------
03288 
03289 /** @ingroup Python
03290  *  @sa PY_CLASS_CAST_EX
03291  *  @brief Exports a C++ method to Python with fully qualified return type and parameters and with a casting policy
03292  *         on how to pass arguments back and forth.
03293  *
03294  *  @param t_cppClass
03295  *      the C++ class you're exporting a method of
03296  *  @param i_cppMethod
03297  *      the name of the method in C++
03298  *  @param t_return
03299  *      the return type of @a i_cppMethod
03300  *  @param t_params
03301  *      a lass::meta::TypeList of the parameter types of @a i_cppMethod
03302  *  @param s_methodName
03303  *      the name the method will have in Python
03304  *  @param s_doc
03305  *      documentation of method as shown in Python (zero terminated C string)
03306  *  @param i_dispatcher
03307  *      A unique name of the static C++ dispatcher function to be generated.  This name will be
03308  *      used for the names of automatic generated variables and functions and should be unique
03309  *      per exported C++ class/method pair.
03310  *
03311  *  You can use this macro instead of PY_CLASS_METHOD_EX if there's a need to convert any types on the fly.
03312  *
03313  *  Just like PY_CLASS_METHOD_EX, PY_CLASS_METHOD_QUALIFIED_EX allows for overloading.  These
03314  *  overloads may be mixed with PY_CLASS_METHOD_EX methods.
03315  *  By default two casting operators are supported:
03316  *  * PointerCast<_type> : will interpret the ownership rules as if a pointer is passed along
03317  *  * CopyCast<_type> : will interpret the ownership rules as if a copy of the object is passed along
03318  *
03319  *  It is also possible to define own casting operators in a similar and easy way: look for the PointerCast code.
03320  *
03321  *  @code
03322  *  // foo.h
03323  *  class Foo
03324  *  {
03325  *      PY_HEADER(python::PyObjectPlus)
03326  *  public:
03327  *      void bar(int a);
03328  *      void bar(const std::string& b) const;
03329  *  };
03330  *
03331  *  // foo.cpp
03332  *  PY_DECLARE_CLASS(Foo)
03333  *  PY_CLASS_METHOD_CAST_EX_0(Foo, bar, void, CopyCast<const std::string&>, "bar", 0, foo_bar_a)
03334  *  @endcode
03335  */
03336 
03337 
03338 /** @ingroup Python
03339  *  @sa PY_CLASS_CAST_QUALIFIED_EX_0
03340  *  convenience macro, wraps PY_CLASS_CAST_QUALIFIED_EX for 0 arguments
03341  */
03342 #define PY_CLASS_METHOD_CAST_EX_0(t_cppClass, i_cppMethod, t_return, s_methodName, s_doc, i_dispatcher, i_typename) \
03343     ::lass::python::OwnerCaster<t_return>::TCaster::TTarget i_dispatcher ( \
03344     ::lass::python::impl::ShadowTraits< t_cppClass >::TCppClass * iThis\
03345     )\
03346     {\
03347         return iThis->i_cppMethod ();\
03348     }\
03349     typedef lass::meta::type_list::Make< lass::python::impl::ShadowTraits< t_cppClass >::TCppClass* >::Type i_typename;\
03350     PY_CLASS_FREE_METHOD_QUALIFIED_EX( t_cppClass, i_dispatcher, t_return, i_typename, s_methodName, s_doc, i_dispatcher );
03351 
03352 
03353  
03354 /** @ingroup Python
03355  *  @sa PY_CLASS_METHOD_CAST_EX
03356  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_EX for 1 arguments
03357  */
03358  #define PY_CLASS_METHOD_CAST_EX_1( t_cppClass, i_cppMethod, t_return, t_P1, s_methodName, s_doc, i_dispatcher, i_typename )\
03359     ::lass::python::OwnerCaster< t_return >::TCaster::TTarget i_dispatcher ( \
03360     ::lass::python::impl::ShadowTraits< t_cppClass >::TCppClass * iThis,\
03361     ::lass::python::OwnerCaster< t_P1 >::TCaster::TTarget iArg1 \
03362     )\
03363     {\
03364         return iThis->i_cppMethod ( ::lass::python::OwnerCaster< t_P1 >::TCaster::cast(iArg1) );\
03365     }\
03366     typedef lass::meta::type_list::Make< lass::python::impl::ShadowTraits< t_cppClass >::TCppClass*, lass::python::OwnerCaster< t_P1 >::TCaster::TTarget >::Type i_typename;\
03367     PY_CLASS_FREE_METHOD_QUALIFIED_EX( t_cppClass, i_dispatcher, t_return, i_typename, s_methodName, s_doc, i_dispatcher );
03368  
03369 /** @ingroup Python
03370  *  @sa PY_CLASS_METHOD_CAST_EX
03371  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_EX for 2 arguments
03372  */
03373  #define PY_CLASS_METHOD_CAST_EX_2( t_cppClass, i_cppMethod, t_return, t_P1, t_P2, s_methodName, s_doc, i_dispatcher, i_typename )\
03374     ::lass::python::OwnerCaster< t_return >::TCaster::TTarget i_dispatcher ( \
03375     ::lass::python::impl::ShadowTraits< t_cppClass >::TCppClass * iThis,\
03376     ::lass::python::OwnerCaster< t_P1 >::TCaster::TTarget iArg1, ::lass::python::OwnerCaster< t_P2 >::TCaster::TTarget iArg2 \
03377     )\
03378     {\
03379         return iThis->i_cppMethod ( ::lass::python::OwnerCaster< t_P1 >::TCaster::cast(iArg1), ::lass::python::OwnerCaster< t_P2 >::TCaster::cast(iArg2) );\
03380     }\
03381     typedef lass::meta::type_list::Make< lass::python::impl::ShadowTraits< t_cppClass >::TCppClass*, lass::python::OwnerCaster< t_P1 >::TCaster::TTarget, lass::python::OwnerCaster< t_P2 >::TCaster::TTarget >::Type i_typename;\
03382     PY_CLASS_FREE_METHOD_QUALIFIED_EX( t_cppClass, i_dispatcher, t_return, i_typename, s_methodName, s_doc, i_dispatcher );
03383  
03384 /** @ingroup Python
03385  *  @sa PY_CLASS_METHOD_CAST_EX
03386  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_EX for 3 arguments
03387  */
03388  #define PY_CLASS_METHOD_CAST_EX_3( t_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, s_methodName, s_doc, i_dispatcher, i_typename )\
03389     ::lass::python::OwnerCaster< t_return >::TCaster::TTarget i_dispatcher ( \
03390     ::lass::python::impl::ShadowTraits< t_cppClass >::TCppClass * iThis,\
03391     ::lass::python::OwnerCaster< t_P1 >::TCaster::TTarget iArg1, ::lass::python::OwnerCaster< t_P2 >::TCaster::TTarget iArg2, ::lass::python::OwnerCaster< t_P3 >::TCaster::TTarget iArg3 \
03392     )\
03393     {\
03394         return iThis->i_cppMethod ( ::lass::python::OwnerCaster< t_P1 >::TCaster::cast(iArg1), ::lass::python::OwnerCaster< t_P2 >::TCaster::cast(iArg2), ::lass::python::OwnerCaster< t_P3 >::TCaster::cast(iArg3) );\
03395     }\
03396     typedef lass::meta::type_list::Make< lass::python::impl::ShadowTraits< t_cppClass >::TCppClass*, lass::python::OwnerCaster< t_P1 >::TCaster::TTarget, lass::python::OwnerCaster< t_P2 >::TCaster::TTarget, lass::python::OwnerCaster< t_P3 >::TCaster::TTarget >::Type i_typename;\
03397     PY_CLASS_FREE_METHOD_QUALIFIED_EX( t_cppClass, i_dispatcher, t_return, i_typename, s_methodName, s_doc, i_dispatcher );
03398  
03399 /** @ingroup Python
03400  *  @sa PY_CLASS_METHOD_CAST_EX
03401  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_EX for 4 arguments
03402  */
03403  #define PY_CLASS_METHOD_CAST_EX_4( t_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, s_methodName, s_doc, i_dispatcher, i_typename )\
03404     ::lass::python::OwnerCaster< t_return >::TCaster::TTarget i_dispatcher ( \
03405     ::lass::python::impl::ShadowTraits< t_cppClass >::TCppClass * iThis,\
03406     ::lass::python::OwnerCaster< t_P1 >::TCaster::TTarget iArg1, ::lass::python::OwnerCaster< t_P2 >::TCaster::TTarget iArg2, ::lass::python::OwnerCaster< t_P3 >::TCaster::TTarget iArg3, ::lass::python::OwnerCaster< t_P4 >::TCaster::TTarget iArg4 \
03407     )\
03408     {\
03409         return iThis->i_cppMethod ( ::lass::python::OwnerCaster< t_P1 >::TCaster::cast(iArg1), ::lass::python::OwnerCaster< t_P2 >::TCaster::cast(iArg2), ::lass::python::OwnerCaster< t_P3 >::TCaster::cast(iArg3), ::lass::python::OwnerCaster< t_P4 >::TCaster::cast(iArg4) );\
03410     }\
03411     typedef lass::meta::type_list::Make< lass::python::impl::ShadowTraits< t_cppClass >::TCppClass*, lass::python::OwnerCaster< t_P1 >::TCaster::TTarget, lass::python::OwnerCaster< t_P2 >::TCaster::TTarget, lass::python::OwnerCaster< t_P3 >::TCaster::TTarget, lass::python::OwnerCaster< t_P4 >::TCaster::TTarget >::Type i_typename;\
03412     PY_CLASS_FREE_METHOD_QUALIFIED_EX( t_cppClass, i_dispatcher, t_return, i_typename, s_methodName, s_doc, i_dispatcher );
03413  
03414 /** @ingroup Python
03415  *  @sa PY_CLASS_METHOD_CAST_EX
03416  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_EX for 5 arguments
03417  */
03418  #define PY_CLASS_METHOD_CAST_EX_5( t_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, s_methodName, s_doc, i_dispatcher, i_typename )\
03419     ::lass::python::OwnerCaster< t_return >::TCaster::TTarget i_dispatcher ( \
03420     ::lass::python::impl::ShadowTraits< t_cppClass >::TCppClass * iThis,\
03421     ::lass::python::OwnerCaster< t_P1 >::TCaster::TTarget iArg1, ::lass::python::OwnerCaster< t_P2 >::TCaster::TTarget iArg2, ::lass::python::OwnerCaster< t_P3 >::TCaster::TTarget iArg3, ::lass::python::OwnerCaster< t_P4 >::TCaster::TTarget iArg4, ::lass::python::OwnerCaster< t_P5 >::TCaster::TTarget iArg5 \
03422     )\
03423     {\
03424         return iThis->i_cppMethod ( ::lass::python::OwnerCaster< t_P1 >::TCaster::cast(iArg1), ::lass::python::OwnerCaster< t_P2 >::TCaster::cast(iArg2), ::lass::python::OwnerCaster< t_P3 >::TCaster::cast(iArg3), ::lass::python::OwnerCaster< t_P4 >::TCaster::cast(iArg4), ::lass::python::OwnerCaster< t_P5 >::TCaster::cast(iArg5) );\
03425     }\
03426     typedef lass::meta::type_list::Make< lass::python::impl::ShadowTraits< t_cppClass >::TCppClass*, lass::python::OwnerCaster< t_P1 >::TCaster::TTarget, lass::python::OwnerCaster< t_P2 >::TCaster::TTarget, lass::python::OwnerCaster< t_P3 >::TCaster::TTarget, lass::python::OwnerCaster< t_P4 >::TCaster::TTarget, lass::python::OwnerCaster< t_P5 >::TCaster::TTarget >::Type i_typename;\
03427     PY_CLASS_FREE_METHOD_QUALIFIED_EX( t_cppClass, i_dispatcher, t_return, i_typename, s_methodName, s_doc, i_dispatcher );
03428  
03429 /** @ingroup Python
03430  *  @sa PY_CLASS_METHOD_CAST_EX
03431  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_EX for 6 arguments
03432  */
03433  #define PY_CLASS_METHOD_CAST_EX_6( t_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, s_methodName, s_doc, i_dispatcher, i_typename )\
03434     ::lass::python::OwnerCaster< t_return >::TCaster::TTarget i_dispatcher ( \
03435     ::lass::python::impl::ShadowTraits< t_cppClass >::TCppClass * iThis,\
03436     ::lass::python::OwnerCaster< t_P1 >::TCaster::TTarget iArg1, ::lass::python::OwnerCaster< t_P2 >::TCaster::TTarget iArg2, ::lass::python::OwnerCaster< t_P3 >::TCaster::TTarget iArg3, ::lass::python::OwnerCaster< t_P4 >::TCaster::TTarget iArg4, ::lass::python::OwnerCaster< t_P5 >::TCaster::TTarget iArg5, ::lass::python::OwnerCaster< t_P6 >::TCaster::TTarget iArg6 \
03437     )\
03438     {\
03439         return iThis->i_cppMethod ( ::lass::python::OwnerCaster< t_P1 >::TCaster::cast(iArg1), ::lass::python::OwnerCaster< t_P2 >::TCaster::cast(iArg2), ::lass::python::OwnerCaster< t_P3 >::TCaster::cast(iArg3), ::lass::python::OwnerCaster< t_P4 >::TCaster::cast(iArg4), ::lass::python::OwnerCaster< t_P5 >::TCaster::cast(iArg5), ::lass::python::OwnerCaster< t_P6 >::TCaster::cast(iArg6) );\
03440     }\
03441     typedef lass::meta::type_list::Make< lass::python::impl::ShadowTraits< t_cppClass >::TCppClass*, lass::python::OwnerCaster< t_P1 >::TCaster::TTarget, lass::python::OwnerCaster< t_P2 >::TCaster::TTarget, lass::python::OwnerCaster< t_P3 >::TCaster::TTarget, lass::python::OwnerCaster< t_P4 >::TCaster::TTarget, lass::python::OwnerCaster< t_P5 >::TCaster::TTarget, lass::python::OwnerCaster< t_P6 >::TCaster::TTarget >::Type i_typename;\
03442     PY_CLASS_FREE_METHOD_QUALIFIED_EX( t_cppClass, i_dispatcher, t_return, i_typename, s_methodName, s_doc, i_dispatcher );
03443  
03444 /** @ingroup Python
03445  *  @sa PY_CLASS_METHOD_CAST_EX
03446  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_EX for 7 arguments
03447  */
03448  #define PY_CLASS_METHOD_CAST_EX_7( t_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, s_methodName, s_doc, i_dispatcher, i_typename )\
03449     ::lass::python::OwnerCaster< t_return >::TCaster::TTarget i_dispatcher ( \
03450     ::lass::python::impl::ShadowTraits< t_cppClass >::TCppClass * iThis,\
03451     ::lass::python::OwnerCaster< t_P1 >::TCaster::TTarget iArg1, ::lass::python::OwnerCaster< t_P2 >::TCaster::TTarget iArg2, ::lass::python::OwnerCaster< t_P3 >::TCaster::TTarget iArg3, ::lass::python::OwnerCaster< t_P4 >::TCaster::TTarget iArg4, ::lass::python::OwnerCaster< t_P5 >::TCaster::TTarget iArg5, ::lass::python::OwnerCaster< t_P6 >::TCaster::TTarget iArg6, ::lass::python::OwnerCaster< t_P7 >::TCaster::TTarget iArg7 \
03452     )\
03453     {\
03454         return iThis->i_cppMethod ( ::lass::python::OwnerCaster< t_P1 >::TCaster::cast(iArg1), ::lass::python::OwnerCaster< t_P2 >::TCaster::cast(iArg2), ::lass::python::OwnerCaster< t_P3 >::TCaster::cast(iArg3), ::lass::python::OwnerCaster< t_P4 >::TCaster::cast(iArg4), ::lass::python::OwnerCaster< t_P5 >::TCaster::cast(iArg5), ::lass::python::OwnerCaster< t_P6 >::TCaster::cast(iArg6), ::lass::python::OwnerCaster< t_P7 >::TCaster::cast(iArg7) );\
03455     }\
03456     typedef lass::meta::type_list::Make< lass::python::impl::ShadowTraits< t_cppClass >::TCppClass*, lass::python::OwnerCaster< t_P1 >::TCaster::TTarget, lass::python::OwnerCaster< t_P2 >::TCaster::TTarget, lass::python::OwnerCaster< t_P3 >::TCaster::TTarget, lass::python::OwnerCaster< t_P4 >::TCaster::TTarget, lass::python::OwnerCaster< t_P5 >::TCaster::TTarget, lass::python::OwnerCaster< t_P6 >::TCaster::TTarget, lass::python::OwnerCaster< t_P7 >::TCaster::TTarget >::Type i_typename;\
03457     PY_CLASS_FREE_METHOD_QUALIFIED_EX( t_cppClass, i_dispatcher, t_return, i_typename, s_methodName, s_doc, i_dispatcher );
03458  
03459 /** @ingroup Python
03460  *  @sa PY_CLASS_METHOD_CAST_EX
03461  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_EX for 8 arguments
03462  */
03463  #define PY_CLASS_METHOD_CAST_EX_8( t_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, s_methodName, s_doc, i_dispatcher, i_typename )\
03464     ::lass::python::OwnerCaster< t_return >::TCaster::TTarget i_dispatcher ( \
03465     ::lass::python::impl::ShadowTraits< t_cppClass >::TCppClass * iThis,\
03466     ::lass::python::OwnerCaster< t_P1 >::TCaster::TTarget iArg1, ::lass::python::OwnerCaster< t_P2 >::TCaster::TTarget iArg2, ::lass::python::OwnerCaster< t_P3 >::TCaster::TTarget iArg3, ::lass::python::OwnerCaster< t_P4 >::TCaster::TTarget iArg4, ::lass::python::OwnerCaster< t_P5 >::TCaster::TTarget iArg5, ::lass::python::OwnerCaster< t_P6 >::TCaster::TTarget iArg6, ::lass::python::OwnerCaster< t_P7 >::TCaster::TTarget iArg7, ::lass::python::OwnerCaster< t_P8 >::TCaster::TTarget iArg8 \
03467     )\
03468     {\
03469         return iThis->i_cppMethod ( ::lass::python::OwnerCaster< t_P1 >::TCaster::cast(iArg1), ::lass::python::OwnerCaster< t_P2 >::TCaster::cast(iArg2), ::lass::python::OwnerCaster< t_P3 >::TCaster::cast(iArg3), ::lass::python::OwnerCaster< t_P4 >::TCaster::cast(iArg4), ::lass::python::OwnerCaster< t_P5 >::TCaster::cast(iArg5), ::lass::python::OwnerCaster< t_P6 >::TCaster::cast(iArg6), ::lass::python::OwnerCaster< t_P7 >::TCaster::cast(iArg7), ::lass::python::OwnerCaster< t_P8 >::TCaster::cast(iArg8) );\
03470     }\
03471     typedef lass::meta::type_list::Make< lass::python::impl::ShadowTraits< t_cppClass >::TCppClass*, lass::python::OwnerCaster< t_P1 >::TCaster::TTarget, lass::python::OwnerCaster< t_P2 >::TCaster::TTarget, lass::python::OwnerCaster< t_P3 >::TCaster::TTarget, lass::python::OwnerCaster< t_P4 >::TCaster::TTarget, lass::python::OwnerCaster< t_P5 >::TCaster::TTarget, lass::python::OwnerCaster< t_P6 >::TCaster::TTarget, lass::python::OwnerCaster< t_P7 >::TCaster::TTarget, lass::python::OwnerCaster< t_P8 >::TCaster::TTarget >::Type i_typename;\
03472     PY_CLASS_FREE_METHOD_QUALIFIED_EX( t_cppClass, i_dispatcher, t_return, i_typename, s_methodName, s_doc, i_dispatcher );
03473  
03474 /** @ingroup Python
03475  *  @sa PY_CLASS_METHOD_CAST_EX
03476  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_EX for 9 arguments
03477  */
03478  #define PY_CLASS_METHOD_CAST_EX_9( t_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, s_methodName, s_doc, i_dispatcher, i_typename )\
03479     ::lass::python::OwnerCaster< t_return >::TCaster::TTarget i_dispatcher ( \
03480     ::lass::python::impl::ShadowTraits< t_cppClass >::TCppClass * iThis,\
03481     ::lass::python::OwnerCaster< t_P1 >::TCaster::TTarget iArg1, ::lass::python::OwnerCaster< t_P2 >::TCaster::TTarget iArg2, ::lass::python::OwnerCaster< t_P3 >::TCaster::TTarget iArg3, ::lass::python::OwnerCaster< t_P4 >::TCaster::TTarget iArg4, ::lass::python::OwnerCaster< t_P5 >::TCaster::TTarget iArg5, ::lass::python::OwnerCaster< t_P6 >::TCaster::TTarget iArg6, ::lass::python::OwnerCaster< t_P7 >::TCaster::TTarget iArg7, ::lass::python::OwnerCaster< t_P8 >::TCaster::TTarget iArg8, ::lass::python::OwnerCaster< t_P9 >::TCaster::TTarget iArg9 \
03482     )\
03483     {\
03484         return iThis->i_cppMethod ( ::lass::python::OwnerCaster< t_P1 >::TCaster::cast(iArg1), ::lass::python::OwnerCaster< t_P2 >::TCaster::cast(iArg2), ::lass::python::OwnerCaster< t_P3 >::TCaster::cast(iArg3), ::lass::python::OwnerCaster< t_P4 >::TCaster::cast(iArg4), ::lass::python::OwnerCaster< t_P5 >::TCaster::cast(iArg5), ::lass::python::OwnerCaster< t_P6 >::TCaster::cast(iArg6), ::lass::python::OwnerCaster< t_P7 >::TCaster::cast(iArg7), ::lass::python::OwnerCaster< t_P8 >::TCaster::cast(iArg8), ::lass::python::OwnerCaster< t_P9 >::TCaster::cast(iArg9) );\
03485     }\
03486     typedef lass::meta::type_list::Make< lass::python::impl::ShadowTraits< t_cppClass >::TCppClass*, lass::python::OwnerCaster< t_P1 >::TCaster::TTarget, lass::python::OwnerCaster< t_P2 >::TCaster::TTarget, lass::python::OwnerCaster< t_P3 >::TCaster::TTarget, lass::python::OwnerCaster< t_P4 >::TCaster::TTarget, lass::python::OwnerCaster< t_P5 >::TCaster::TTarget, lass::python::OwnerCaster< t_P6 >::TCaster::TTarget, lass::python::OwnerCaster< t_P7 >::TCaster::TTarget, lass::python::OwnerCaster< t_P8 >::TCaster::TTarget, lass::python::OwnerCaster< t_P9 >::TCaster::TTarget >::Type i_typename;\
03487     PY_CLASS_FREE_METHOD_QUALIFIED_EX( t_cppClass, i_dispatcher, t_return, i_typename, s_methodName, s_doc, i_dispatcher );
03488  
03489 /** @ingroup Python
03490  *  @sa PY_CLASS_METHOD_CAST_EX
03491  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_EX for 10 arguments
03492  */
03493  #define PY_CLASS_METHOD_CAST_EX_10( t_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, s_methodName, s_doc, i_dispatcher, i_typename )\
03494     ::lass::python::OwnerCaster< t_return >::TCaster::TTarget i_dispatcher ( \
03495     ::lass::python::impl::ShadowTraits< t_cppClass >::TCppClass * iThis,\
03496     ::lass::python::OwnerCaster< t_P1 >::TCaster::TTarget iArg1, ::lass::python::OwnerCaster< t_P2 >::TCaster::TTarget iArg2, ::lass::python::OwnerCaster< t_P3 >::TCaster::TTarget iArg3, ::lass::python::OwnerCaster< t_P4 >::TCaster::TTarget iArg4, ::lass::python::OwnerCaster< t_P5 >::TCaster::TTarget iArg5, ::lass::python::OwnerCaster< t_P6 >::TCaster::TTarget iArg6, ::lass::python::OwnerCaster< t_P7 >::TCaster::TTarget iArg7, ::lass::python::OwnerCaster< t_P8 >::TCaster::TTarget iArg8, ::lass::python::OwnerCaster< t_P9 >::TCaster::TTarget iArg9, ::lass::python::OwnerCaster< t_P10 >::TCaster::TTarget iArg10 \
03497     )\
03498     {\
03499         return iThis->i_cppMethod ( ::lass::python::OwnerCaster< t_P1 >::TCaster::cast(iArg1), ::lass::python::OwnerCaster< t_P2 >::TCaster::cast(iArg2), ::lass::python::OwnerCaster< t_P3 >::TCaster::cast(iArg3), ::lass::python::OwnerCaster< t_P4 >::TCaster::cast(iArg4), ::lass::python::OwnerCaster< t_P5 >::TCaster::cast(iArg5), ::lass::python::OwnerCaster< t_P6 >::TCaster::cast(iArg6), ::lass::python::OwnerCaster< t_P7 >::TCaster::cast(iArg7), ::lass::python::OwnerCaster< t_P8 >::TCaster::cast(iArg8), ::lass::python::OwnerCaster< t_P9 >::TCaster::cast(iArg9), ::lass::python::OwnerCaster< t_P10 >::TCaster::cast(iArg10) );\
03500     }\
03501     typedef lass::meta::type_list::Make< lass::python::impl::ShadowTraits< t_cppClass >::TCppClass*, lass::python::OwnerCaster< t_P1 >::TCaster::TTarget, lass::python::OwnerCaster< t_P2 >::TCaster::TTarget, lass::python::OwnerCaster< t_P3 >::TCaster::TTarget, lass::python::OwnerCaster< t_P4 >::TCaster::TTarget, lass::python::OwnerCaster< t_P5 >::TCaster::TTarget, lass::python::OwnerCaster< t_P6 >::TCaster::TTarget, lass::python::OwnerCaster< t_P7 >::TCaster::TTarget, lass::python::OwnerCaster< t_P8 >::TCaster::TTarget, lass::python::OwnerCaster< t_P9 >::TCaster::TTarget, lass::python::OwnerCaster< t_P10 >::TCaster::TTarget >::Type i_typename;\
03502     PY_CLASS_FREE_METHOD_QUALIFIED_EX( t_cppClass, i_dispatcher, t_return, i_typename, s_methodName, s_doc, i_dispatcher );
03503  
03504 /** @ingroup Python
03505  *  @sa PY_CLASS_METHOD_CAST_EX
03506  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_EX for 11 arguments
03507  */
03508  #define PY_CLASS_METHOD_CAST_EX_11( t_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, s_methodName, s_doc, i_dispatcher, i_typename )\
03509     ::lass::python::OwnerCaster< t_return >::TCaster::TTarget i_dispatcher ( \
03510     ::lass::python::impl::ShadowTraits< t_cppClass >::TCppClass * iThis,\
03511     ::lass::python::OwnerCaster< t_P1 >::TCaster::TTarget iArg1, ::lass::python::OwnerCaster< t_P2 >::TCaster::TTarget iArg2, ::lass::python::OwnerCaster< t_P3 >::TCaster::TTarget iArg3, ::lass::python::OwnerCaster< t_P4 >::TCaster::TTarget iArg4, ::lass::python::OwnerCaster< t_P5 >::TCaster::TTarget iArg5, ::lass::python::OwnerCaster< t_P6 >::TCaster::TTarget iArg6, ::lass::python::OwnerCaster< t_P7 >::TCaster::TTarget iArg7, ::lass::python::OwnerCaster< t_P8 >::TCaster::TTarget iArg8, ::lass::python::OwnerCaster< t_P9 >::TCaster::TTarget iArg9, ::lass::python::OwnerCaster< t_P10 >::TCaster::TTarget iArg10, ::lass::python::OwnerCaster< t_P11 >::TCaster::TTarget iArg11 \
03512     )\
03513     {\
03514         return iThis->i_cppMethod ( ::lass::python::OwnerCaster< t_P1 >::TCaster::cast(iArg1), ::lass::python::OwnerCaster< t_P2 >::TCaster::cast(iArg2), ::lass::python::OwnerCaster< t_P3 >::TCaster::cast(iArg3), ::lass::python::OwnerCaster< t_P4 >::TCaster::cast(iArg4), ::lass::python::OwnerCaster< t_P5 >::TCaster::cast(iArg5), ::lass::python::OwnerCaster< t_P6 >::TCaster::cast(iArg6), ::lass::python::OwnerCaster< t_P7 >::TCaster::cast(iArg7), ::lass::python::OwnerCaster< t_P8 >::TCaster::cast(iArg8), ::lass::python::OwnerCaster< t_P9 >::TCaster::cast(iArg9), ::lass::python::OwnerCaster< t_P10 >::TCaster::cast(iArg10), ::lass::python::OwnerCaster< t_P11 >::TCaster::cast(iArg11) );\
03515     }\
03516     typedef lass::meta::type_list::Make< lass::python::impl::ShadowTraits< t_cppClass >::TCppClass*, lass::python::OwnerCaster< t_P1 >::TCaster::TTarget, lass::python::OwnerCaster< t_P2 >::TCaster::TTarget, lass::python::OwnerCaster< t_P3 >::TCaster::TTarget, lass::python::OwnerCaster< t_P4 >::TCaster::TTarget, lass::python::OwnerCaster< t_P5 >::TCaster::TTarget, lass::python::OwnerCaster< t_P6 >::TCaster::TTarget, lass::python::OwnerCaster< t_P7 >::TCaster::TTarget, lass::python::OwnerCaster< t_P8 >::TCaster::TTarget, lass::python::OwnerCaster< t_P9 >::TCaster::TTarget, lass::python::OwnerCaster< t_P10 >::TCaster::TTarget, lass::python::OwnerCaster< t_P11 >::TCaster::TTarget >::Type i_typename;\
03517     PY_CLASS_FREE_METHOD_QUALIFIED_EX( t_cppClass, i_dispatcher, t_return, i_typename, s_methodName, s_doc, i_dispatcher );
03518  
03519 /** @ingroup Python
03520  *  @sa PY_CLASS_METHOD_CAST_EX
03521  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_EX for 12 arguments
03522  */
03523  #define PY_CLASS_METHOD_CAST_EX_12( t_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, s_methodName, s_doc, i_dispatcher, i_typename )\
03524     ::lass::python::OwnerCaster< t_return >::TCaster::TTarget i_dispatcher ( \
03525     ::lass::python::impl::ShadowTraits< t_cppClass >::TCppClass * iThis,\
03526     ::lass::python::OwnerCaster< t_P1 >::TCaster::TTarget iArg1, ::lass::python::OwnerCaster< t_P2 >::TCaster::TTarget iArg2, ::lass::python::OwnerCaster< t_P3 >::TCaster::TTarget iArg3, ::lass::python::OwnerCaster< t_P4 >::TCaster::TTarget iArg4, ::lass::python::OwnerCaster< t_P5 >::TCaster::TTarget iArg5, ::lass::python::OwnerCaster< t_P6 >::TCaster::TTarget iArg6, ::lass::python::OwnerCaster< t_P7 >::TCaster::TTarget iArg7, ::lass::python::OwnerCaster< t_P8 >::TCaster::TTarget iArg8, ::lass::python::OwnerCaster< t_P9 >::TCaster::TTarget iArg9, ::lass::python::OwnerCaster< t_P10 >::TCaster::TTarget iArg10, ::lass::python::OwnerCaster< t_P11 >::TCaster::TTarget iArg11, ::lass::python::OwnerCaster< t_P12 >::TCaster::TTarget iArg12 \
03527     )\
03528     {\
03529         return iThis->i_cppMethod ( ::lass::python::OwnerCaster< t_P1 >::TCaster::cast(iArg1), ::lass::python::OwnerCaster< t_P2 >::TCaster::cast(iArg2), ::lass::python::OwnerCaster< t_P3 >::TCaster::cast(iArg3), ::lass::python::OwnerCaster< t_P4 >::TCaster::cast(iArg4), ::lass::python::OwnerCaster< t_P5 >::TCaster::cast(iArg5), ::lass::python::OwnerCaster< t_P6 >::TCaster::cast(iArg6), ::lass::python::OwnerCaster< t_P7 >::TCaster::cast(iArg7), ::lass::python::OwnerCaster< t_P8 >::TCaster::cast(iArg8), ::lass::python::OwnerCaster< t_P9 >::TCaster::cast(iArg9), ::lass::python::OwnerCaster< t_P10 >::TCaster::cast(iArg10), ::lass::python::OwnerCaster< t_P11 >::TCaster::cast(iArg11), ::lass::python::OwnerCaster< t_P12 >::TCaster::cast(iArg12) );\
03530     }\
03531     typedef lass::meta::type_list::Make< lass::python::impl::ShadowTraits< t_cppClass >::TCppClass*, lass::python::OwnerCaster< t_P1 >::TCaster::TTarget, lass::python::OwnerCaster< t_P2 >::TCaster::TTarget, lass::python::OwnerCaster< t_P3 >::TCaster::TTarget, lass::python::OwnerCaster< t_P4 >::TCaster::TTarget, lass::python::OwnerCaster< t_P5 >::TCaster::TTarget, lass::python::OwnerCaster< t_P6 >::TCaster::TTarget, lass::python::OwnerCaster< t_P7 >::TCaster::TTarget, lass::python::OwnerCaster< t_P8 >::TCaster::TTarget, lass::python::OwnerCaster< t_P9 >::TCaster::TTarget, lass::python::OwnerCaster< t_P10 >::TCaster::TTarget, lass::python::OwnerCaster< t_P11 >::TCaster::TTarget, lass::python::OwnerCaster< t_P12 >::TCaster::TTarget >::Type i_typename;\
03532     PY_CLASS_FREE_METHOD_QUALIFIED_EX( t_cppClass, i_dispatcher, t_return, i_typename, s_methodName, s_doc, i_dispatcher );
03533  
03534 /** @ingroup Python
03535  *  @sa PY_CLASS_METHOD_CAST_EX
03536  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_EX for 13 arguments
03537  */
03538  #define PY_CLASS_METHOD_CAST_EX_13( t_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, s_methodName, s_doc, i_dispatcher, i_typename )\
03539     ::lass::python::OwnerCaster< t_return >::TCaster::TTarget i_dispatcher ( \
03540     ::lass::python::impl::ShadowTraits< t_cppClass >::TCppClass * iThis,\
03541     ::lass::python::OwnerCaster< t_P1 >::TCaster::TTarget iArg1, ::lass::python::OwnerCaster< t_P2 >::TCaster::TTarget iArg2, ::lass::python::OwnerCaster< t_P3 >::TCaster::TTarget iArg3, ::lass::python::OwnerCaster< t_P4 >::TCaster::TTarget iArg4, ::lass::python::OwnerCaster< t_P5 >::TCaster::TTarget iArg5, ::lass::python::OwnerCaster< t_P6 >::TCaster::TTarget iArg6, ::lass::python::OwnerCaster< t_P7 >::TCaster::TTarget iArg7, ::lass::python::OwnerCaster< t_P8 >::TCaster::TTarget iArg8, ::lass::python::OwnerCaster< t_P9 >::TCaster::TTarget iArg9, ::lass::python::OwnerCaster< t_P10 >::TCaster::TTarget iArg10, ::lass::python::OwnerCaster< t_P11 >::TCaster::TTarget iArg11, ::lass::python::OwnerCaster< t_P12 >::TCaster::TTarget iArg12, ::lass::python::OwnerCaster< t_P13 >::TCaster::TTarget iArg13 \
03542     )\
03543     {\
03544         return iThis->i_cppMethod ( ::lass::python::OwnerCaster< t_P1 >::TCaster::cast(iArg1), ::lass::python::OwnerCaster< t_P2 >::TCaster::cast(iArg2), ::lass::python::OwnerCaster< t_P3 >::TCaster::cast(iArg3), ::lass::python::OwnerCaster< t_P4 >::TCaster::cast(iArg4), ::lass::python::OwnerCaster< t_P5 >::TCaster::cast(iArg5), ::lass::python::OwnerCaster< t_P6 >::TCaster::cast(iArg6), ::lass::python::OwnerCaster< t_P7 >::TCaster::cast(iArg7), ::lass::python::OwnerCaster< t_P8 >::TCaster::cast(iArg8), ::lass::python::OwnerCaster< t_P9 >::TCaster::cast(iArg9), ::lass::python::OwnerCaster< t_P10 >::TCaster::cast(iArg10), ::lass::python::OwnerCaster< t_P11 >::TCaster::cast(iArg11), ::lass::python::OwnerCaster< t_P12 >::TCaster::cast(iArg12), ::lass::python::OwnerCaster< t_P13 >::TCaster::cast(iArg13) );\
03545     }\
03546     typedef lass::meta::type_list::Make< lass::python::impl::ShadowTraits< t_cppClass >::TCppClass*, lass::python::OwnerCaster< t_P1 >::TCaster::TTarget, lass::python::OwnerCaster< t_P2 >::TCaster::TTarget, lass::python::OwnerCaster< t_P3 >::TCaster::TTarget, lass::python::OwnerCaster< t_P4 >::TCaster::TTarget, lass::python::OwnerCaster< t_P5 >::TCaster::TTarget, lass::python::OwnerCaster< t_P6 >::TCaster::TTarget, lass::python::OwnerCaster< t_P7 >::TCaster::TTarget, lass::python::OwnerCaster< t_P8 >::TCaster::TTarget, lass::python::OwnerCaster< t_P9 >::TCaster::TTarget, lass::python::OwnerCaster< t_P10 >::TCaster::TTarget, lass::python::OwnerCaster< t_P11 >::TCaster::TTarget, lass::python::OwnerCaster< t_P12 >::TCaster::TTarget, lass::python::OwnerCaster< t_P13 >::TCaster::TTarget >::Type i_typename;\
03547     PY_CLASS_FREE_METHOD_QUALIFIED_EX( t_cppClass, i_dispatcher, t_return, i_typename, s_methodName, s_doc, i_dispatcher );
03548  
03549 /** @ingroup Python
03550  *  @sa PY_CLASS_METHOD_CAST_EX
03551  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_EX for 14 arguments
03552  */
03553  #define PY_CLASS_METHOD_CAST_EX_14( t_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, s_methodName, s_doc, i_dispatcher, i_typename )\
03554     ::lass::python::OwnerCaster< t_return >::TCaster::TTarget i_dispatcher ( \
03555     ::lass::python::impl::ShadowTraits< t_cppClass >::TCppClass * iThis,\
03556     ::lass::python::OwnerCaster< t_P1 >::TCaster::TTarget iArg1, ::lass::python::OwnerCaster< t_P2 >::TCaster::TTarget iArg2, ::lass::python::OwnerCaster< t_P3 >::TCaster::TTarget iArg3, ::lass::python::OwnerCaster< t_P4 >::TCaster::TTarget iArg4, ::lass::python::OwnerCaster< t_P5 >::TCaster::TTarget iArg5, ::lass::python::OwnerCaster< t_P6 >::TCaster::TTarget iArg6, ::lass::python::OwnerCaster< t_P7 >::TCaster::TTarget iArg7, ::lass::python::OwnerCaster< t_P8 >::TCaster::TTarget iArg8, ::lass::python::OwnerCaster< t_P9 >::TCaster::TTarget iArg9, ::lass::python::OwnerCaster< t_P10 >::TCaster::TTarget iArg10, ::lass::python::OwnerCaster< t_P11 >::TCaster::TTarget iArg11, ::lass::python::OwnerCaster< t_P12 >::TCaster::TTarget iArg12, ::lass::python::OwnerCaster< t_P13 >::TCaster::TTarget iArg13, ::lass::python::OwnerCaster< t_P14 >::TCaster::TTarget iArg14 \
03557     )\
03558     {\
03559         return iThis->i_cppMethod ( ::lass::python::OwnerCaster< t_P1 >::TCaster::cast(iArg1), ::lass::python::OwnerCaster< t_P2 >::TCaster::cast(iArg2), ::lass::python::OwnerCaster< t_P3 >::TCaster::cast(iArg3), ::lass::python::OwnerCaster< t_P4 >::TCaster::cast(iArg4), ::lass::python::OwnerCaster< t_P5 >::TCaster::cast(iArg5), ::lass::python::OwnerCaster< t_P6 >::TCaster::cast(iArg6), ::lass::python::OwnerCaster< t_P7 >::TCaster::cast(iArg7), ::lass::python::OwnerCaster< t_P8 >::TCaster::cast(iArg8), ::lass::python::OwnerCaster< t_P9 >::TCaster::cast(iArg9), ::lass::python::OwnerCaster< t_P10 >::TCaster::cast(iArg10), ::lass::python::OwnerCaster< t_P11 >::TCaster::cast(iArg11), ::lass::python::OwnerCaster< t_P12 >::TCaster::cast(iArg12), ::lass::python::OwnerCaster< t_P13 >::TCaster::cast(iArg13), ::lass::python::OwnerCaster< t_P14 >::TCaster::cast(iArg14) );\
03560     }\
03561     typedef lass::meta::type_list::Make< lass::python::impl::ShadowTraits< t_cppClass >::TCppClass*, lass::python::OwnerCaster< t_P1 >::TCaster::TTarget, lass::python::OwnerCaster< t_P2 >::TCaster::TTarget, lass::python::OwnerCaster< t_P3 >::TCaster::TTarget, lass::python::OwnerCaster< t_P4 >::TCaster::TTarget, lass::python::OwnerCaster< t_P5 >::TCaster::TTarget, lass::python::OwnerCaster< t_P6 >::TCaster::TTarget, lass::python::OwnerCaster< t_P7 >::TCaster::TTarget, lass::python::OwnerCaster< t_P8 >::TCaster::TTarget, lass::python::OwnerCaster< t_P9 >::TCaster::TTarget, lass::python::OwnerCaster< t_P10 >::TCaster::TTarget, lass::python::OwnerCaster< t_P11 >::TCaster::TTarget, lass::python::OwnerCaster< t_P12 >::TCaster::TTarget, lass::python::OwnerCaster< t_P13 >::TCaster::TTarget, lass::python::OwnerCaster< t_P14 >::TCaster::TTarget >::Type i_typename;\
03562     PY_CLASS_FREE_METHOD_QUALIFIED_EX( t_cppClass, i_dispatcher, t_return, i_typename, s_methodName, s_doc, i_dispatcher );
03563  
03564 /** @ingroup Python
03565  *  @sa PY_CLASS_METHOD_CAST_EX
03566  *  convenience macro, wraps PY_CLASS_METHOD_QUALIFIED_EX for 15 arguments
03567  */
03568  #define PY_CLASS_METHOD_CAST_EX_15( t_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15, s_methodName, s_doc, i_dispatcher, i_typename )\
03569     ::lass::python::OwnerCaster< t_return >::TCaster::TTarget i_dispatcher ( \
03570     ::lass::python::impl::ShadowTraits< t_cppClass >::TCppClass * iThis,\
03571     ::lass::python::OwnerCaster< t_P1 >::TCaster::TTarget iArg1, ::lass::python::OwnerCaster< t_P2 >::TCaster::TTarget iArg2, ::lass::python::OwnerCaster< t_P3 >::TCaster::TTarget iArg3, ::lass::python::OwnerCaster< t_P4 >::TCaster::TTarget iArg4, ::lass::python::OwnerCaster< t_P5 >::TCaster::TTarget iArg5, ::lass::python::OwnerCaster< t_P6 >::TCaster::TTarget iArg6, ::lass::python::OwnerCaster< t_P7 >::TCaster::TTarget iArg7, ::lass::python::OwnerCaster< t_P8 >::TCaster::TTarget iArg8, ::lass::python::OwnerCaster< t_P9 >::TCaster::TTarget iArg9, ::lass::python::OwnerCaster< t_P10 >::TCaster::TTarget iArg10, ::lass::python::OwnerCaster< t_P11 >::TCaster::TTarget iArg11, ::lass::python::OwnerCaster< t_P12 >::TCaster::TTarget iArg12, ::lass::python::OwnerCaster< t_P13 >::TCaster::TTarget iArg13, ::lass::python::OwnerCaster< t_P14 >::TCaster::TTarget iArg14, ::lass::python::OwnerCaster< t_P15 >::TCaster::TTarget iArg15 \
03572     )\
03573     {\
03574         return iThis->i_cppMethod ( ::lass::python::OwnerCaster< t_P1 >::TCaster::cast(iArg1), ::lass::python::OwnerCaster< t_P2 >::TCaster::cast(iArg2), ::lass::python::OwnerCaster< t_P3 >::TCaster::cast(iArg3), ::lass::python::OwnerCaster< t_P4 >::TCaster::cast(iArg4), ::lass::python::OwnerCaster< t_P5 >::TCaster::cast(iArg5), ::lass::python::OwnerCaster< t_P6 >::TCaster::cast(iArg6), ::lass::python::OwnerCaster< t_P7 >::TCaster::cast(iArg7), ::lass::python::OwnerCaster< t_P8 >::TCaster::cast(iArg8), ::lass::python::OwnerCaster< t_P9 >::TCaster::cast(iArg9), ::lass::python::OwnerCaster< t_P10 >::TCaster::cast(iArg10), ::lass::python::OwnerCaster< t_P11 >::TCaster::cast(iArg11), ::lass::python::OwnerCaster< t_P12 >::TCaster::cast(iArg12), ::lass::python::OwnerCaster< t_P13 >::TCaster::cast(iArg13), ::lass::python::OwnerCaster< t_P14 >::TCaster::cast(iArg14), ::lass::python::OwnerCaster< t_P15 >::TCaster::cast(iArg15) );\
03575     }\
03576     typedef lass::meta::type_list::Make< lass::python::impl::ShadowTraits< t_cppClass >::TCppClass*, lass::python::OwnerCaster< t_P1 >::TCaster::TTarget, lass::python::OwnerCaster< t_P2 >::TCaster::TTarget, lass::python::OwnerCaster< t_P3 >::TCaster::TTarget, lass::python::OwnerCaster< t_P4 >::TCaster::TTarget, lass::python::OwnerCaster< t_P5 >::TCaster::TTarget, lass::python::OwnerCaster< t_P6 >::TCaster::TTarget, lass::python::OwnerCaster< t_P7 >::TCaster::TTarget, lass::python::OwnerCaster< t_P8 >::TCaster::TTarget, lass::python::OwnerCaster< t_P9 >::TCaster::TTarget, lass::python::OwnerCaster< t_P10 >::TCaster::TTarget, lass::python::OwnerCaster< t_P11 >::TCaster::TTarget, lass::python::OwnerCaster< t_P12 >::TCaster::TTarget, lass::python::OwnerCaster< t_P13 >::TCaster::TTarget, lass::python::OwnerCaster< t_P14 >::TCaster::TTarget, lass::python::OwnerCaster< t_P15 >::TCaster::TTarget >::Type i_typename;\
03577     PY_CLASS_FREE_METHOD_QUALIFIED_EX( t_cppClass, i_dispatcher, t_return, i_typename, s_methodName, s_doc, i_dispatcher );
03578  
03579 
03580 /** @ingroup Python
03581  *  @sa PY_CLASS_METHOD_CAST_EX
03582  *  convenience macro, wraps PY_CLASS_METHOD_CAST_EX_0 with
03583  *  @a i_dispatcher = lassPyImpl_method_ ## @a t_cppClass ## __LINE__.
03584  */
03585 #define PY_CLASS_METHOD_CAST_NAME_DOC_0( i_cppClass, i_cppMethod, t_return, s_methodName, s_doc )\
03586     PY_CLASS_METHOD_CAST_EX_0(\
03587         i_cppClass, i_cppMethod, t_return, s_methodName, s_doc,\
03588         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)),\
03589         LASS_UNIQUENAME(LASS_CONCATENATE(TypelassPyImpl_method_, i_cppClass)))
03590 
03591 /** @ingroup Python
03592  *  @sa PY_CLASS_METHOD_CAST_EX
03593  *  convenience macro, wraps PY_CLASS_METHOD_CAST_EX_1 with
03594  *  @a i_dispatcher = lassPyImpl_method_ ## @a t_cppClass ## __LINE__.
03595  */
03596 #define PY_CLASS_METHOD_CAST_NAME_DOC_1( i_cppClass, i_cppMethod, t_return, t_P1, s_methodName, s_doc )\
03597     PY_CLASS_METHOD_CAST_EX_1(\
03598         i_cppClass, i_cppMethod, t_return, t_P1, s_methodName, s_doc,\
03599         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)),\
03600         LASS_UNIQUENAME(LASS_CONCATENATE(TypelassPyImpl_method_, i_cppClass)))
03601 
03602 /** @ingroup Python
03603  *  @sa PY_CLASS_METHOD_CAST_EX
03604  *  convenience macro, wraps PY_CLASS_METHOD_CAST_EX_2 with
03605  *  @a i_dispatcher = lassPyImpl_method_ ## @a t_cppClass ## __LINE__.
03606  */
03607 #define PY_CLASS_METHOD_CAST_NAME_DOC_2( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, s_methodName, s_doc )\
03608     PY_CLASS_METHOD_CAST_EX_2(\
03609         i_cppClass, i_cppMethod, t_return, t_P1, t_P2, s_methodName, s_doc,\
03610         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)),\
03611         LASS_UNIQUENAME(LASS_CONCATENATE(TypelassPyImpl_method_, i_cppClass)))
03612 
03613 /** @ingroup Python
03614  *  @sa PY_CLASS_METHOD_CAST_EX
03615  *  convenience macro, wraps PY_CLASS_METHOD_CAST_EX_3 with
03616  *  @a i_dispatcher = lassPyImpl_method_ ## @a t_cppClass ## __LINE__.
03617  */
03618 #define PY_CLASS_METHOD_CAST_NAME_DOC_3( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, s_methodName, s_doc )\
03619     PY_CLASS_METHOD_CAST_EX_3(\
03620         i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, s_methodName, s_doc,\
03621         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)),\
03622         LASS_UNIQUENAME(LASS_CONCATENATE(TypelassPyImpl_method_, i_cppClass)))
03623 
03624 /** @ingroup Python
03625  *  @sa PY_CLASS_METHOD_CAST_EX
03626  *  convenience macro, wraps PY_CLASS_METHOD_CAST_EX_4 with
03627  *  @a i_dispatcher = lassPyImpl_method_ ## @a t_cppClass ## __LINE__.
03628  */
03629 #define PY_CLASS_METHOD_CAST_NAME_DOC_4( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, s_methodName, s_doc )\
03630     PY_CLASS_METHOD_CAST_EX_4(\
03631         i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, s_methodName, s_doc,\
03632         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)),\
03633         LASS_UNIQUENAME(LASS_CONCATENATE(TypelassPyImpl_method_, i_cppClass)))
03634 
03635 /** @ingroup Python
03636  *  @sa PY_CLASS_METHOD_CAST_EX
03637  *  convenience macro, wraps PY_CLASS_METHOD_CAST_EX_5 with
03638  *  @a i_dispatcher = lassPyImpl_method_ ## @a t_cppClass ## __LINE__.
03639  */
03640 #define PY_CLASS_METHOD_CAST_NAME_DOC_5( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, s_methodName, s_doc )\
03641     PY_CLASS_METHOD_CAST_EX_5(\
03642         i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, s_methodName, s_doc,\
03643         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)),\
03644         LASS_UNIQUENAME(LASS_CONCATENATE(TypelassPyImpl_method_, i_cppClass)))
03645 
03646 /** @ingroup Python
03647  *  @sa PY_CLASS_METHOD_CAST_EX
03648  *  convenience macro, wraps PY_CLASS_METHOD_CAST_EX_6 with
03649  *  @a i_dispatcher = lassPyImpl_method_ ## @a t_cppClass ## __LINE__.
03650  */
03651 #define PY_CLASS_METHOD_CAST_NAME_DOC_6( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, s_methodName, s_doc )\
03652     PY_CLASS_METHOD_CAST_EX_6(\
03653         i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, s_methodName, s_doc,\
03654         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)),\
03655         LASS_UNIQUENAME(LASS_CONCATENATE(TypelassPyImpl_method_, i_cppClass)))
03656 
03657 /** @ingroup Python
03658  *  @sa PY_CLASS_METHOD_CAST_EX
03659  *  convenience macro, wraps PY_CLASS_METHOD_CAST_EX_7 with
03660  *  @a i_dispatcher = lassPyImpl_method_ ## @a t_cppClass ## __LINE__.
03661  */
03662 #define PY_CLASS_METHOD_CAST_NAME_DOC_7( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, s_methodName, s_doc )\
03663     PY_CLASS_METHOD_CAST_EX_7(\
03664         i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, s_methodName, s_doc,\
03665         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)),\
03666         LASS_UNIQUENAME(LASS_CONCATENATE(TypelassPyImpl_method_, i_cppClass)))
03667 
03668 /** @ingroup Python
03669  *  @sa PY_CLASS_METHOD_CAST_EX
03670  *  convenience macro, wraps PY_CLASS_METHOD_CAST_EX_8 with
03671  *  @a i_dispatcher = lassPyImpl_method_ ## @a t_cppClass ## __LINE__.
03672  */
03673 #define PY_CLASS_METHOD_CAST_NAME_DOC_8( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, s_methodName, s_doc )\
03674     PY_CLASS_METHOD_CAST_EX_8(\
03675         i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, s_methodName, s_doc,\
03676         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)),\
03677         LASS_UNIQUENAME(LASS_CONCATENATE(TypelassPyImpl_method_, i_cppClass)))
03678 
03679 /** @ingroup Python
03680  *  @sa PY_CLASS_METHOD_CAST_EX
03681  *  convenience macro, wraps PY_CLASS_METHOD_CAST_EX_9 with
03682  *  @a i_dispatcher = lassPyImpl_method_ ## @a t_cppClass ## __LINE__.
03683  */
03684 #define PY_CLASS_METHOD_CAST_NAME_DOC_9( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, s_methodName, s_doc )\
03685     PY_CLASS_METHOD_CAST_EX_9(\
03686         i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, s_methodName, s_doc,\
03687         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)),\
03688         LASS_UNIQUENAME(LASS_CONCATENATE(TypelassPyImpl_method_, i_cppClass)))
03689 
03690 /** @ingroup Python
03691  *  @sa PY_CLASS_METHOD_CAST_EX
03692  *  convenience macro, wraps PY_CLASS_METHOD_CAST_EX_10 with
03693  *  @a i_dispatcher = lassPyImpl_method_ ## @a t_cppClass ## __LINE__.
03694  */
03695 #define PY_CLASS_METHOD_CAST_NAME_DOC_10( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, s_methodName, s_doc )\
03696     PY_CLASS_METHOD_CAST_EX_10(\
03697         i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, s_methodName, s_doc,\
03698         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)),\
03699         LASS_UNIQUENAME(LASS_CONCATENATE(TypelassPyImpl_method_, i_cppClass)))
03700 
03701 /** @ingroup Python
03702  *  @sa PY_CLASS_METHOD_CAST_EX
03703  *  convenience macro, wraps PY_CLASS_METHOD_CAST_EX_11 with
03704  *  @a i_dispatcher = lassPyImpl_method_ ## @a t_cppClass ## __LINE__.
03705  */
03706 #define PY_CLASS_METHOD_CAST_NAME_DOC_11( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, s_methodName, s_doc )\
03707     PY_CLASS_METHOD_CAST_EX_11(\
03708         i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, s_methodName, s_doc,\
03709         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)),\
03710         LASS_UNIQUENAME(LASS_CONCATENATE(TypelassPyImpl_method_, i_cppClass)))
03711 
03712 /** @ingroup Python
03713  *  @sa PY_CLASS_METHOD_CAST_EX
03714  *  convenience macro, wraps PY_CLASS_METHOD_CAST_EX_12 with
03715  *  @a i_dispatcher = lassPyImpl_method_ ## @a t_cppClass ## __LINE__.
03716  */
03717 #define PY_CLASS_METHOD_CAST_NAME_DOC_12( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, s_methodName, s_doc )\
03718     PY_CLASS_METHOD_CAST_EX_12(\
03719         i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, s_methodName, s_doc,\
03720         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)),\
03721         LASS_UNIQUENAME(LASS_CONCATENATE(TypelassPyImpl_method_, i_cppClass)))
03722 
03723 /** @ingroup Python
03724  *  @sa PY_CLASS_METHOD_CAST_EX
03725  *  convenience macro, wraps PY_CLASS_METHOD_CAST_EX_13 with
03726  *  @a i_dispatcher = lassPyImpl_method_ ## @a t_cppClass ## __LINE__.
03727  */
03728 #define PY_CLASS_METHOD_CAST_NAME_DOC_13( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, s_methodName, s_doc )\
03729     PY_CLASS_METHOD_CAST_EX_13(\
03730         i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, s_methodName, s_doc,\
03731         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)),\
03732         LASS_UNIQUENAME(LASS_CONCATENATE(TypelassPyImpl_method_, i_cppClass)))
03733 
03734 /** @ingroup Python
03735  *  @sa PY_CLASS_METHOD_CAST_EX
03736  *  convenience macro, wraps PY_CLASS_METHOD_CAST_EX_14 with
03737  *  @a i_dispatcher = lassPyImpl_method_ ## @a t_cppClass ## __LINE__.
03738  */
03739 #define PY_CLASS_METHOD_CAST_NAME_DOC_14( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, s_methodName, s_doc )\
03740     PY_CLASS_METHOD_CAST_EX_14(\
03741         i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, s_methodName, s_doc,\
03742         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)),\
03743         LASS_UNIQUENAME(LASS_CONCATENATE(TypelassPyImpl_method_, i_cppClass)))
03744 
03745 /** @ingroup Python
03746  *  @sa PY_CLASS_METHOD_CAST_EX
03747  *  convenience macro, wraps PY_CLASS_METHOD_CAST_EX_15 with
03748  *  @a i_dispatcher = lassPyImpl_method_ ## @a t_cppClass ## __LINE__.
03749  */
03750 #define PY_CLASS_METHOD_CAST_NAME_DOC_15( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15, s_methodName, s_doc )\
03751     PY_CLASS_METHOD_CAST_EX_15(\
03752         i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15, s_methodName, s_doc,\
03753         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)),\
03754         LASS_UNIQUENAME(LASS_CONCATENATE(TypelassPyImpl_method_, i_cppClass)))
03755 
03756 
03757 /** @ingroup Python
03758  *  @sa PY_CLASS_METHOD_CAST_EX
03759  *  convenience macro, wraps PY_CLASS_METHOD_CAST_NAME_DOC with @a s_doc = 0.
03760  */
03761 #define PY_CLASS_METHOD_CAST_NAME( i_cppClass, i_cppMethod, t_return, t_params, s_methodName )\
03762         PY_CLASS_METHOD_CAST_NAME_DOC(\
03763             i_cppClass, i_cppMethod, t_return, t_params, s_methodName, 0 )
03764 
03765 /** @ingroup Python
03766  *  @sa PY_CLASS_METHOD_CAST_EX
03767  *  convenience macro, wraps PY_CLASS_METHOD_CAST_NAME_DOC_0 with @a s_doc = 0.
03768  */
03769 #define PY_CLASS_METHOD_CAST_NAME_0( i_cppClass, i_cppMethod, t_return, s_methodName )\
03770     PY_CLASS_METHOD_CAST_NAME_DOC_0(\
03771         i_cppClass, i_cppMethod, t_return, s_methodName, 0 )
03772 
03773 /** @ingroup Python
03774  *  @sa PY_CLASS_METHOD_CAST_EX
03775  *  convenience macro, wraps PY_CLASS_METHOD_CAST_NAME_DOC_1 with @a s_doc = 0.
03776  */
03777 #define PY_CLASS_METHOD_CAST_NAME_1( i_cppClass, i_cppMethod, t_return, t_P1, s_methodName )\
03778     PY_CLASS_METHOD_CAST_NAME_DOC_1(\
03779         i_cppClass, i_cppMethod, t_return, t_P1, s_methodName, 0 )
03780 
03781 /** @ingroup Python
03782  *  @sa PY_CLASS_METHOD_CAST_EX
03783  *  convenience macro, wraps PY_CLASS_METHOD_CAST_NAME_DOC_2 with @a s_doc = 0.
03784  */
03785 #define PY_CLASS_METHOD_CAST_NAME_2( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, s_methodName )\
03786     PY_CLASS_METHOD_CAST_NAME_DOC_2(\
03787         i_cppClass, i_cppMethod, t_return, t_P1, t_P2, s_methodName, 0 )
03788 
03789 /** @ingroup Python
03790  *  @sa PY_CLASS_METHOD_CAST_EX
03791  *  convenience macro, wraps PY_CLASS_METHOD_CAST_NAME_DOC_3 with @a s_doc = 0.
03792  */
03793 #define PY_CLASS_METHOD_CAST_NAME_3( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, s_methodName )\
03794     PY_CLASS_METHOD_CAST_NAME_DOC_3(\
03795         i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, s_methodName, 0 )
03796 
03797 /** @ingroup Python
03798  *  @sa PY_CLASS_METHOD_CAST_EX
03799  *  convenience macro, wraps PY_CLASS_METHOD_CAST_NAME_DOC_4 with @a s_doc = 0.
03800  */
03801 #define PY_CLASS_METHOD_CAST_NAME_4( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, s_methodName )\
03802     PY_CLASS_METHOD_CAST_NAME_DOC_4(\
03803         i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, s_methodName, 0 )
03804 
03805 /** @ingroup Python
03806  *  @sa PY_CLASS_METHOD_CAST_EX
03807  *  convenience macro, wraps PY_CLASS_METHOD_CAST_NAME_DOC_5 with @a s_doc = 0.
03808  */
03809 #define PY_CLASS_METHOD_CAST_NAME_5( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, s_methodName )\
03810     PY_CLASS_METHOD_CAST_NAME_DOC_5(\
03811         i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, s_methodName, 0 )
03812 
03813 /** @ingroup Python
03814  *  @sa PY_CLASS_METHOD_CAST_EX
03815  *  convenience macro, wraps PY_CLASS_METHOD_CAST_NAME_DOC_6 with @a s_doc = 0.
03816  */
03817 #define PY_CLASS_METHOD_CAST_NAME_6( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, s_methodName )\
03818     PY_CLASS_METHOD_CAST_NAME_DOC_6(\
03819         i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, s_methodName, 0 )
03820 
03821 /** @ingroup Python
03822  *  @sa PY_CLASS_METHOD_CAST_EX
03823  *  convenience macro, wraps PY_CLASS_METHOD_CAST_NAME_DOC_7 with @a s_doc = 0.
03824  */
03825 #define PY_CLASS_METHOD_CAST_NAME_7( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, s_methodName )\
03826     PY_CLASS_METHOD_CAST_NAME_DOC_7(\
03827         i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, s_methodName, 0 )
03828 
03829 /** @ingroup Python
03830  *  @sa PY_CLASS_METHOD_CAST_EX
03831  *  convenience macro, wraps PY_CLASS_METHOD_CAST_NAME_DOC_8 with @a s_doc = 0.
03832  */
03833 #define PY_CLASS_METHOD_CAST_NAME_8( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, s_methodName )\
03834     PY_CLASS_METHOD_CAST_NAME_DOC_8(\
03835         i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, s_methodName, 0 )
03836 
03837 /** @ingroup Python
03838  *  @sa PY_CLASS_METHOD_CAST_EX
03839  *  convenience macro, wraps PY_CLASS_METHOD_CAST_NAME_DOC_9 with @a s_doc = 0.
03840  */
03841 #define PY_CLASS_METHOD_CAST_NAME_9( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, s_methodName )\
03842     PY_CLASS_METHOD_CAST_NAME_DOC_9(\
03843         i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, s_methodName, 0 )
03844 
03845 /** @ingroup Python
03846  *  @sa PY_CLASS_METHOD_CAST_EX
03847  *  convenience macro, wraps PY_CLASS_METHOD_CAST_NAME_DOC_10 with @a s_doc = 0.
03848  */
03849 #define PY_CLASS_METHOD_CAST_NAME_10( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, s_methodName )\
03850     PY_CLASS_METHOD_CAST_NAME_DOC_10(\
03851         i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, s_methodName, 0 )
03852 
03853 /** @ingroup Python
03854  *  @sa PY_CLASS_METHOD_CAST_EX
03855  *  convenience macro, wraps PY_CLASS_METHOD_CAST_NAME_DOC_11 with @a s_doc = 0.
03856  */
03857 #define PY_CLASS_METHOD_CAST_NAME_11( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, s_methodName )\
03858     PY_CLASS_METHOD_CAST_NAME_DOC_11(\
03859         i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, s_methodName, 0 )
03860 
03861 /** @ingroup Python
03862  *  @sa PY_CLASS_METHOD_CAST_EX
03863  *  convenience macro, wraps PY_CLASS_METHOD_CAST_NAME_DOC_12 with @a s_doc = 0.
03864  */
03865 #define PY_CLASS_METHOD_CAST_NAME_12( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, s_methodName )\
03866     PY_CLASS_METHOD_CAST_NAME_DOC_12(\
03867         i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, s_methodName, 0 )
03868 
03869 /** @ingroup Python
03870  *  @sa PY_CLASS_METHOD_CAST_EX
03871  *  convenience macro, wraps PY_CLASS_METHOD_CAST_NAME_DOC_13 with @a s_doc = 0.
03872  */
03873 #define PY_CLASS_METHOD_CAST_NAME_13( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, s_methodName )\
03874     PY_CLASS_METHOD_CAST_NAME_DOC_13(\
03875         i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, s_methodName, 0 )
03876 
03877 /** @ingroup Python
03878  *  @sa PY_CLASS_METHOD_CAST_EX
03879  *  convenience macro, wraps PY_CLASS_METHOD_CAST_NAME_DOC_14 with @a s_doc = 0.
03880  */
03881 #define PY_CLASS_METHOD_CAST_NAME_14( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, s_methodName )\
03882     PY_CLASS_METHOD_CAST_NAME_DOC_14(\
03883         i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, s_methodName, 0 )
03884 
03885 /** @ingroup Python
03886  *  @sa PY_CLASS_METHOD_CAST_EX
03887  *  convenience macro, wraps PY_CLASS_METHOD_CAST_NAME_DOC_15 with @a s_doc = 0.
03888  */
03889 #define PY_CLASS_METHOD_CAST_NAME_15( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15, s_methodName )\
03890     PY_CLASS_METHOD_CAST_NAME_DOC_15(\
03891         i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15, s_methodName, 0 )
03892 
03893 
03894 /** @ingroup Python
03895  *  @sa PY_CLASS_METHOD_CAST_EX
03896  *  convenience macro, wraps PY_CLASS_METHOD_CAST_NAME_DOC
03897  *  with @a s_methodName = # @a i_cppMethod.
03898  */
03899 #define PY_CLASS_METHOD_CAST_DOC( i_cppClass, i_cppMethod, t_return, t_params, s_doc )\
03900     PY_CLASS_METHOD_CAST_NAME_DOC(\
03901         i_cppClass, i_cppMethod, t_return, t_params, LASS_STRINGIFY(i_cppMethod), s_doc )
03902 
03903 /** @ingroup Python
03904  *  @sa PY_CLASS_METHOD_CAST_EX
03905  *  convenience macro, wraps PY_CLASS_METHOD_CAST_NAME_DOC
03906  *  with @a s_methodName = # @a i_cppMethod.
03907  */
03908 #define PY_CLASS_METHOD_CAST_DOC_0( i_cppClass, i_cppMethod, t_return, s_doc )\
03909     PY_CLASS_METHOD_CAST_NAME_DOC_0(\
03910         i_cppClass, i_cppMethod, t_return, LASS_STRINGIFY(i_cppMethod), s_doc )
03911 
03912 /** @ingroup Python
03913  *  @sa PY_CLASS_METHOD_CAST_EX
03914  *  convenience macro, wraps PY_CLASS_METHOD_CAST_NAME_DOC
03915  *  with @a s_methodName = # @a i_cppMethod.
03916  */
03917 #define PY_CLASS_METHOD_CAST_DOC_1( i_cppClass, i_cppMethod, t_return, t_P1, s_doc )\
03918     PY_CLASS_METHOD_CAST_NAME_DOC_1(\
03919         i_cppClass, i_cppMethod, t_return, t_P1, LASS_STRINGIFY(i_cppMethod), s_doc )
03920 
03921 /** @ingroup Python
03922  *  @sa PY_CLASS_METHOD_CAST_EX
03923  *  convenience macro, wraps PY_CLASS_METHOD_CAST_NAME_DOC
03924  *  with @a s_methodName = # @a i_cppMethod.
03925  */
03926 #define PY_CLASS_METHOD_CAST_DOC_2( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, s_doc )\
03927     PY_CLASS_METHOD_CAST_NAME_DOC_2(\
03928         i_cppClass, i_cppMethod, t_return, t_P1, t_P2, LASS_STRINGIFY(i_cppMethod), s_doc )
03929 
03930 /** @ingroup Python
03931  *  @sa PY_CLASS_METHOD_CAST_EX
03932  *  convenience macro, wraps PY_CLASS_METHOD_CAST_NAME_DOC
03933  *  with @a s_methodName = # @a i_cppMethod.
03934  */
03935 #define PY_CLASS_METHOD_CAST_DOC_3( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, s_doc )\
03936     PY_CLASS_METHOD_CAST_NAME_DOC_3(\
03937         i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, LASS_STRINGIFY(i_cppMethod), s_doc )
03938 
03939 /** @ingroup Python
03940  *  @sa PY_CLASS_METHOD_CAST_EX
03941  *  convenience macro, wraps PY_CLASS_METHOD_CAST_NAME_DOC
03942  *  with @a s_methodName = # @a i_cppMethod.
03943  */
03944 #define PY_CLASS_METHOD_CAST_DOC_4( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, s_doc )\
03945     PY_CLASS_METHOD_CAST_NAME_DOC_4(\
03946         i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, LASS_STRINGIFY(i_cppMethod), s_doc )
03947 
03948 /** @ingroup Python
03949  *  @sa PY_CLASS_METHOD_CAST_EX
03950  *  convenience macro, wraps PY_CLASS_METHOD_CAST_NAME_DOC
03951  *  with @a s_methodName = # @a i_cppMethod.
03952  */
03953 #define PY_CLASS_METHOD_CAST_DOC_5( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, s_doc )\
03954     PY_CLASS_METHOD_CAST_NAME_DOC_5(\
03955         i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, LASS_STRINGIFY(i_cppMethod), s_doc )
03956 
03957 /** @ingroup Python
03958  *  @sa PY_CLASS_METHOD_CAST_EX
03959  *  convenience macro, wraps PY_CLASS_METHOD_CAST_NAME_DOC
03960  *  with @a s_methodName = # @a i_cppMethod.
03961  */
03962 #define PY_CLASS_METHOD_CAST_DOC_6( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, s_doc )\
03963     PY_CLASS_METHOD_CAST_NAME_DOC_6(\
03964         i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, LASS_STRINGIFY(i_cppMethod), s_doc )
03965 
03966 /** @ingroup Python
03967  *  @sa PY_CLASS_METHOD_CAST_EX
03968  *  convenience macro, wraps PY_CLASS_METHOD_CAST_NAME_DOC
03969  *  with @a s_methodName = # @a i_cppMethod.
03970  */
03971 #define PY_CLASS_METHOD_CAST_DOC_7( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, s_doc )\
03972     PY_CLASS_METHOD_CAST_NAME_DOC_7(\
03973         i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, LASS_STRINGIFY(i_cppMethod), s_doc )
03974 
03975 /** @ingroup Python
03976  *  @sa PY_CLASS_METHOD_CAST_EX
03977  *  convenience macro, wraps PY_CLASS_METHOD_CAST_NAME_DOC
03978  *  with @a s_methodName = # @a i_cppMethod.
03979  */
03980 #define PY_CLASS_METHOD_CAST_DOC_8( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, s_doc )\
03981     PY_CLASS_METHOD_CAST_NAME_DOC_8(\
03982         i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, LASS_STRINGIFY(i_cppMethod), s_doc )
03983 
03984 /** @ingroup Python
03985  *  @sa PY_CLASS_METHOD_CAST_EX
03986  *  convenience macro, wraps PY_CLASS_METHOD_CAST_NAME_DOC
03987  *  with @a s_methodName = # @a i_cppMethod.
03988  */
03989 #define PY_CLASS_METHOD_CAST_DOC_9( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, s_doc )\
03990     PY_CLASS_METHOD_CAST_NAME_DOC_9(\
03991         i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, LASS_STRINGIFY(i_cppMethod), s_doc )
03992 
03993 /** @ingroup Python
03994  *  @sa PY_CLASS_METHOD_CAST_EX
03995  *  convenience macro, wraps PY_CLASS_METHOD_CAST_NAME_DOC
03996  *  with @a s_methodName = # @a i_cppMethod.
03997  */
03998 #define PY_CLASS_METHOD_CAST_DOC_10( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, s_doc )\
03999     PY_CLASS_METHOD_CAST_NAME_DOC_10(\
04000         i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, LASS_STRINGIFY(i_cppMethod), s_doc )
04001 
04002 /** @ingroup Python
04003  *  @sa PY_CLASS_METHOD_CAST_EX
04004  *  convenience macro, wraps PY_CLASS_METHOD_CAST_NAME_DOC
04005  *  with @a s_methodName = # @a i_cppMethod.
04006  */
04007 #define PY_CLASS_METHOD_CAST_DOC_11( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, s_doc )\
04008     PY_CLASS_METHOD_CAST_NAME_DOC_11(\
04009         i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, LASS_STRINGIFY(i_cppMethod), s_doc )
04010 
04011 /** @ingroup Python
04012  *  @sa PY_CLASS_METHOD_CAST_EX
04013  *  convenience macro, wraps PY_CLASS_METHOD_CAST_NAME_DOC
04014  *  with @a s_methodName = # @a i_cppMethod.
04015  */
04016 #define PY_CLASS_METHOD_CAST_DOC_12( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, s_doc )\
04017     PY_CLASS_METHOD_CAST_NAME_DOC_12(\
04018         i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, LASS_STRINGIFY(i_cppMethod), s_doc )
04019 
04020 /** @ingroup Python
04021  *  @sa PY_CLASS_METHOD_CAST_EX
04022  *  convenience macro, wraps PY_CLASS_METHOD_CAST_NAME_DOC
04023  *  with @a s_methodName = # @a i_cppMethod.
04024  */
04025 #define PY_CLASS_METHOD_CAST_DOC_13( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, s_doc )\
04026     PY_CLASS_METHOD_CAST_NAME_DOC_13(\
04027         i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, LASS_STRINGIFY(i_cppMethod), s_doc )
04028 
04029 /** @ingroup Python
04030  *  @sa PY_CLASS_METHOD_CAST_EX
04031  *  convenience macro, wraps PY_CLASS_METHOD_CAST_NAME_DOC
04032  *  with @a s_methodName = # @a i_cppMethod.
04033  */
04034 #define PY_CLASS_METHOD_CAST_DOC_14( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, s_doc )\
04035     PY_CLASS_METHOD_CAST_NAME_DOC_14(\
04036         i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, LASS_STRINGIFY(i_cppMethod), s_doc )
04037 
04038 /** @ingroup Python
04039  *  @sa PY_CLASS_METHOD_CAST_EX
04040  *  convenience macro, wraps PY_CLASS_METHOD_CAST_NAME_DOC
04041  *  with @a s_methodName = # @a i_cppMethod.
04042  */
04043 #define PY_CLASS_METHOD_CAST_DOC_15( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15, s_doc )\
04044     PY_CLASS_METHOD_CAST_NAME_DOC_15(\
04045         i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15, LASS_STRINGIFY(i_cppMethod), s_doc )
04046 
04047 
04048 /** @ingroup Python
04049  *  @sa PY_CLASS_METHOD_CAST_EX
04050  *  convenience macro, wraps PY_CLASS_METHOD_CAST_NAME_DOC
04051  *  with @a s_methodName = # @a i_cppMethod and @a s_doc = 0.
04052  */
04053 #define PY_CLASS_METHOD_CAST( i_cppClass, i_cppMethod, t_return, t_params )\
04054     PY_CLASS_METHOD_CAST_DOC( i_cppClass, i_cppMethod, t_return, t_params, 0 )
04055 
04056 /** @ingroup Python
04057  *  @sa PY_CLASS_METHOD_CAST_EX
04058  *  convenience macro, wraps PY_CLASS_METHOD_CAST_NAME_DOC
04059  *  with @a s_methodName = # @a i_cppMethod and @a s_doc = 0.
04060  */
04061 #define PY_CLASS_METHOD_CAST_0( i_cppClass, i_cppMethod, t_return )\
04062     PY_CLASS_METHOD_CAST_DOC_0( i_cppClass, i_cppMethod, t_return, 0 )
04063 
04064 /** @ingroup Python
04065  *  @sa PY_CLASS_METHOD_CAST_EX
04066  *  convenience macro, wraps PY_CLASS_METHOD_CAST_NAME_DOC
04067  *  with @a s_methodName = # @a i_cppMethod and @a s_doc = 0.
04068  */
04069 #define PY_CLASS_METHOD_CAST_1( i_cppClass, i_cppMethod, t_return, t_P1 )\
04070     PY_CLASS_METHOD_CAST_DOC_1( i_cppClass, i_cppMethod, t_return, t_P1, 0 )
04071 
04072 /** @ingroup Python
04073  *  @sa PY_CLASS_METHOD_CAST_EX
04074  *  convenience macro, wraps PY_CLASS_METHOD_CAST_NAME_DOC
04075  *  with @a s_methodName = # @a i_cppMethod and @a s_doc = 0.
04076  */
04077 #define PY_CLASS_METHOD_CAST_2( i_cppClass, i_cppMethod, t_return, t_P1, t_P2 )\
04078     PY_CLASS_METHOD_CAST_DOC_2( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, 0 )
04079 
04080 /** @ingroup Python
04081  *  @sa PY_CLASS_METHOD_CAST_EX
04082  *  convenience macro, wraps PY_CLASS_METHOD_CAST_NAME_DOC
04083  *  with @a s_methodName = # @a i_cppMethod and @a s_doc = 0.
04084  */
04085 #define PY_CLASS_METHOD_CAST_3( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3 )\
04086     PY_CLASS_METHOD_CAST_DOC_3( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, 0 )
04087 
04088 /** @ingroup Python
04089  *  @sa PY_CLASS_METHOD_CAST_EX
04090  *  convenience macro, wraps PY_CLASS_METHOD_CAST_NAME_DOC
04091  *  with @a s_methodName = # @a i_cppMethod and @a s_doc = 0.
04092  */
04093 #define PY_CLASS_METHOD_CAST_4( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4 )\
04094     PY_CLASS_METHOD_CAST_DOC_4( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, 0 )
04095 
04096 /** @ingroup Python
04097  *  @sa PY_CLASS_METHOD_CAST_EX
04098  *  convenience macro, wraps PY_CLASS_METHOD_CAST_NAME_DOC
04099  *  with @a s_methodName = # @a i_cppMethod and @a s_doc = 0.
04100  */
04101 #define PY_CLASS_METHOD_CAST_5( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5 )\
04102     PY_CLASS_METHOD_CAST_DOC_5( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, 0 )
04103 
04104 /** @ingroup Python
04105  *  @sa PY_CLASS_METHOD_CAST_EX
04106  *  convenience macro, wraps PY_CLASS_METHOD_CAST_NAME_DOC
04107  *  with @a s_methodName = # @a i_cppMethod and @a s_doc = 0.
04108  */
04109 #define PY_CLASS_METHOD_CAST_6( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6 )\
04110     PY_CLASS_METHOD_CAST_DOC_6( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, 0 )
04111 
04112 /** @ingroup Python
04113  *  @sa PY_CLASS_METHOD_CAST_EX
04114  *  convenience macro, wraps PY_CLASS_METHOD_CAST_NAME_DOC
04115  *  with @a s_methodName = # @a i_cppMethod and @a s_doc = 0.
04116  */
04117 #define PY_CLASS_METHOD_CAST_7( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7 )\
04118     PY_CLASS_METHOD_CAST_DOC_7( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, 0 )
04119 
04120 /** @ingroup Python
04121  *  @sa PY_CLASS_METHOD_CAST_EX
04122  *  convenience macro, wraps PY_CLASS_METHOD_CAST_NAME_DOC
04123  *  with @a s_methodName = # @a i_cppMethod and @a s_doc = 0.
04124  */
04125 #define PY_CLASS_METHOD_CAST_8( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8 )\
04126     PY_CLASS_METHOD_CAST_DOC_8( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, 0 )
04127 
04128 /** @ingroup Python
04129  *  @sa PY_CLASS_METHOD_CAST_EX
04130  *  convenience macro, wraps PY_CLASS_METHOD_CAST_NAME_DOC
04131  *  with @a s_methodName = # @a i_cppMethod and @a s_doc = 0.
04132  */
04133 #define PY_CLASS_METHOD_CAST_9( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9 )\
04134     PY_CLASS_METHOD_CAST_DOC_9( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, 0 )
04135 
04136 /** @ingroup Python
04137  *  @sa PY_CLASS_METHOD_CAST_EX
04138  *  convenience macro, wraps PY_CLASS_METHOD_CAST_NAME_DOC
04139  *  with @a s_methodName = # @a i_cppMethod and @a s_doc = 0.
04140  */
04141 #define PY_CLASS_METHOD_CAST_10( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10 )\
04142     PY_CLASS_METHOD_CAST_DOC_10( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, 0 )
04143 
04144 /** @ingroup Python
04145  *  @sa PY_CLASS_METHOD_CAST_EX
04146  *  convenience macro, wraps PY_CLASS_METHOD_CAST_NAME_DOC
04147  *  with @a s_methodName = # @a i_cppMethod and @a s_doc = 0.
04148  */
04149 #define PY_CLASS_METHOD_CAST_11( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11 )\
04150     PY_CLASS_METHOD_CAST_DOC_11( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, 0 )
04151 
04152 /** @ingroup Python
04153  *  @sa PY_CLASS_METHOD_CAST_EX
04154  *  convenience macro, wraps PY_CLASS_METHOD_CAST_NAME_DOC
04155  *  with @a s_methodName = # @a i_cppMethod and @a s_doc = 0.
04156  */
04157 #define PY_CLASS_METHOD_CAST_12( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12 )\
04158     PY_CLASS_METHOD_CAST_DOC_12( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, 0 )
04159 
04160 /** @ingroup Python
04161  *  @sa PY_CLASS_METHOD_CAST_EX
04162  *  convenience macro, wraps PY_CLASS_METHOD_CAST_NAME_DOC
04163  *  with @a s_methodName = # @a i_cppMethod and @a s_doc = 0.
04164  */
04165 #define PY_CLASS_METHOD_CAST_13( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13 )\
04166     PY_CLASS_METHOD_CAST_DOC_13( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, 0 )
04167 
04168 /** @ingroup Python
04169  *  @sa PY_CLASS_METHOD_CAST_EX
04170  *  convenience macro, wraps PY_CLASS_METHOD_CAST_NAME_DOC
04171  *  with @a s_methodName = # @a i_cppMethod and @a s_doc = 0.
04172  */
04173 #define PY_CLASS_METHOD_CAST_14( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14 )\
04174     PY_CLASS_METHOD_CAST_DOC_14( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, 0 )
04175 
04176 /** @ingroup Python
04177  *  @sa PY_CLASS_METHOD_CAST_EX
04178  *  convenience macro, wraps PY_CLASS_METHOD_CAST_NAME_DOC
04179  *  with @a s_methodName = # @a i_cppMethod and @a s_doc = 0.
04180  */
04181 #define PY_CLASS_METHOD_CAST_15( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15 )\
04182     PY_CLASS_METHOD_CAST_DOC_15( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15, 0 )
04183 
04184 
04185 
04186 
04187 // --- static methods ------------------------------------------------------------------------------
04188 
04189 /** @ingroup Python
04190  *  @brief Exports a function to Python as a static method (aka class method)
04191  *  @sa PY_CLASS_METHOD_EX
04192  *
04193  *  @param t_cppClass
04194  *      the C++ class you want to add the static method to.
04195  *  @param f_cppFunction
04196  *      the full name of the C++ function that implements the static method
04197  *  @param i_dispatcher
04198  *      A unique name of the static C++ dispatcher function to be generated.  This name will be
04199  *      used for the names of automatic generated variables and functions and should be unique
04200  *      per exported C++ class/method pair.
04201  *  @param s_doc
04202  *      documentation of method as shown in Python (zero terminated C string)
04203  *  @param s_methodName
04204  *      the name of the static method in Python (zerp terminated C string)
04205  *
04206  *  @code
04207  *  // foo.h
04208  *  class Foo
04209  *  {
04210  *      PY_HEADER(python::PyObjectPlus)
04211  *  public:
04212  *      static void bar(int iA);
04213  *  };
04214  *
04215  *  int spam(int iB, int iC);
04216  *
04217  *  // foo.cpp
04218  *  PY_DECLARE_CLASS(Foo)
04219  *  PY_CLASS_STATIC_METHOD_EX(Foo, Foo::bar, foo_bar, "bar", "a regular C++ static method")
04220  *  PY_CLASS_STATIC_METHOD_EX(Foo, spam, foo_spam, "spam", "you can export free C++ functions as")
04221  *  @endcode
04222  */
04223 #define PY_CLASS_STATIC_METHOD_EX( t_cppClass, f_cppFunction, s_methodName, s_doc, i_dispatcher )\
04224     PyCFunction LASS_CONCATENATE(i_dispatcher, _overloadChain) = 0;\
04225     inline PyObject* i_dispatcher( PyObject* iIgnore, PyObject* iArgs )\
04226     {\
04227         if (LASS_CONCATENATE(i_dispatcher, _overloadChain))\
04228         {\
04229             PyObject* result = LASS_CONCATENATE(i_dispatcher, _overloadChain)(iIgnore, iArgs);\
04230             if (!(PyErr_Occurred() && PyErr_ExceptionMatches(PyExc_TypeError)))\
04231             {\
04232                 return result;\
04233             }\
04234             PyErr_Clear();\
04235             Py_XDECREF(result);\
04236         }\
04237         return ::lass::python::impl::callFunction( iArgs, f_cppFunction );\
04238     }\
04239     LASS_EXECUTE_BEFORE_MAIN_EX\
04240     ( LASS_CONCATENATE(i_dispatcher, _excecuteBeforeMain ),\
04241         ::lass::python::impl::addClassStaticMethod< t_cppClass >(\
04242             s_methodName, s_doc, i_dispatcher, LASS_CONCATENATE(i_dispatcher, _overloadChain));\
04243     )
04244 
04245 /** @ingroup Python
04246  *  @sa PY_CLASS_STATIC_METHOD_EX
04247  *  convenience macro, wraps PY_CLASS_STATIC_METHOD_EX
04248  *  with @a f_cppFunction = @a i_cppClass :: @a i_cppMethod
04249  *  and @a i_dispatcher = lassPyImpl_StaticMethod_ @a i_cppClass __LINE__
04250  */
04251 #define PY_CLASS_STATIC_METHOD_DOC( i_cppClass, i_cppMethod, s_doc )\
04252     PY_CLASS_STATIC_METHOD_EX(\
04253         i_cppClass,\
04254         &::lass::python::impl::ShadowTraits<i_cppClass>::TCppClass::i_cppMethod,\
04255         LASS_STRINGIFY(i_cppMethod), s_doc,\
04256         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_staticMethod_, i_cppClass)))
04257 
04258 /** @ingroup Python
04259  *  @sa PY_CLASS_STATIC_METHOD_EX
04260  *  convenience macro, wraps PY_CLASS_STATIC_METHOD_EX
04261  *  with @a f_cppFunction = @a i_cppClass :: @a i_cppMethod
04262  *  and @a i_dispatcher = lassPyImpl_StaticMethod_ @a i_cppClass __LINE__
04263  */
04264 #define PY_CLASS_STATIC_METHOD_NAME_DOC( i_cppClass, i_cppMethod, s_methodName, s_doc )\
04265     PY_CLASS_STATIC_METHOD_EX(\
04266         i_cppClass,\
04267         &::lass::python::impl::ShadowTraits<i_cppClass>::TCppClass::i_cppMethod,\
04268         s_methodName, s_doc,\
04269         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_staticMethod_, i_cppClass)))
04270 
04271 
04272 /** @ingroup Python
04273  *  @sa PY_CLASS_STATIC_METHOD_EX
04274  *  convenience macro, wraps PY_CLASS_STATIC_METHOD_EX
04275  *  with @a f_cppFunction = @a i_cppClass :: @a i_cppMethod
04276  *  and @a i_dispatcher = lassPyImpl_StaticMethod_ @a i_cppClass __LINE__
04277  */
04278 #define PY_CLASS_STATIC_METHOD_NAME( i_cppClass, i_cppMethod, s_methodName)\
04279     PY_CLASS_STATIC_METHOD_EX(\
04280         i_cppClass,\
04281         &::lass::python::impl::ShadowTraits<i_cppClass>::TCppClass::i_cppMethod,\
04282         s_methodName, "",\
04283         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_staticMethod_, i_cppClass)))
04284 
04285 
04286 /** @ingroup Python
04287  *  @sa PY_CLASS_STATIC_METHOD_EX
04288  *  convenience macro, wraps PY_CLASS_STATIC_METHOD_EX
04289  *  with f_cppFunction = @a i_cppClass :: @a i_cppMethod
04290  */
04291 #define PY_CLASS_STATIC_METHOD( i_cppClass, i_cppMethod )\
04292         PY_CLASS_STATIC_METHOD_DOC( i_cppClass, i_cppMethod, 0 )
04293 
04294 
04295 
04296 // --- data members --------------------------------------------------------------------------------
04297 
04298 /** @ingroup Python
04299  *  exports a pair of get and set accessors as an read/write attribute in Python
04300  *
04301  *  @param t_cppClass
04302  *      the C++ class you want to add the static method to.
04303  *  @param s_memberName
04304  *      the name of the attribute in python (zero terminated C string)
04305  *  @param a_cppGetter
04306  *      the method in C++ used to get the attribute
04307  *  @param a_cppSetter
04308  *      the method in C++ used to set the attribute
04309  *  @param s_doc
04310  *      documentation of member as shown in Python (zero terminated C string)
04311  *
04312  *  @code
04313  *  // foo.h
04314  *  class Foo
04315  *  {
04316  *      PY_HEADER(python::PyObjectPlus)
04317  *  public:
04318  *      const int getBar() const { return bar_; }
04319  *      int setBar(int iBar) { bar_ = iBar; }
04320  *      const std::string& spam() const { return spam_; }
04321  *      std::string& spam() const { return spam_; }
04322  *  private:
04323  *      int bar_;
04324  *      std::string spam_;
04325  *  };
04326  *
04327  *  // foo.cpp
04328  *  PY_DECLARE_CLASS(Foo)
04329  *  PY_CLASS_MEMBER_RW_EX(Foo, getBar, setBar, "bar", "regular get and setter")
04330  *  PY_CLASS_MEMBER_RW_EX(Foo, spam, spam, "spam", "cool get and setter")
04331  *  @endcode
04332  */
04333 #define PY_CLASS_MEMBER_RW_EX( t_cppClass, i_cppGetter, i_cppSetter, s_memberName, s_doc, i_dispatcher)\
04334     PyObject* LASS_CONCATENATE(i_dispatcher, _getter)( PyObject* iObject, void* )\
04335     {\
04336         typedef ::lass::python::impl::ShadowTraits< t_cppClass > TShadowTraits;\
04337         typedef TShadowTraits::TCppClass TCppClass;\
04338         TCppClass* cppObject = const_cast<TCppClass*>(TShadowTraits::constCppObject(iObject));\
04339         if (!cppObject)\
04340         {\
04341             return 0;\
04342         }\
04343         return ::lass::python::impl::CallMethod<TCppClass>::get(\
04344             cppObject, &TCppClass::i_cppGetter );\
04345     }\
04346     int LASS_CONCATENATE(i_dispatcher, _setter)( PyObject* iObject, PyObject* iArgs, void* )\
04347     {\
04348         typedef ::lass::python::impl::ShadowTraits< t_cppClass > TShadowTraits;\
04349         typedef TShadowTraits::TCppClass TCppClass;\
04350         TCppClass* cppObject = TShadowTraits::cppObject(iObject);\
04351         if (!cppObject)\
04352         {\
04353             return 0;\
04354         }\
04355         int r = ::lass::python::impl::CallMethod<TCppClass>::set(\
04356             iArgs, cppObject, &TCppClass::i_cppSetter );\
04357         return r;\
04358     }\
04359     LASS_EXECUTE_BEFORE_MAIN_EX\
04360     ( LASS_CONCATENATE(i_dispatcher, _executeBeforeMain),\
04361         t_cppClass::_lassPyGetSetters.insert(\
04362             t_cppClass::_lassPyGetSetters.begin(),\
04363             ::lass::python::impl::createPyGetSetDef(\
04364                 s_memberName,\
04365                 LASS_CONCATENATE(i_dispatcher, _getter),\
04366                 LASS_CONCATENATE(i_dispatcher, _setter),\
04367                 s_doc, 0));\
04368     )
04369 
04370 /** @ingroup Python
04371  *  @sa PY_CLASS_MEMBER_RW_EX
04372  *  convenience macro, wraps PY_CLASS_MEMBER_RW_EX with
04373  *  @a i_dispatcher = lassPyImpl_memberR_ @a t_cppClass __LINE__
04374  */
04375 #define PY_CLASS_MEMBER_RW_NAME_DOC(t_cppClass, i_cppGetter, i_cppSetter, s_memberName, s_doc)\
04376     PY_CLASS_MEMBER_RW_EX(t_cppClass, i_cppGetter, i_cppSetter, s_memberName, s_doc,\
04377         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_memberRW, t_cppClass)))
04378 
04379 /** @ingroup Python
04380  *  @sa PY_CLASS_MEMBER_RW_EX
04381  *  convenience macro, wraps PY_CLASS_MEMBER_RW_NAME_DOC with @a s_doc = 0
04382  */
04383 #define PY_CLASS_MEMBER_RW_NAME(t_cppClass, i_cppGetter, i_cppSetter, s_memberName)\
04384     PY_CLASS_MEMBER_RW_NAME_DOC(t_cppClass, i_cppGetter, i_cppSetter, s_memberName, 0)
04385 
04386 /** @ingroup Python
04387  *  @sa PY_CLASS_MEMBER_RW_EX
04388  *  convenience macro, wraps PY_CLASS_MEMBER_RW_NAME_DOC with @a s_name = "s_cppGetter"
04389  */
04390 #define PY_CLASS_MEMBER_RW_DOC(t_cppClass, i_cppGetter, i_cppSetter, s_doc)\
04391     PY_CLASS_MEMBER_RW_NAME_DOC(t_cppClass, i_cppGetter, i_cppSetter, LASS_STRINGIFY(i_cppGetter), s_doc)
04392 
04393 /** @ingroup Python
04394  *  @sa PY_CLASS_MEMBER_RW_EX
04395  *  convenience macro, wraps PY_CLASS_MEMBER_RW_NAME_DOC with @a s_name = "s_cppGetter" and @a s_doc = 0
04396  */
04397 #define PY_CLASS_MEMBER_RW(t_cppClass, i_cppGetter, i_cppSetter)\
04398     PY_CLASS_MEMBER_RW_DOC(t_cppClass, i_cppGetter, i_cppSetter, 0)
04399 
04400 
04401 
04402 /** @ingroup Python
04403  *  exports a get accessor as an read-only attribute in Python
04404  *
04405  *  @param t_cppClass
04406  *      the C++ class you want to add the static method to.
04407  *  @param s_memberName
04408  *      the name of the attribute in python (zero terminated C string)
04409  *  @param a_cppGetter
04410  *      the method in C++ used to get the attribute
04411  *  @param s_doc
04412  *      documentation of member as shown in Python (zero terminated C string)
04413  *
04414  *  @code
04415  *  // foo.h
04416  *  class Foo
04417  *  {
04418  *      PY_HEADER(python::PyObjectPlus)
04419  *  public:
04420  *      const int getBar() const { return bar_; }
04421  *  private:
04422  *      int bar_;
04423  *  };
04424  *
04425  *  // foo.cpp
04426  *  PY_DECLARE_CLASS(Foo)
04427  *  PY_CLASS_MEMBER_R_EX(Foo, getBar, "bar", "regular get and setter")
04428  *  @endcode
04429  */
04430 #define PY_CLASS_MEMBER_R_EX( t_cppClass, i_cppGetter, s_memberName, s_doc, i_dispatcher )\
04431     PyObject* LASS_CONCATENATE(i_dispatcher, _getter) ( PyObject* iObject, void* )\
04432     {\
04433         typedef ::lass::python::impl::ShadowTraits< t_cppClass > TShadowTraits;\
04434         typedef TShadowTraits::TCppClass TCppClass;\
04435         TCppClass* cppObject = const_cast<TCppClass*>(TShadowTraits::constCppObject(iObject));\
04436         if (!cppObject)\
04437         {\
04438             return 0;\
04439         }\
04440         return ::lass::python::impl::CallMethod<TCppClass>::get(\
04441             cppObject, &TCppClass::i_cppGetter );\
04442     }\
04443     LASS_EXECUTE_BEFORE_MAIN_EX\
04444     ( LASS_CONCATENATE(i_dispatcher, _executeBeforeMain),\
04445         t_cppClass::_lassPyGetSetters.insert(\
04446             t_cppClass::_lassPyGetSetters.begin(),\
04447             ::lass::python::impl::createPyGetSetDef(\
04448                 s_memberName, LASS_CONCATENATE(i_dispatcher, _getter), 0, \
04449                 s_doc, 0));\
04450     )
04451 
04452 /** @ingroup Python
04453  *  @sa PY_CLASS_MEMBER_R_EX
04454  *  convenience macro, wraps PY_CLASS_MEMBER_R_EX with
04455  *  @a i_dispatcher = lassPyImpl_memberR_ ## @a t_cppClass ## __LINE__
04456  */
04457 #define PY_CLASS_MEMBER_R_NAME_DOC(t_cppClass, i_cppGetter, s_memberName, s_doc)\
04458     PY_CLASS_MEMBER_R_EX(t_cppClass, i_cppGetter, s_memberName, s_doc,\
04459         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_memberR, t_cppClass)))
04460 
04461 /** @ingroup Python
04462  *  @sa PY_CLASS_MEMBER_R_EX
04463  *  convenience macro, wraps PY_CLASS_MEMBER_R_NAME_DOC with @a s_doc = 0
04464  */
04465 #define PY_CLASS_MEMBER_R_NAME(t_cppClass, i_cppGetter, s_memberName)\
04466     PY_CLASS_MEMBER_R_NAME_DOC(t_cppClass, i_cppGetter, s_memberName, 0)
04467 
04468 /** @ingroup Python
04469  *  @sa PY_CLASS_MEMBER_R_EX
04470  *  convenience macro, wraps PY_CLASS_MEMBER_R_NAME_DOC with @a s_memberName = "i_cppGetter"
04471  */
04472 #define PY_CLASS_MEMBER_R_DOC(t_cppClass, i_cppGetter, s_doc)\
04473     PY_CLASS_MEMBER_R_NAME_DOC(t_cppClass, i_cppGetter, LASS_STRINGIFY(i_cppGetter), s_doc)
04474 
04475 /** @ingroup Python
04476  *  @sa PY_CLASS_MEMBER_R_DOC
04477  *  convenience macro, wraps PY_CLASS_MEMBER_R_NAME_DOC with @a s_memberName = "i_cppGetter" and @a s_doc = 0
04478  */
04479 #define PY_CLASS_MEMBER_R(t_cppClass, i_cppGetter)\
04480     PY_CLASS_MEMBER_R_DOC(t_cppClass, i_cppGetter, 0)
04481 
04482 // --- data members --------------------------------------------------------------------------------
04483 
04484 /** @ingroup Python
04485  *  exports a pair of get and set accessors as an read/write attribute in Python by using free functions
04486  *
04487  *  @param t_cppClass
04488  *      the C++ class you want to add the static method to.
04489  *  @param s_memberName
04490  *      the name of the attribute in python (zero terminated C string)
04491  *  @param a_freeCppGetter
04492  *      the free method in C++ used to get the attribute
04493  *  @param a_freeCppSetter
04494  *      the free method in C++ used to set the attribute
04495  *  @param s_doc
04496  *      documentation of member as shown in Python (zero terminated C string)
04497  *  @deprecated
04498  *
04499  *  @code
04500  *  // foo.h
04501  *  class Foo
04502  *  {
04503  *      PY_HEADER(python::PyObjectPlus)
04504  *  public:
04505  *      int bar;
04506  *  };
04507  *
04508  *  int getBar(const Foo const* iThis) 
04509  *  { 
04510  *      return iThis->bar;
04511  *  }
04512  *  void setBar(Foo* iThis, int iBar) 
04513  *  {   
04514  *      iBar->bar = abar;
04515  *  }
04516  *
04517  *  // foo.cpp
04518  *  PY_DECLARE_CLASS(Foo)
04519  *  PY_CLASS_FREE_MEMBER_RW_EX(Foo, getBar, setBar, "bar", "regular get and setter")
04520  *  @endcode
04521  */
04522 
04523 // we need to define a special template here which can deduct the second argument of a function
04524 // it is only specialized for functions that qualify as setters: ie, where the "this" is writeable
04525 // without hard recasting it
04526 //template < typename TClass, typename IArg > struct SecondArgTraitForSet { typedef void* TArg; };
04527 namespace impl
04528 {
04529 template < typename TClass, typename IArg > IArg secondArgGet( void (*)(TClass*, IArg), PyObject* iArgs, int& r )
04530 {
04531     IArg arg;
04532     r = ::lass::python::pyGetSimpleObject(iArgs,arg);
04533     return arg;
04534 }
04535 }
04536 
04537 #define PY_CLASS_FREE_MEMBER_RW_EX( t_cppClass, i_cppFreeGetter, i_cppFreeSetter, s_memberName, s_doc, i_dispatcher)\
04538     PyObject* LASS_CONCATENATE(i_dispatcher, _freeGetter)( PyObject* iObject, void* )\
04539     {\
04540         typedef ::lass::python::impl::ShadowTraits< t_cppClass > TShadowTraits;\
04541         typedef TShadowTraits::TCppClass TCppClass;\
04542         TCppClass* cppObject = const_cast<TCppClass*>(TShadowTraits::constCppObject(iObject));\
04543         if (!cppObject)\
04544         {\
04545             return 0;\
04546         }\
04547         return ::lass::python::pyBuildSimpleObject(i_cppFreeGetter( cppObject ));\
04548     }\
04549     int LASS_CONCATENATE(i_dispatcher, _freeSetter)( PyObject* iObject, PyObject* iArgs, void* )\
04550     {\
04551         typedef ::lass::python::impl::ShadowTraits< t_cppClass > TShadowTraits;\
04552         typedef TShadowTraits::TCppClass TCppClass;\
04553         TCppClass* cppObject = TShadowTraits::cppObject(iObject);\
04554         if (!cppObject)\
04555         {\
04556             return 0;\
04557         }\
04558         int rsecondarg;\
04559         impl::secondArgGet( i_cppFreeSetter, iArgs, rsecondarg);\
04560         if (rsecondarg)\
04561         {\
04562             return 1;\
04563         }\
04564         i_cppFreeSetter( cppObject, impl::secondArgGet( i_cppFreeSetter, iArgs, rsecondarg) );\
04565         return 0;\
04566     }\
04567     LASS_EXECUTE_BEFORE_MAIN_EX\
04568     ( LASS_CONCATENATE(i_dispatcher, _executeBeforeMain),\
04569         t_cppClass::_lassPyGetSetters.insert(\
04570             t_cppClass::_lassPyGetSetters.begin(),\
04571             ::lass::python::impl::createPyGetSetDef(\
04572                 s_memberName,\
04573                 LASS_CONCATENATE(i_dispatcher, _freeGetter),\
04574                 LASS_CONCATENATE(i_dispatcher, _freeSetter),\
04575                 s_doc, 0));\
04576     )
04577 
04578 /** @ingroup Python
04579  *  @sa PY_CLASS_FREE_MEMBER_RW_EX
04580  *  convenience macro, wraps PY_CLASS_FREE_MEMBER_RW_EX with
04581  *  @a i_dispatcher = lassPyImpl_memberR_ @a t_cppClass __LINE__
04582  */
04583 #define PY_CLASS_FREE_MEMBER_RW_NAME_DOC(t_cppClass, i_cppFreeGetter, i_cppFreeSetter, s_memberName, s_doc)\
04584     PY_CLASS_FREE_MEMBER_RW_EX(t_cppClass, i_cppFreeGetter, i_cppFreeSetter, s_memberName, s_doc,\
04585         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_freeMemberRW, t_cppClass)))
04586 
04587 /** @ingroup Python
04588  *  @sa PY_CLASS_FREE_MEMBER_RW_EX
04589  *  convenience macro, wraps PY_CLASS_FREE_MEMBER_RW_NAME_DOC with @a s_doc = 0
04590  */
04591 #define PY_CLASS_FREE_MEMBER_RW_NAME(t_cppClass, i_cppFreeGetter, i_cppFreeSetter, s_memberName)\
04592     PY_CLASS_FREE_MEMBER_RW_NAME_DOC(t_cppClass, i_cppFreeGetter, i_cppFreeSetter, s_memberName, 0)
04593 
04594 /** @ingroup Python
04595  *  @sa PY_CLASS_FREE_MEMBER_RW_EX
04596  *  convenience macro, wraps PY_CLASS_FREE_MEMBER_RW_NAME_DOC with @a s_name = "s_cppFreeGetter"
04597  */
04598 #define PY_CLASS_FREE_MEMBER_RW_DOC(t_cppClass, i_cppFreeGetter, i_cppFreeSetter, s_doc)\
04599     PY_CLASS_FREE_MEMBER_RW_NAME_DOC(t_cppClass, i_cppFreeGetter, i_cppFreeSetter, LASS_STRINGIFY(i_cppFreeGetter), s_doc)
04600 
04601 /** @ingroup Python
04602  *  @sa PY_CLASS_FREE_MEMBER_RW_EX
04603  *  convenience macro, wraps PY_CLASS_FREE_MEMBER_RW_NAME_DOC with @a s_name = "s_freeCppGetter" and @a s_doc = 0
04604  */
04605 #define PY_CLASS_FREE_MEMBER_RW(t_cppClass, i_cppFreeGetter, i_cppFreeSetter)\
04606     PY_CLASS_FREE_MEMBER_RW_DOC(t_cppClass, i_cppFreeGetter, i_cppFreeSetter, 0)
04607 
04608 
04609 
04610 /** @ingroup Python
04611  *  exports a get accessor as an read-only attribute in Python as a free function
04612  *
04613  *  @param t_cppClass
04614  *      the C++ class you want to add the static method to.
04615  *  @param s_memberName
04616  *      the name of the attribute in python (zero terminated C string)
04617  *  @param a_freeCppGetter
04618  *      a free function in C++ used to get the attribute
04619  *  @param s_doc
04620  *      documentation of member as shown in Python (zero terminated C string)
04621  *  @deprecated
04622  *
04623  *  @code
04624  *  // foo.h
04625  *  class Foo
04626  *  {
04627  *      PY_HEADER(python::PyObjectPlus)
04628  *  public:
04629  *      int bar;
04630  *  };
04631  *
04632  *  int getBar(const Foo const* iThis) 
04633  *  { 
04634  *      return iThis->bar;
04635  *  }
04636  *
04637  *  // foo.cpp
04638  *  PY_DECLARE_CLASS(Foo)
04639  *  PY_CLASS_FREE_MEMBER_R_EX(Foo, getBar, "bar", "regular get and setter")
04640  *  @endcode
04641  */
04642 #define PY_CLASS_FREE_MEMBER_R_EX( t_cppClass, i_freeCppGetter, s_memberName, s_doc, i_dispatcher )\
04643     PyObject* LASS_CONCATENATE(i_dispatcher, _freeGetter) ( PyObject* iObject, void* )\
04644     {\
04645         typedef ::lass::python::impl::ShadowTraits< t_cppClass > TShadowTraits;\
04646         typedef TShadowTraits::TCppClass TCppClass;\
04647         TCppClass* cppObject = const_cast<TCppClass*>(TShadowTraits::constCppObject(iObject));\
04648         if (!cppObject)\
04649         {\
04650             return 0;\
04651         }\
04652         return ::lass::python::pyBuildSimpleObject(i_freeCppGetter( cppObject)) ;\
04653     }\
04654     LASS_EXECUTE_BEFORE_MAIN_EX\
04655     ( LASS_CONCATENATE(i_dispatcher, _executeBeforeMain),\
04656         t_cppClass::_lassPyGetSetters.insert(\
04657             t_cppClass::_lassPyGetSetters.begin(),\
04658             ::lass::python::impl::createPyGetSetDef(\
04659                 s_memberName, LASS_CONCATENATE(i_dispatcher, _freeGetter), 0, \
04660                 s_doc, 0));\
04661     )
04662 
04663 /** @ingroup Python
04664  *  @sa PY_CLASS_MEMBER_R_EX
04665  *  convenience macro, wraps PY_CLASS_MEMBER_R_EX with
04666  *  @a i_dispatcher = lassPyImpl_memberR_ ## @a t_cppClass ## __LINE__
04667  */
04668 #define PY_CLASS_FREE_MEMBER_R_NAME_DOC(t_cppClass, i_freeCppGetter, s_memberName, s_doc)\
04669     PY_CLASS_FREE_MEMBER_R_EX(t_cppClass, i_freeCppGetter, s_memberName, s_doc,\
04670         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_freeMemberR, t_cppClass)))
04671 
04672 /** @ingroup Python
04673  *  @sa PY_CLASS_MEMBER_R_EX
04674  *  convenience macro, wraps PY_CLASS_MEMBER_R_NAME_DOC with @a s_doc = 0
04675  */
04676 #define PY_CLASS_FREE_MEMBER_R_NAME(t_cppClass, i_freeCppGetter, s_memberName)\
04677     PY_CLASS_FREE_MEMBER_R_NAME_DOC(t_cppClass, i_freeCppGetter, s_memberName, 0)
04678 
04679 /** @ingroup Python
04680  *  @sa PY_CLASS_MEMBER_R_EX
04681  *  convenience macro, wraps PY_CLASS_MEMBER_R_NAME_DOC with @a s_memberName = "i_freeCppGetter"
04682  */
04683 #define PY_CLASS_FREE_MEMBER_R_DOC(t_cppClass, i_freeCppGetter, s_doc)\
04684     PY_CLASS_FREE_MEMBER_R_NAME_DOC(t_cppClass, i_freeCppGetter, LASS_STRINGIFY(i_freeCppGetter), s_doc)
04685 
04686 /** @ingroup Python
04687  *  @sa PY_CLASS_MEMBER_R_DOC
04688  *  convenience macro, wraps PY_CLASS_MEMBER_R_NAME_DOC with @a s_memberName = "i_cppGetter" and @a s_doc = 0
04689  */
04690 #define PY_CLASS_FREE_MEMBER_R(t_cppClass, i_freeCppGetter)\
04691     PY_CLASS_FREE_MEMBER_R_DOC(t_cppClass, i_freeCppGetter, 0)
04692 
04693 
04694 // -- deprecated old style export of free members
04695 
04696 
04697 /** @ingroup Python
04698  *  exports a pair of get and set accessors as an read/write attribute in Python by using free functions
04699  *
04700  *  @param t_cppClass
04701  *      the C++ class you want to add the static method to.
04702  *  @param s_memberName
04703  *      the name of the attribute in python (zero terminated C string)
04704  *  @param a_freeCppGetter
04705  *      the free method in C++ used to get the attribute
04706  *  @param a_freeCppSetter
04707  *      the free method in C++ used to set the attribute
04708  *  @param s_doc
04709  *      documentation of member as shown in Python (zero terminated C string)
04710  *  @deprecated
04711  *
04712  *  @code
04713  *  // foo.h
04714  *  class Foo
04715  *  {
04716  *      PY_HEADER(python::PyObjectPlus)
04717  *  public:
04718  *      int bar;
04719  *  };
04720  *
04721  *  PyObject getBar(const Foo const* iThis) 
04722  *  { 
04723  *      return iThis->bar;
04724  *  }
04725  *  int setBar(Foo* iThis, PyObject* iBar) 
04726  *  {   
04727  *      int abar;
04728  *      int r = pyGetSimpleObject(iBar,abar);
04729  *      if (!r)
04730  *          iBar->bar = abar;
04731  *      return r;
04732  *  }
04733  *
04734  *  // foo.cpp
04735  *  PY_DECLARE_CLASS(Foo)
04736  *  PY_CLASS_DEPRECATED_FREE_MEMBER_RW_EX(Foo, getBar, setBar, "bar", "regular get and setter")
04737  *  @endcode
04738  */
04739 #define PY_CLASS_DEPRECATED_FREE_MEMBER_RW_EX( t_cppClass, i_cppFreeGetter, i_cppFreeSetter, s_memberName, s_doc, i_dispatcher)\
04740     PyObject* LASS_CONCATENATE(i_dispatcher, _freeGetter)( PyObject* iObject, void* )\
04741     {\
04742         typedef ::lass::python::impl::ShadowTraits< t_cppClass > TShadowTraits;\
04743         typedef TShadowTraits::TCppClass TCppClass;\
04744         TCppClass* cppObject = const_cast<TCppClass*>(TShadowTraits::constCppObject(iObject));\
04745         if (!cppObject)\
04746         {\
04747             return 0;\
04748         }\
04749         return i_cppFreeGetter( cppObject );\
04750     }\
04751     int LASS_CONCATENATE(i_dispatcher, _freeSetter)( PyObject* iObject, PyObject* iArgs, void* )\
04752     {\
04753         typedef ::lass::python::impl::ShadowTraits< t_cppClass > TShadowTraits;\
04754         typedef TShadowTraits::TCppClass TCppClass;\
04755         TCppClass* cppObject = TShadowTraits::cppObject(iObject);\
04756         if (!cppObject)\
04757         {\
04758             return 0;\
04759         }\
04760         int r = i_cppFreeSetter( cppObject, iArgs );\
04761         return r;\
04762     }\
04763     LASS_EXECUTE_BEFORE_MAIN_EX\
04764     ( LASS_CONCATENATE(i_dispatcher, _executeBeforeMain),\
04765         t_cppClass::_lassPyGetSetters.insert(\
04766             t_cppClass::_lassPyGetSetters.begin(),\
04767             ::lass::python::impl::createPyGetSetDef(\
04768                 s_memberName,\
04769                 LASS_CONCATENATE(i_dispatcher, _freeGetter),\
04770                 LASS_CONCATENATE(i_dispatcher, _freeSetter),\
04771                 s_doc, 0));\
04772     )
04773 
04774 /** @ingroup Python
04775  *  @sa PY_CLASS_DEPRECATED_FREE_MEMBER_RW_EX
04776  *  convenience macro, wraps PY_CLASS_FREE_MEMBER_RW_EX with
04777  *  @a i_dispatcher = lassPyImpl_memberR_ @a t_cppClass __LINE__
04778  */
04779 #define PY_CLASS_DEPRECATED_FREE_MEMBER_RW_NAME_DOC(t_cppClass, i_cppFreeGetter, i_cppFreeSetter, s_memberName, s_doc)\
04780     PY_CLASS_DEPRECATED_FREE_MEMBER_RW_EX(t_cppClass, i_cppFreeGetter, i_cppFreeSetter, s_memberName, s_doc,\
04781         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_freeMemberRW, t_cppClass)))
04782 
04783 /** @ingroup Python
04784  *  @sa PY_CLASS_FREE_MEMBER_RW_EX
04785  *  convenience macro, wraps PY_CLASS_FREE_MEMBER_RW_NAME_DOC with @a s_doc = 0
04786  */
04787 #define PY_CLASS_DEPRECATED_FREE_MEMBER_RW_NAME(t_cppClass, i_cppFreeGetter, i_cppFreeSetter, s_memberName)\
04788     PY_CLASS_DEPRECATED_FREE_MEMBER_RW_NAME_DOC(t_cppClass, i_cppFreeGetter, i_cppFreeSetter, s_memberName, 0)
04789 
04790 /** @ingroup Python
04791  *  @sa PY_CLASS_DEPRECATED_FREE_MEMBER_RW_EX
04792  *  convenience macro, wraps PY_CLASS_FREE_MEMBER_RW_NAME_DOC with @a s_name = "s_cppFreeGetter"
04793  */
04794 #define PY_CLASS_DEPRECATED_FREE_MEMBER_RW_DOC(t_cppClass, i_cppFreeGetter, i_cppFreeSetter, s_doc)\
04795     PY_CLASS_DEPRECATED_FREE_MEMBER_RW_NAME_DOC(t_cppClass, i_cppFreeGetter, i_cppFreeSetter, LASS_STRINGIFY(i_cppFreeGetter), s_doc)
04796 
04797 /** @ingroup Python
04798  *  @sa PY_CLASS_DEPRECATED_FREE_MEMBER_RW_EX
04799  *  convenience macro, wraps PY_CLASS_FREE_MEMBER_RW_NAME_DOC with @a s_name = "s_freeCppGetter" and @a s_doc = 0
04800  */
04801 #define PY_CLASS_DEPRECATED_FREE_MEMBER_RW(t_cppClass, i_cppFreeGetter, i_cppFreeSetter)\
04802     PY_CLASS_DEPRECATED_FREE_MEMBER_RW_DOC(t_cppClass, i_cppFreeGetter, i_cppFreeSetter, 0)
04803 
04804 
04805 
04806 /** @ingroup Python
04807  *  exports a get accessor as an read-only attribute in Python as a free function
04808  *
04809  *  @param t_cppClass
04810  *      the C++ class you want to add the static method to.
04811  *  @param s_memberName
04812  *      the name of the attribute in python (zero terminated C string)
04813  *  @param a_freeCppGetter
04814  *      a free function in C++ used to get the attribute
04815  *  @param s_doc
04816  *      documentation of member as shown in Python (zero terminated C string)
04817  *  @deprecated
04818  *
04819  *  @code
04820  *  // foo.h
04821  *  class Foo
04822  *  {
04823  *      PY_HEADER(python::PyObjectPlus)
04824  *  public:
04825  *      int bar;
04826  *  };
04827  *
04828  *  PyObject getBar(const Foo const* iThis) 
04829  *  { 
04830  *      return iThis->bar;
04831  *  }
04832  *
04833  *  // foo.cpp
04834  *  PY_DECLARE_CLASS(Foo)
04835  *  PY_CLASS_DEPRECATED_FREE_MEMBER_R_EX(Foo, getBar, "bar", "regular get and setter")
04836  *  @endcode
04837  */
04838 #define PY_CLASS_DEPRECATED_FREE_MEMBER_R_EX( t_cppClass, i_freeCppGetter, s_memberName, s_doc, i_dispatcher )\
04839     PyObject* LASS_CONCATENATE(i_dispatcher, _freeGetter) ( PyObject* iObject, void* )\
04840     {\
04841         typedef ::lass::python::impl::ShadowTraits< t_cppClass > TShadowTraits;\
04842         typedef TShadowTraits::TCppClass TCppClass;\
04843         TCppClass* cppObject = const_cast<TCppClass*>(TShadowTraits::constCppObject(iObject));\
04844         if (!cppObject)\
04845         {\
04846             return 0;\
04847         }\
04848         return i_freeCppGetter( cppObject) ;\
04849     }\
04850     LASS_EXECUTE_BEFORE_MAIN_EX\
04851     ( LASS_CONCATENATE(i_dispatcher, _executeBeforeMain),\
04852         t_cppClass::_lassPyGetSetters.insert(\
04853             t_cppClass::_lassPyGetSetters.begin(),\
04854             ::lass::python::impl::createPyGetSetDef(\
04855                 s_memberName, LASS_CONCATENATE(i_dispatcher, _freeGetter), 0, \
04856                 s_doc, 0));\
04857     )
04858 
04859 /** @ingroup Python
04860  *  @sa PY_CLASS_DEPRECATED_MEMBER_R_EX
04861  *  convenience macro, wraps PY_CLASS_MEMBER_R_EX with
04862  *  @a i_dispatcher = lassPyImpl_memberR_ ## @a t_cppClass ## __LINE__
04863  */
04864 #define PY_CLASS_DEPRECATED_FREE_MEMBER_R_NAME_DOC(t_cppClass, i_freeCppGetter, s_memberName, s_doc)\
04865     PY_CLASS_DEPRECATED_FREE_MEMBER_R_EX(t_cppClass, i_freeCppGetter, s_memberName, s_doc,\
04866         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_freeMemberR, t_cppClass)))
04867 
04868 /** @ingroup Python
04869  *  @sa PY_CLASS_DEPRECATED_MEMBER_R_EX
04870  *  convenience macro, wraps PY_CLASS_MEMBER_R_NAME_DOC with @a s_doc = 0
04871  */
04872 #define PY_CLASS_DEPRECATED_FREE_MEMBER_R_NAME(t_cppClass, i_freeCppGetter, s_memberName)\
04873     PY_CLASS_DEPRECATED_FREE_MEMBER_R_NAME_DOC(t_cppClass, i_freeCppGetter, s_memberName, 0)
04874 
04875 /** @ingroup Python
04876  *  @sa PY_CLASS_DEPRECATED_MEMBER_R_EX
04877  *  convenience macro, wraps PY_CLASS_MEMBER_R_NAME_DOC with @a s_memberName = "i_freeCppGetter"
04878  */
04879 #define PY_CLASS_DEPRECATED_FREE_MEMBER_R_DOC(t_cppClass, i_freeCppGetter, s_doc)\
04880     PY_CLASS_DEPRECATED_FREE_MEMBER_R_NAME_DOC(t_cppClass, i_freeCppGetter, LASS_STRINGIFY(i_freeCppGetter), s_doc)
04881 
04882 /** @ingroup Python
04883  *  @sa PY_CLASS_DEPRECATED_MEMBER_R_DOC
04884  *  convenience macro, wraps PY_CLASS_MEMBER_R_NAME_DOC with @a s_memberName = "i_cppGetter" and @a s_doc = 0
04885  */
04886 #define PY_CLASS_DEPRECATED_FREE_MEMBER_R(t_cppClass, i_freeCppGetter)\
04887     PY_CLASS_DEPRECATED_FREE_MEMBER_R_DOC(t_cppClass, i_freeCppGetter, 0)
04888 
04889 
04890 // -- end of deprecated 
04891 
04892 /** @ingroup Python
04893  *  exports a public data member as a read/write attribute in Python
04894  *
04895  *  @param t_cppClass
04896  *      the C++ class you want to add the static method to.
04897  *  @param i_cppMember
04898  *      the C++ data meber to be exported
04899  *  @param s_memberName
04900  *      the name of the attribute in python (zero terminated C string)
04901  *  @param s_doc
04902  *      documentation of member as shown in Python (zero terminated C string)
04903  *
04904  *  @code
04905  *  // foo.h
04906  *  class Foo
04907  *  {
04908  *      PY_HEADER(python::PyObjectPlus)
04909  *  public:
04910  *      int bar;
04911  *  };
04912  *
04913  *  // foo.cpp
04914  *  PY_DECLARE_CLASS(Foo)
04915  *  PY_CLASS_PUBLIC_MEMBER_EX(Foo, bar, "bar", "blablabla")
04916  *  @endcode
04917  */
04918 #define PY_CLASS_PUBLIC_MEMBER_EX(i_cppClass, i_cppMember, s_memberName, s_doc, i_dispatcher)\
04919     PyObject* LASS_CONCATENATE(i_dispatcher, _getter)(PyObject* iObject, void* )\
04920     {\
04921         typedef ::lass::python::impl::ShadowTraits<i_cppClass> TShadowTraits;\
04922         typedef TShadowTraits::TCppClass TCppClass;\
04923         TCppClass* cppObject = const_cast<TCppClass*>(TShadowTraits::constCppObject(iObject));\
04924         if (!cppObject)\
04925         {\
04926             return 0;\
04927         }\
04928         return lass::python::pyBuildSimpleObject(cppObject->i_cppMember);\
04929     }\
04930     int LASS_CONCATENATE(i_dispatcher, _setter)(PyObject* iObject,PyObject* iArgs, void* )\
04931     {\
04932         typedef ::lass::python::impl::ShadowTraits<i_cppClass> TShadowTraits;\
04933         typedef TShadowTraits::TCppClass TCppClass;\
04934         TCppClass* cppObject = TShadowTraits::cppObject(iObject);\
04935         if (!cppObject)\
04936         {\
04937             return -1;\
04938         }\
04939         return ::lass::python::pyGetSimpleObject(iArgs, cppObject->i_cppMember);\
04940     }\
04941     LASS_EXECUTE_BEFORE_MAIN_EX\
04942     ( LASS_CONCATENATE(i_dispatcher, _executeBeforeMain),\
04943         i_cppClass::_lassPyGetSetters.insert(\
04944             i_cppClass::_lassPyGetSetters.begin(),\
04945             ::lass::python::impl::createPyGetSetDef(\
04946                 s_memberName,\
04947                 LASS_CONCATENATE(i_dispatcher, _getter),\
04948                 LASS_CONCATENATE(i_dispatcher, _setter),\
04949                 s_doc, 0));\
04950     )
04951 
04952 /** @ingroup Python
04953  *  @sa PY_CLASS_PUBLIC_MEMBER_EX
04954  *  convenience macro, wraps PY_CLASS_PUBLIC_MEMBER_EX with
04955  *  @a dispatcher = lassPyImpl_publicMember_ ## @a i_cppClass ## __LINE__.
04956  */
04957 #define PY_CLASS_PUBLIC_MEMBER_NAME_DOC( i_cppClass, i_cppMember, s_memberName, s_doc )\
04958     PY_CLASS_PUBLIC_MEMBER_EX( i_cppClass, i_cppMember, s_memberName, s_doc,\
04959         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_publicMember_, i_cppClass)))
04960 
04961 /** @ingroup Python
04962  *  @sa PY_CLASS_PUBLIC_MEMBER_EX
04963  *  convenience macro, wraps PY_CLASS_PUBLIC_MEMBER_NAME_DOC with @a s_doc = 0.
04964  */
04965 #define PY_CLASS_PUBLIC_MEMBER_NAME( i_cppClass, i_cppMember, s_memberName )\
04966     PY_CLASS_PUBLIC_MEMBER_NAME_DOC( i_cppClass, i_cppMember, s_memberName, 0 )
04967 
04968 /** @ingroup Python
04969  *  @sa PY_CLASS_PUBLIC_MEMBER_EX
04970  *  convenience macro, wraps PY_CLASS_PUBLIC_MEMBER_NAME_DOC with @a s_memberName = "@a i_cppMember".
04971  */
04972 #define PY_CLASS_PUBLIC_MEMBER_DOC( i_cppClass, i_cppMember , s_doc)\
04973     PY_CLASS_PUBLIC_MEMBER_NAME_DOC( i_cppClass, i_cppMember, LASS_STRINGIFY(i_cppMember), s_doc )
04974 
04975 /** @ingroup Python
04976  *  @sa PY_CLASS_PUBLIC_MEMBER_EX
04977  *  convenience macro, wraps PY_CLASS_PUBLIC_MEMBER_NAME_DOC with @a s_memberName = "@a i_cppMember"
04978  *  and @a s_doc = 0.
04979  */
04980 #define PY_CLASS_PUBLIC_MEMBER( i_cppClass, i_cppMember )\
04981     PY_CLASS_PUBLIC_MEMBER_NAME_DOC( i_cppClass, i_cppMember, LASS_STRINGIFY(i_cppMember), 0 )
04982 
04983 
04984 
04985 
04986 /** @ingroup Python
04987  *  exports a public data member as a read-only attribute in Python
04988  *
04989  *  @param t_cppClass
04990  *      the C++ class you want to add the static method to.
04991  *  @param i_cppMember
04992  *      the C++ data meber to be exported
04993  *  @param s_memberName
04994  *      the name of the attribute in python (zero terminated C string)
04995  *  @param s_doc
04996  *      documentation of member as shown in Python (zero terminated C string)
04997  *
04998  *  @code
04999  *  // foo.h
05000  *  class Foo
05001  *  {
05002  *      PY_HEADER(python::PyObjectPlus)
05003  *  public:
05004  *      const int bar;
05005  *  };
05006  *
05007  *  // foo.cpp
05008  *  PY_DECLARE_CLASS(Foo)
05009  *  PY_CLASS_PUBLIC_MEMBER_R_EX(Foo, bar, "bar", "read-only member")
05010  *  @endcode
05011  */
05012 #define PY_CLASS_PUBLIC_MEMBER_R_EX( i_cppClass, i_cppMember, s_memberName, s_doc, i_dispatcher )\
05013     PyObject* LASS_CONCATENATE(i_dispatcher, _getter)(PyObject* iObject, void* )\
05014     {\
05015         typedef ::lass::python::impl::ShadowTraits<i_cppClass> TShadowTraits;\
05016         typedef TShadowTraits::TCppClass TCppClass;\
05017         TCppClass* cppObject = const_cast<TCppClass*>(TShadowTraits::constCppObject(iObject));\
05018         if (!cppObject)\
05019         {\
05020             return 0;\
05021         }\
05022         return lass::python::pyBuildSimpleObject( cppObject->i_cppMember);\
05023     }\
05024     int LASS_CONCATENATE(i_dispatcher, _setter)( PyObject*, PyObject*, void* )\
05025     {\
05026         std::ostringstream buffer;\
05027         buffer << "Object/reference " << s_memberName << " is read-only.";\
05028         PyErr_SetString(PyExc_TypeError, buffer.str().c_str());\
05029         return -1;\
05030     }\
05031     LASS_EXECUTE_BEFORE_MAIN_EX\
05032     ( LASS_CONCATENATE(i_dispatcher, _executeBeforeMain),\
05033         i_cppClass::_lassPyGetSetters.insert(\
05034             i_cppClass::_lassPyGetSetters.begin(),\
05035             ::lass::python::impl::createPyGetSetDef(\
05036                 s_memberName,\
05037                 LASS_CONCATENATE(i_dispatcher, _getter),\
05038                 LASS_CONCATENATE(i_dispatcher, _setter),\
05039                 s_doc, 0));\
05040     )
05041 
05042 /** @ingroup Python
05043  *  @sa PY_CLASS_PUBLIC_MEMBER_R_EX
05044  *  convenience macro, wraps PY_CLASS_PUBLIC_MEMBER_R_EX with
05045  *  @a i_dispatcher = lassPyImpl_publicMemberR_ ## @a i_cppClass ## __LINE__.
05046  */
05047 #define PY_CLASS_PUBLIC_MEMBER_R_NAME_DOC(i_cppClass, i_cppMember, s_memberName, s_doc)\
05048     PY_CLASS_PUBLIC_MEMBER_R_EX(i_cppClass, i_cppMember, s_memberName, s_doc,\
05049         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_publicMemberR_, i_cppClass)))
05050 
05051 /** @ingroup Python
05052  *  @sa PY_CLASS_PUBLIC_MEMBER_R_EX
05053  *  convenience macro, wraps PY_CLASS_PUBLIC_MEMBER_R_NAME_DOC with @a s_doc = 0.
05054  */
05055 #define PY_CLASS_PUBLIC_MEMBER_R_NAME(i_cppClass, i_cppMember, s_memberName)\
05056     PY_CLASS_PUBLIC_MEMBER_R_NAME_DOC(i_cppClass, i_cppMember, s_memberName, 0 )
05057 
05058 /** @ingroup Python
05059  *  @sa PY_CLASS_PUBLIC_MEMBER_R_EX
05060  *  convenience macro, wraps PY_CLASS_PUBLIC_MEMBER_R_NAME_DOC with @a s_memberName = "@a i_cppMember"
05061  */
05062 #define PY_CLASS_PUBLIC_MEMBER_R_DOC(i_cppClass, i_cppMember , s_doc)\
05063     PY_CLASS_PUBLIC_MEMBER_R_NAME_DOC(i_cppClass, i_cppMember, LASS_STRINGIFY(i_cppMember),  s_doc)
05064 
05065 /** @ingroup Python
05066  *  @sa PY_CLASS_PUBLIC_MEMBER_R_EX
05067  *  convenience macro, wraps PY_CLASS_PUBLIC_MEMBER_R_NAME_DOC with @a s_memberName = "@a i_cppMember"
05068  *  and @a s_doc = 0.
05069  */
05070 #define PY_CLASS_PUBLIC_MEMBER_R(i_cppClass, i_cppMember)\
05071     PY_CLASS_PUBLIC_MEMBER_R_NAME_DOC(i_cppClass, i_cppMember, LASS_STRINGIFY(i_cppMember), 0)
05072 
05073 
05074 
05075 // --- constructors --------------------------------------------------------------------------------
05076 
05077 /** @ingroup Python
05078  *  makes a abstract python class concreet by adding a constructor.
05079  *
05080  *  All python classes are abstract by default, you don't have any constructors to create
05081  *  instances.  To make a class concrete, you must provide a constructor by using this macro.
05082  *  You can overload this constructor by the same way you can overload class methods.
05083  *
05084  *  @param t_cppClass
05085  *      the C++ class to generate the constructor
05086  *  @param t_params
05087  *      a meta::TypeList of the parameters needed by the constructor.
05088  *      Use meta::NullType if the constructor doesn't take any parameters.
05089  *  @param i_dispatcher
05090  *      A unique name of the static C++ dispatcher function to be generated.  This name will be
05091  *      used for the names of automatic generated variables and functions and should be unique
05092  *      per exported C++ class/constructor pair.
05093  *
05094  *  @code
05095  *  // foo.h
05096  *  class Foo
05097  *  {
05098  *      PY_HEADER(python::PyObjectPlus)
05099  *  public:
05100  *      Foo();
05101  *      Foo(int iA, const std::string& iB);
05102  *  };
05103  *
05104  *  // foo.cpp
05105  *  PY_DECLARE_CLASS(Foo)
05106  *   TRUCTOR(Foo, meta::NullType) // constructor without arguments.
05107  *  typedef meta::type_list::Make<int, std::string>::Type TArguments;
05108  *  PY_CLASS_CONSTRUCTOR(Foo, TArguments) // constructor with some arguments. *
05109  *  @endcode
05110  */
05111 #define PY_CLASS_CONSTRUCTOR_EX( t_cppClass, t_params, i_dispatcher )\
05112     static newfunc LASS_CONCATENATE(i_dispatcher, _overloadChain) = 0;\
05113     PyObject* i_dispatcher(PyTypeObject *iSubtype, PyObject *iArgs, PyObject *iKwds)\
05114     {\
05115         if (LASS_CONCATENATE(i_dispatcher, _overloadChain))\
05116         {\
05117             PyObject* result = LASS_CONCATENATE(i_dispatcher, _overloadChain)(\
05118                 iSubtype, iArgs, iKwds);\
05119             if (!(PyErr_Occurred() && PyErr_ExceptionMatches(PyExc_TypeError)))\
05120             {\
05121                 return result;\
05122             }\
05123             PyErr_Clear();\
05124             Py_XDECREF(result);\
05125         }\
05126         return ::lass::python::impl::ExplicitResolver\
05127         <\
05128             t_cppClass,\
05129             ::lass::meta::NullType,\
05130             t_params\
05131         >\
05132         ::TImpl::callConstructor(iSubtype, iArgs);\
05133     }\
05134     LASS_EXECUTE_BEFORE_MAIN_EX(\
05135         LASS_CONCATENATE(i_dispatcher, _executeBeforeMain),\
05136         LASS_CONCATENATE(i_dispatcher, _overloadChain) = t_cppClass::_lassPyType.tp_new;\
05137         t_cppClass::_lassPyType.tp_new = i_dispatcher; \
05138     )
05139 
05140 /** @ingroup Python
05141  *  convenience macro, wraps PY_CLASS_CONSTRUCTOR_EX with
05142  *  @a i_dispatcher = lassPyImpl_constructor_ ## @a i_cppClass ## __LINE__
05143  */
05144 #define PY_CLASS_CONSTRUCTOR( i_cppClass, t_params )\
05145     PY_CLASS_CONSTRUCTOR_EX(i_cppClass, t_params,\
05146         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_constructor_, i_cppClass)))
05147 
05148 /** @ingroup Python
05149  *  convenience macro, wraps PY_CLASS_CONSTRUCTOR for 0 arguments
05150  */
05151 #define PY_CLASS_CONSTRUCTOR_0( t_cppClass )\
05152     PY_CLASS_CONSTRUCTOR( t_cppClass, ::lass::meta::NullType )
05153 
05154 /** @ingroup Python
05155  *  convenience macro, wraps PY_CLASS_CONSTRUCTOR for 1 arguments
05156  */
05157 #define PY_CLASS_CONSTRUCTOR_1( t_cppClass, t_P1 )\
05158     typedef ::lass::meta::type_list::Make< t_P1 >::Type \
05159         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_TParams_, t_cppClass));\
05160     PY_CLASS_CONSTRUCTOR(\
05161         t_cppClass, LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_TParams_, t_cppClass)))
05162 
05163 /** @ingroup Python
05164  *  convenience macro, wraps PY_CLASS_CONSTRUCTOR for 2 arguments
05165  */
05166 #define PY_CLASS_CONSTRUCTOR_2( t_cppClass, t_P1, t_P2 )\
05167     typedef ::lass::meta::type_list::Make< t_P1, t_P2 >::Type \
05168         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_TParams_, t_cppClass));\
05169     PY_CLASS_CONSTRUCTOR(\
05170         t_cppClass, LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_TParams_, t_cppClass)))
05171 
05172 /** @ingroup Python
05173  *  convenience macro, wraps PY_CLASS_CONSTRUCTOR for 3 arguments
05174  */
05175 #define PY_CLASS_CONSTRUCTOR_3( t_cppClass, t_P1, t_P2, t_P3 )\
05176     typedef ::lass::meta::type_list::Make< t_P1, t_P2, t_P3 >::Type \
05177         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_TParams_, t_cppClass));\
05178     PY_CLASS_CONSTRUCTOR(\
05179         t_cppClass, LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_TParams_, t_cppClass)))
05180 
05181 /** @ingroup Python
05182  *  convenience macro, wraps PY_CLASS_CONSTRUCTOR for 4 arguments
05183  */
05184 #define PY_CLASS_CONSTRUCTOR_4( t_cppClass, t_P1, t_P2, t_P3, t_P4 )\
05185     typedef ::lass::meta::type_list::Make< t_P1, t_P2, t_P3, t_P4 >::Type \
05186         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_TParams_, t_cppClass));\
05187     PY_CLASS_CONSTRUCTOR(\
05188         t_cppClass, LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_TParams_, t_cppClass)))
05189 
05190 /** @ingroup Python
05191  *  convenience macro, wraps PY_CLASS_CONSTRUCTOR for 5 arguments
05192  */
05193 #define PY_CLASS_CONSTRUCTOR_5( t_cppClass, t_P1, t_P2, t_P3, t_P4, t_P5 )\
05194     typedef ::lass::meta::type_list::Make< t_P1, t_P2, t_P3, t_P4, t_P5 >::Type \
05195         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_TParams_, t_cppClass));\
05196     PY_CLASS_CONSTRUCTOR(\
05197         t_cppClass, LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_TParams_, t_cppClass)))
05198 
05199 /** @ingroup Python
05200  *  convenience macro, wraps PY_CLASS_CONSTRUCTOR for 6 arguments
05201  */
05202 #define PY_CLASS_CONSTRUCTOR_6( t_cppClass, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6 )\
05203     typedef ::lass::meta::type_list::Make< t_P1, t_P2, t_P3, t_P4, t_P5, t_P6 >::Type \
05204         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_TParams_, t_cppClass));\
05205     PY_CLASS_CONSTRUCTOR(\
05206         t_cppClass, LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_TParams_, t_cppClass)))
05207 
05208 /** @ingroup Python
05209  *  convenience macro, wraps PY_CLASS_CONSTRUCTOR for 7 arguments
05210  */
05211 #define PY_CLASS_CONSTRUCTOR_7( t_cppClass, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7 )\
05212     typedef ::lass::meta::type_list::Make< t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7 >::Type \
05213         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_TParams_, t_cppClass));\
05214     PY_CLASS_CONSTRUCTOR(\
05215         t_cppClass, LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_TParams_, t_cppClass)))
05216 
05217 /** @ingroup Python
05218  *  convenience macro, wraps PY_CLASS_CONSTRUCTOR for 8 arguments
05219  */
05220 #define PY_CLASS_CONSTRUCTOR_8( t_cppClass, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8 )\
05221     typedef ::lass::meta::type_list::Make< t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8 >::Type \
05222         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_TParams_, t_cppClass));\
05223     PY_CLASS_CONSTRUCTOR(\
05224         t_cppClass, LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_TParams_, t_cppClass)))
05225 
05226 /** @ingroup Python
05227  *  convenience macro, wraps PY_CLASS_CONSTRUCTOR for 9 arguments
05228  */
05229 #define PY_CLASS_CONSTRUCTOR_9( t_cppClass, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9 )\
05230     typedef ::lass::meta::type_list::Make< t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9 >::Type \
05231         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_TParams_, t_cppClass));\
05232     PY_CLASS_CONSTRUCTOR(\
05233         t_cppClass, LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_TParams_, t_cppClass)))
05234 
05235 /** @ingroup Python
05236  *  convenience macro, wraps PY_CLASS_CONSTRUCTOR for 10 arguments
05237  */
05238 #define PY_CLASS_CONSTRUCTOR_10( t_cppClass, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10 )\
05239     typedef ::lass::meta::type_list::Make< t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10 >::Type \
05240         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_TParams_, t_cppClass));\
05241     PY_CLASS_CONSTRUCTOR(\
05242         t_cppClass, LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_TParams_, t_cppClass)))
05243 
05244 /** @ingroup Python
05245  *  convenience macro, wraps PY_CLASS_CONSTRUCTOR for 11 arguments
05246  */
05247 #define PY_CLASS_CONSTRUCTOR_11( t_cppClass, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11 )\
05248     typedef ::lass::meta::type_list::Make< t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11 >::Type \
05249         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_TParams_, t_cppClass));\
05250     PY_CLASS_CONSTRUCTOR(\
05251         t_cppClass, LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_TParams_, t_cppClass)))
05252 
05253 /** @ingroup Python
05254  *  convenience macro, wraps PY_CLASS_CONSTRUCTOR for 12 arguments
05255  */
05256 #define PY_CLASS_CONSTRUCTOR_12( t_cppClass, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12 )\
05257     typedef ::lass::meta::type_list::Make< t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12 >::Type \
05258         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_TParams_, t_cppClass));\
05259     PY_CLASS_CONSTRUCTOR(\
05260         t_cppClass, LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_TParams_, t_cppClass)))
05261 
05262 /** @ingroup Python
05263  *  convenience macro, wraps PY_CLASS_CONSTRUCTOR for 13 arguments
05264  */
05265 #define PY_CLASS_CONSTRUCTOR_13( t_cppClass, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13 )\
05266     typedef ::lass::meta::type_list::Make< t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13 >::Type \
05267         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_TParams_, t_cppClass));\
05268     PY_CLASS_CONSTRUCTOR(\
05269         t_cppClass, LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_TParams_, t_cppClass)))
05270 
05271 /** @ingroup Python
05272  *  convenience macro, wraps PY_CLASS_CONSTRUCTOR for 14 arguments
05273  */
05274 #define PY_CLASS_CONSTRUCTOR_14( t_cppClass, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14 )\
05275     typedef ::lass::meta::type_list::Make< t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14 >::Type \
05276         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_TParams_, t_cppClass));\
05277     PY_CLASS_CONSTRUCTOR(\
05278         t_cppClass, LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_TParams_, t_cppClass)))
05279 
05280 /** @ingroup Python
05281  *  convenience macro, wraps PY_CLASS_CONSTRUCTOR for 15 arguments
05282  */
05283 #define PY_CLASS_CONSTRUCTOR_15( t_cppClass, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15 )\
05284     typedef ::lass::meta::type_list::Make< t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15 >::Type \
05285         LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_TParams_, t_cppClass));\
05286     PY_CLASS_CONSTRUCTOR(\
05287         t_cppClass, LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_TParams_, t_cppClass)))
05288 
05289 
05290 
05291 
05292 // --- internals -----------------------------------------------------------------------------------
05293 
05294 /** @internal
05295  */
05296 #define PY_STATIC_FUNCTION_FORWARD( t_cppClass, s_className )   \
05297     PyObject_HEAD_INIT(&PyType_Type)\
05298     0,  /*ob_size*/\
05299     (char*)( s_className ), /*tp_name*/\
05300     sizeof( t_cppClass ),   /*tp_basicsize*/\
05301     0,  /*tp_itemsize*/\
05302     ::lass::python::impl::dealloc,  /*tp_dealloc*/\
05303     0,  /*tp_print*/\
05304     0,  /*tp_getattr*/\
05305     0,  /*tp_setattr*/\
05306     0,  /*tp_compare*/\
05307     ::lass::python::impl::repr, /*tp_repr*/\
05308     0,  /*tp_as_number*/\
05309     0,  /*tp_as_sequence*/\
05310     0,  /*tp_as_mapping*/\
05311     0,  /*tp_hash*/\
05312     0,  /*tp_call */\
05313     ::lass::python::impl::str,  /*tp_str */\
05314     0,/*PyObject_GenericGetAttr ,*/ /*tp_getattro */\
05315     0,/*PyObject_GenericSetAttr,*/  /*tp_setattro */\
05316     0,  /*tp_as_buffer*/\
05317     Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE , /*| Py_TPFLAGS_HAVE_CLASS ,  /*tp_flags*/\
05318     0,  /*tp_doc*/\
05319     0,  /*tp_traverse*/\
05320     0,  /*tp_clear*/\
05321     0,  /*tp_richcompare*/\
05322     0,  /*tp_weaklistoffset*/\
05323     0,  /*tp_iter*/\
05324     0,  /*tp_iternext*/\
05325     0,  /*tp_methods*/\
05326     0,  /*tp_members*/\
05327     0,  /*tp_getset*/\
05328     0,  /*tp_base*/\
05329     0,  /*tp_dict*/\
05330     0,  /*tp_descr_get*/\
05331     0,  /*tp_descr_set*/\
05332     0,  /*tp_dictoffset*/\
05333     0,  /*tp_init*/\
05334     0,  /*tp_alloc*/\
05335     0,  /*tp_new*/\
05336     0,  /*tp_free*/\
05337     0,  /*tp_is_gc*/\
05338     0,  /*tp_bases*/\
05339     0,  /*tp_mro*/\
05340     0,  /*tp_cache*/\
05341     0,  /*tp_subclasses*/\
05342     0,  /*tp_weaklist*/\
05343     0,  /*tp_del*/
05344 
05345  #ifdef LASS_PYTHON_INHERITANCE_FROM_EMBEDDING
05346 /** @internal
05347  */
05348 #define PY_STATIC_FUNCTION_FORWARD_PLUS( t_cppClass, s_className )    \
05349     PyObject_HEAD_INIT(&PyType_Type)\
05350     0,  /*ob_size*/\
05351     (char*)( s_className ), /*tp_name*/\
05352     sizeof( t_cppClass ),   /*tp_basicsize*/\
05353     0,  /*tp_itemsize*/\
05354     ::lass::python::impl::dealloc,  /*tp_dealloc*/\
05355     0,  /*tp_print*/\
05356     0,  /*tp_getattr*/\
05357     0,  /*tp_setattr*/\
05358     0,  /*tp_compare*/\
05359     ::lass::python::impl::repr, /*tp_repr*/\
05360     0,  /*tp_as_number*/\
05361     0,  /*tp_as_sequence*/\
05362     0,  /*tp_as_mapping*/\
05363     0,  /*tp_hash*/\
05364     0,  /*tp_call */\
05365     ::lass::python::impl::str,  /*tp_str */\
05366     0,/*PyObject_GenericGetAttr ,*/ /*tp_getattro */\
05367     0,/*PyObject_GenericSetAttr,*/  /*tp_setattro */\
05368     0,  /*tp_as_buffer*/\
05369     Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,   /*tp_flags*/\
05370     0,  /*tp_doc*/\
05371     0,  /*tp_traverse*/\
05372     0,  /*tp_clear*/\
05373     ::lass::python::impl::RichCompare<t_cppClass>::call, /*tp_richcompare*/\
05374     0,  /*tp_weaklistoffset*/\
05375     0,  /*tp_iter*/\
05376     0,  /*tp_iternext*/\
05377     0,  /*tp_methods*/\
05378     0,  /*tp_members*/\
05379     0,  /*tp_getset*/\
05380     0,  /*tp_base*/\
05381     0,  /*tp_dict*/\
05382     0,  /*tp_descr_get*/\
05383     0,  /*tp_descr_set*/\
05384     offsetof(PyObjectPlus,dict_),   /*tp_dictoffset*/\
05385     0,  /*tp_init*/\
05386     0,  /*tp_alloc*/\
05387     0,  /*tp_new*/\
05388     0,  /*tp_free*/\
05389     0,  /*tp_is_gc*/\
05390     0,  /*tp_bases*/\
05391     0,  /*tp_mro*/\
05392     0,  /*tp_cache*/\
05393     0,  /*tp_subclasses*/\
05394     0,  /*tp_weaklist*/\
05395     0,  /*tp_del*/
05396 #else
05397 /** @internal
05398  */
05399 #define PY_STATIC_FUNCTION_FORWARD_PLUS( t_cppClass, s_className )    \
05400     PyObject_HEAD_INIT(&PyType_Type)\
05401     0,  /*ob_size*/\
05402     (char*)( s_className ), /*tp_name*/\
05403     sizeof( t_cppClass ),   /*tp_basicsize*/\
05404     0,  /*tp_itemsize*/\
05405     ::lass::python::impl::dealloc,  /*tp_dealloc*/\
05406     0,  /*tp_print*/\
05407     0,  /*tp_getattr*/\
05408     0,  /*tp_setattr*/\
05409     0,  /*tp_compare*/\
05410     ::lass::python::impl::repr, /*tp_repr*/\
05411     0,  /*tp_as_number*/\
05412     0,  /*tp_as_sequence*/\
05413     0,  /*tp_as_mapping*/\
05414     0,  /*tp_hash*/\
05415     0,  /*tp_call */\
05416     ::lass::python::impl::str,  /*tp_str */\
05417     0,/*PyObject_GenericGetAttr ,*/ /*tp_getattro */\
05418     0,/*PyObject_GenericSetAttr,*/  /*tp_setattro */\
05419     0,  /*tp_as_buffer*/\
05420     Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,   /*tp_flags*/\
05421     0,  /*tp_doc*/\
05422     0,  /*tp_traverse*/\
05423     0,  /*tp_clear*/\
05424     ::lass::python::impl::RichCompare<t_cppClass>::call, /*tp_richcompare*/\
05425     0,  /*tp_weaklistoffset*/\
05426     0,  /*tp_iter*/\
05427     0,  /*tp_iternext*/\
05428     0,  /*tp_methods*/\
05429     0,  /*tp_members*/\
05430     0,  /*tp_getset*/\
05431     0,  /*tp_base*/\
05432     0,  /*tp_dict*/\
05433     0,  /*tp_descr_get*/\
05434     0,  /*tp_descr_set*/\
05435     0,  /*tp_dictoffset*/\
05436     0,  /*tp_init*/\
05437     0,  /*tp_alloc*/\
05438     0,  /*tp_new*/\
05439     0,  /*tp_free*/\
05440     0,  /*tp_is_gc*/\
05441     0,  /*tp_bases*/\
05442     0,  /*tp_mro*/\
05443     0,  /*tp_cache*/\
05444     0,  /*tp_subclasses*/\
05445     0,  /*tp_weaklist*/\
05446     0,  /*tp_del*/
05447 #endif
05448 /** @internal
05449  */
05450 #define PY_CLASS_METHOD_IMPL(t_cppClass, i_cppMethod, s_methodName, s_doc, i_dispatcher, i_caller)\
05451     static ::lass::python::impl::OverloadLink LASS_CONCATENATE(i_dispatcher, _overloadChain);\
05452     PyObject* i_dispatcher(PyObject* iSelf, PyObject* iArgs)\
05453     {\
05454         PyObject* result = 0;\
05455         if (LASS_CONCATENATE(i_dispatcher, _overloadChain)(iSelf, iArgs, result))\
05456         {\
05457             return result;\
05458         }\
05459         LASS_ASSERT(result == 0);\
05460         typedef ::lass::python::impl::ShadowTraits< t_cppClass > TShadowTraits;\
05461         typedef TShadowTraits::TCppClass TCppClass;\
05462         const TCppClass* const constSelf = TShadowTraits::constCppObject(iSelf);\
05463         if (lass::meta::isPseudoConstMember( i_cppMethod))\
05464         {\
05465             if (!constSelf)\
05466                 return 0;\
05467             return i_caller( iArgs, const_cast<TCppClass*>(constSelf), i_cppMethod );\
05468         }\
05469         TCppClass* const self = TShadowTraits::cppObject(iSelf);\
05470         if (!self)\
05471         {\
05472             return 0;\
05473         }\
05474         return i_caller(iArgs, self, i_cppMethod);\
05475     }\
05476     LASS_EXECUTE_BEFORE_MAIN_EX(LASS_CONCATENATE(i_dispatcher, _executeBeforeMain),\
05477         ::lass::python::impl::addClassMethod(\
05478             t_cppClass::_lassPyType,\
05479             t_cppClass::_lassPyMethods, t_cppClass::_lassPyCompareFuncs,\
05480             s_methodName, s_doc, \
05481             i_dispatcher,\
05482             ::lass::python::impl::unaryDispatcher<i_dispatcher>,\
05483             ::lass::python::impl::binaryDispatcher<i_dispatcher>,\
05484             ::lass::python::impl::ternaryDispatcher<i_dispatcher>,\
05485             ::lass::python::impl::ssizeargDispatcher<i_dispatcher>,\
05486             ::lass::python::impl::ssizessizeargDispatcher<i_dispatcher>,\
05487             ::lass::python::impl::lenDispatcher<i_dispatcher>,\
05488             ::lass::python::impl::ssizeobjargDispatcher<i_dispatcher>,\
05489             ::lass::python::impl::ssizessizeobjargDispatcher<i_dispatcher>,\
05490             ::lass::python::impl::objobjDispatcher<i_dispatcher>,\
05491             LASS_CONCATENATE(i_dispatcher, _overloadChain));\
05492     )
05493 
05494 #endif
05495 
05496 // EOF

Generated on Mon Nov 10 14:21:06 2008 for Library of Assembled Shared Sources by doxygen 1.5.7.1
SourceForge.net Logo