library of assembled shared sources

http://lass.cocamware.com

pyobject_call.inl

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_call.tmpl.inl
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 #ifndef LASS_GUARDIAN_OF_INCLUSION_UTIL_PYOBJECT_CALL_INL
00051 #define LASS_GUARDIAN_OF_INCLUSION_UTIL_PYOBJECT_CALL_INL
00052 
00053 #include "util_common.h"
00054 #include "pyobject_plus.h"
00055 #include "py_tuple.h"
00056 #include "pyshadow_object.h"
00057 #include "call_traits.h"
00058 #include "../meta/if.h"
00059 #include "../meta/select.h"
00060 #include "../meta/wrap.h"
00061 #include "../meta/type_list.h"
00062 
00063 #define LASS_UTIL_PYOBJECT_CALL_CATCH_AND_RETURN_EX(v_errorReturnValue)\
00064     catch (const ::lass::python::PythonException& error)\
00065     {\
00066         handlePythonException(error);\
00067         return v_errorReturnValue;\
00068     }\
00069     catch (const ::lass::util::Exception& error)\
00070     {\
00071         handleLassException(error);\
00072         return v_errorReturnValue;\
00073     }\
00074     catch (::std::exception& error)\
00075     {\
00076         handleStdException(error);\
00077         return v_errorReturnValue;\
00078     }
00079 
00080 #define LASS_UTIL_PYOBJECT_CALL_CATCH_AND_RETURN\
00081     LASS_UTIL_PYOBJECT_CALL_CATCH_AND_RETURN_EX(0)
00082 
00083 #if LASS_COMPILER_TYPE == LASS_COMPILER_TYPE_MSVC
00084 #   pragma warning(push)
00085 #   pragma warning(disable: 4267) // conversion from 'size_t' to 'unsigned int', possible loss of data
00086 #endif
00087 
00088 namespace lass
00089 {
00090 namespace python
00091 {
00092 namespace impl
00093 {
00094 
00095 // --- exception handlers -------------------------------------------------------------------------
00096 
00097 inline void handlePythonException(const PythonException& error)
00098 {
00099     PyErr_Restore(
00100         ::lass::python::fromSharedPtrToNakedCast(error.type()),
00101         ::lass::python::fromSharedPtrToNakedCast(error.value()),
00102         ::lass::python::fromSharedPtrToNakedCast(error.traceback()));
00103 }
00104 
00105 inline void handleLassException(const util::Exception& error)
00106 {
00107     ::std::ostringstream buffer;
00108     buffer << error.message() << "\n\n(" << error.location() << ")";
00109     PyErr_SetString(PyExc_Exception, buffer.str().c_str());
00110 }
00111 
00112 inline void handleStdException(const std::exception& error)
00113 {
00114     PyErr_SetString(PyExc_Exception, error.what());
00115 }
00116 
00117 // --- ArgumentTraits -----------------------------------------------------------------------------
00118 
00119 template <typename T>
00120 struct ArgValue
00121 {
00122     typedef T TStorage;
00123 protected:
00124     static const T* get(const TStorage& storage) { return &storage; }
00125 };
00126 
00127 template <typename T>
00128 struct ArgPyPtr
00129 {
00130     typedef typename PyObjectPtr<T>::Type TStorage;
00131 protected:
00132     static T* get(const TStorage& storage) { return storage.get(); }
00133 };
00134 
00135 
00136 /** determines the right type for temporary storage of function arguments.
00137  */
00138 template <typename T>
00139 struct ArgumentTraits: public meta::If< IsPyObject<T>, meta::NullType, ArgValue<T> >
00140 {
00141     template <typename S> static const T& arg(const S& storage) { return *get(storage); }
00142 };
00143 
00144 template <typename T>
00145 struct ArgumentTraits<const T>: public meta::If< IsPyObject<T>, meta::NullType, ArgValue<T> >
00146 {
00147     template <typename S> static const T& arg(const S& storage) { return *get(storage); }
00148 };
00149 
00150 template <typename T> 
00151 struct ArgumentTraits<T&>: public meta::If< IsPyObject<T>, ArgPyPtr<T>, meta::NullType >
00152 {
00153     template <typename S> static T& arg(const S& storage) { return *get(storage); }
00154 };
00155 
00156 template <typename T>
00157 struct ArgumentTraits<const T&>: public meta::If< IsPyObject<T>, ArgPyPtr<T>, ArgValue<T> >
00158 {
00159     template <typename S> static const T& arg(const S& storage) { return *get(storage); }
00160 };
00161 
00162 template <typename T> 
00163 struct ArgumentTraits<T*>: public meta::If< IsPyObject<T>, ArgPyPtr<T>, meta::NullType >
00164 {
00165     template <typename S> static T* arg(const S& storage) { return get(storage); }
00166 };
00167 
00168 template <typename T> 
00169 struct ArgumentTraits<const T*>: public meta::If< IsPyObject<T>, ArgPyPtr<T>, meta::NullType >
00170 {
00171     template <typename S> static const T* arg(const S& storage) { return get(storage); }
00172 };
00173 
00174 template <typename T> 
00175 struct ArgumentTraits<T* const>: public meta::If< IsPyObject<T>, ArgPyPtr<T>, meta::NullType >
00176 {
00177     template <typename S> static T* arg(const S& storage) { return get(storage); }
00178 };
00179 
00180 template <typename T> 
00181 struct ArgumentTraits<const T* const>: public meta::If< IsPyObject<T>, ArgPyPtr<T>, meta::NullType >
00182 {
00183     template <typename S> static const T* arg(const S& storage) { return get(storage); }
00184 };
00185 
00186 
00187 
00188 // --- actual callers ------------------------------------------------------------------------------
00189 
00190 /** calls the actual function with provided parameters, and returns result as a PyObject pointer.
00191  */
00192 template <typename R>
00193 struct Caller
00194 {
00195     // free function
00196 
00197     template <typename Function>
00198     static PyObject* function( Function iFunction )
00199     {
00200         try
00201         {
00202             return pyBuildSimpleObject( iFunction() );
00203         }
00204         LASS_UTIL_PYOBJECT_CALL_CATCH_AND_RETURN
00205     };
00206     
00207     template <typename Function, typename P1>
00208     static PyObject* function( Function iFunction, P1 p1 )
00209     {
00210         try
00211         {
00212             return pyBuildSimpleObject( iFunction(p1) );
00213         }
00214         LASS_UTIL_PYOBJECT_CALL_CATCH_AND_RETURN
00215     }
00216     
00217     template <typename Function, typename P1, typename P2>
00218     static PyObject* function( Function iFunction, P1 p1, P2 p2 )
00219     {
00220         try
00221         {
00222             return pyBuildSimpleObject( iFunction(p1, p2) );
00223         }
00224         LASS_UTIL_PYOBJECT_CALL_CATCH_AND_RETURN
00225     }
00226     
00227     template <typename Function, typename P1, typename P2, typename P3>
00228     static PyObject* function( Function iFunction, P1 p1, P2 p2, P3 p3 )
00229     {
00230         try
00231         {
00232             return pyBuildSimpleObject( iFunction(p1, p2, p3) );
00233         }
00234         LASS_UTIL_PYOBJECT_CALL_CATCH_AND_RETURN
00235     }
00236     
00237     template <typename Function, typename P1, typename P2, typename P3, typename P4>
00238     static PyObject* function( Function iFunction, P1 p1, P2 p2, P3 p3, P4 p4 )
00239     {
00240         try
00241         {
00242             return pyBuildSimpleObject( iFunction(p1, p2, p3, p4) );
00243         }
00244         LASS_UTIL_PYOBJECT_CALL_CATCH_AND_RETURN
00245     }
00246     
00247     template <typename Function, typename P1, typename P2, typename P3, typename P4, typename P5>
00248     static PyObject* function( Function iFunction, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5 )
00249     {
00250         try
00251         {
00252             return pyBuildSimpleObject( iFunction(p1, p2, p3, p4, p5) );
00253         }
00254         LASS_UTIL_PYOBJECT_CALL_CATCH_AND_RETURN
00255     }
00256     
00257     template <typename Function, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6>
00258     static PyObject* function( Function iFunction, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6 )
00259     {
00260         try
00261         {
00262             return pyBuildSimpleObject( iFunction(p1, p2, p3, p4, p5, p6) );
00263         }
00264         LASS_UTIL_PYOBJECT_CALL_CATCH_AND_RETURN
00265     }
00266     
00267     template <typename Function, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7>
00268     static PyObject* function( Function iFunction, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7 )
00269     {
00270         try
00271         {
00272             return pyBuildSimpleObject( iFunction(p1, p2, p3, p4, p5, p6, p7) );
00273         }
00274         LASS_UTIL_PYOBJECT_CALL_CATCH_AND_RETURN
00275     }
00276     
00277     template <typename Function, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8>
00278     static PyObject* function( Function iFunction, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7, P8 p8 )
00279     {
00280         try
00281         {
00282             return pyBuildSimpleObject( iFunction(p1, p2, p3, p4, p5, p6, p7, p8) );
00283         }
00284         LASS_UTIL_PYOBJECT_CALL_CATCH_AND_RETURN
00285     }
00286     
00287     template <typename Function, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9>
00288     static PyObject* function( Function iFunction, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7, P8 p8, P9 p9 )
00289     {
00290         try
00291         {
00292             return pyBuildSimpleObject( iFunction(p1, p2, p3, p4, p5, p6, p7, p8, p9) );
00293         }
00294         LASS_UTIL_PYOBJECT_CALL_CATCH_AND_RETURN
00295     }
00296     
00297     template <typename Function, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10>
00298     static PyObject* function( Function iFunction, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7, P8 p8, P9 p9, P10 p10 )
00299     {
00300         try
00301         {
00302             return pyBuildSimpleObject( iFunction(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10) );
00303         }
00304         LASS_UTIL_PYOBJECT_CALL_CATCH_AND_RETURN
00305     }
00306     
00307     template <typename Function, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10, typename P11>
00308     static PyObject* function( Function iFunction, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7, P8 p8, P9 p9, P10 p10, P11 p11 )
00309     {
00310         try
00311         {
00312             return pyBuildSimpleObject( iFunction(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11) );
00313         }
00314         LASS_UTIL_PYOBJECT_CALL_CATCH_AND_RETURN
00315     }
00316     
00317     template <typename Function, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10, typename P11, typename P12>
00318     static PyObject* function( Function iFunction, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7, P8 p8, P9 p9, P10 p10, P11 p11, P12 p12 )
00319     {
00320         try
00321         {
00322             return pyBuildSimpleObject( iFunction(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12) );
00323         }
00324         LASS_UTIL_PYOBJECT_CALL_CATCH_AND_RETURN
00325     }
00326     
00327     template <typename Function, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10, typename P11, typename P12, typename P13>
00328     static PyObject* function( Function iFunction, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7, P8 p8, P9 p9, P10 p10, P11 p11, P12 p12, P13 p13 )
00329     {
00330         try
00331         {
00332             return pyBuildSimpleObject( iFunction(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13) );
00333         }
00334         LASS_UTIL_PYOBJECT_CALL_CATCH_AND_RETURN
00335     }
00336     
00337     template <typename Function, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10, typename P11, typename P12, typename P13, typename P14>
00338     static PyObject* function( Function iFunction, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7, P8 p8, P9 p9, P10 p10, P11 p11, P12 p12, P13 p13, P14 p14 )
00339     {
00340         try
00341         {
00342             return pyBuildSimpleObject( iFunction(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14) );
00343         }
00344         LASS_UTIL_PYOBJECT_CALL_CATCH_AND_RETURN
00345     }
00346     
00347     template <typename Function, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10, typename P11, typename P12, typename P13, typename P14, typename P15>
00348     static PyObject* function( Function iFunction, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7, P8 p8, P9 p9, P10 p10, P11 p11, P12 p12, P13 p13, P14 p14, P15 p15 )
00349     {
00350         try
00351         {
00352             return pyBuildSimpleObject( iFunction(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15) );
00353         }
00354         LASS_UTIL_PYOBJECT_CALL_CATCH_AND_RETURN
00355     }
00356     
00357 
00358     // method
00359 
00360     template <typename CppClassPtr, typename Method>
00361     static PyObject* method( CppClassPtr iObject, Method iMethod )
00362     {
00363         try
00364         {
00365             return pyBuildSimpleObject( (iObject->*iMethod)() );
00366         }
00367         LASS_UTIL_PYOBJECT_CALL_CATCH_AND_RETURN
00368     };
00369     
00370     template <typename CppClassPtr, typename Method, typename P1>
00371     static PyObject* method( CppClassPtr iObject, Method iMethod, P1 p1 )
00372     {
00373         try
00374         {
00375             return pyBuildSimpleObject( (iObject->*iMethod)(p1) );
00376         }
00377         LASS_UTIL_PYOBJECT_CALL_CATCH_AND_RETURN
00378     }
00379     
00380     template <typename CppClassPtr, typename Method, typename P1, typename P2>
00381     static PyObject* method( CppClassPtr iObject, Method iMethod, P1 p1, P2 p2 )
00382     {
00383         try
00384         {
00385             return pyBuildSimpleObject( (iObject->*iMethod)(p1, p2) );
00386         }
00387         LASS_UTIL_PYOBJECT_CALL_CATCH_AND_RETURN
00388     }
00389     
00390     template <typename CppClassPtr, typename Method, typename P1, typename P2, typename P3>
00391     static PyObject* method( CppClassPtr iObject, Method iMethod, P1 p1, P2 p2, P3 p3 )
00392     {
00393         try
00394         {
00395             return pyBuildSimpleObject( (iObject->*iMethod)(p1, p2, p3) );
00396         }
00397         LASS_UTIL_PYOBJECT_CALL_CATCH_AND_RETURN
00398     }
00399     
00400     template <typename CppClassPtr, typename Method, typename P1, typename P2, typename P3, typename P4>
00401     static PyObject* method( CppClassPtr iObject, Method iMethod, P1 p1, P2 p2, P3 p3, P4 p4 )
00402     {
00403         try
00404         {
00405             return pyBuildSimpleObject( (iObject->*iMethod)(p1, p2, p3, p4) );
00406         }
00407         LASS_UTIL_PYOBJECT_CALL_CATCH_AND_RETURN
00408     }
00409     
00410     template <typename CppClassPtr, typename Method, typename P1, typename P2, typename P3, typename P4, typename P5>
00411     static PyObject* method( CppClassPtr iObject, Method iMethod, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5 )
00412     {
00413         try
00414         {
00415             return pyBuildSimpleObject( (iObject->*iMethod)(p1, p2, p3, p4, p5) );
00416         }
00417         LASS_UTIL_PYOBJECT_CALL_CATCH_AND_RETURN
00418     }
00419     
00420     template <typename CppClassPtr, typename Method, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6>
00421     static PyObject* method( CppClassPtr iObject, Method iMethod, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6 )
00422     {
00423         try
00424         {
00425             return pyBuildSimpleObject( (iObject->*iMethod)(p1, p2, p3, p4, p5, p6) );
00426         }
00427         LASS_UTIL_PYOBJECT_CALL_CATCH_AND_RETURN
00428     }
00429     
00430     template <typename CppClassPtr, typename Method, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7>
00431     static PyObject* method( CppClassPtr iObject, Method iMethod, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7 )
00432     {
00433         try
00434         {
00435             return pyBuildSimpleObject( (iObject->*iMethod)(p1, p2, p3, p4, p5, p6, p7) );
00436         }
00437         LASS_UTIL_PYOBJECT_CALL_CATCH_AND_RETURN
00438     }
00439     
00440     template <typename CppClassPtr, typename Method, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8>
00441     static PyObject* method( CppClassPtr iObject, Method iMethod, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7, P8 p8 )
00442     {
00443         try
00444         {
00445             return pyBuildSimpleObject( (iObject->*iMethod)(p1, p2, p3, p4, p5, p6, p7, p8) );
00446         }
00447         LASS_UTIL_PYOBJECT_CALL_CATCH_AND_RETURN
00448     }
00449     
00450     template <typename CppClassPtr, typename Method, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9>
00451     static PyObject* method( CppClassPtr iObject, Method iMethod, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7, P8 p8, P9 p9 )
00452     {
00453         try
00454         {
00455             return pyBuildSimpleObject( (iObject->*iMethod)(p1, p2, p3, p4, p5, p6, p7, p8, p9) );
00456         }
00457         LASS_UTIL_PYOBJECT_CALL_CATCH_AND_RETURN
00458     }
00459     
00460     template <typename CppClassPtr, typename Method, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10>
00461     static PyObject* method( CppClassPtr iObject, Method iMethod, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7, P8 p8, P9 p9, P10 p10 )
00462     {
00463         try
00464         {
00465             return pyBuildSimpleObject( (iObject->*iMethod)(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10) );
00466         }
00467         LASS_UTIL_PYOBJECT_CALL_CATCH_AND_RETURN
00468     }
00469     
00470     template <typename CppClassPtr, typename Method, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10, typename P11>
00471     static PyObject* method( CppClassPtr iObject, Method iMethod, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7, P8 p8, P9 p9, P10 p10, P11 p11 )
00472     {
00473         try
00474         {
00475             return pyBuildSimpleObject( (iObject->*iMethod)(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11) );
00476         }
00477         LASS_UTIL_PYOBJECT_CALL_CATCH_AND_RETURN
00478     }
00479     
00480     template <typename CppClassPtr, typename Method, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10, typename P11, typename P12>
00481     static PyObject* method( CppClassPtr iObject, Method iMethod, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7, P8 p8, P9 p9, P10 p10, P11 p11, P12 p12 )
00482     {
00483         try
00484         {
00485             return pyBuildSimpleObject( (iObject->*iMethod)(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12) );
00486         }
00487         LASS_UTIL_PYOBJECT_CALL_CATCH_AND_RETURN
00488     }
00489     
00490     template <typename CppClassPtr, typename Method, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10, typename P11, typename P12, typename P13>
00491     static PyObject* method( CppClassPtr iObject, Method iMethod, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7, P8 p8, P9 p9, P10 p10, P11 p11, P12 p12, P13 p13 )
00492     {
00493         try
00494         {
00495             return pyBuildSimpleObject( (iObject->*iMethod)(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13) );
00496         }
00497         LASS_UTIL_PYOBJECT_CALL_CATCH_AND_RETURN
00498     }
00499     
00500     template <typename CppClassPtr, typename Method, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10, typename P11, typename P12, typename P13, typename P14>
00501     static PyObject* method( CppClassPtr iObject, Method iMethod, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7, P8 p8, P9 p9, P10 p10, P11 p11, P12 p12, P13 p13, P14 p14 )
00502     {
00503         try
00504         {
00505             return pyBuildSimpleObject( (iObject->*iMethod)(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14) );
00506         }
00507         LASS_UTIL_PYOBJECT_CALL_CATCH_AND_RETURN
00508     }
00509     
00510     template <typename CppClassPtr, typename Method, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10, typename P11, typename P12, typename P13, typename P14, typename P15>
00511     static PyObject* method( CppClassPtr iObject, Method iMethod, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7, P8 p8, P9 p9, P10 p10, P11 p11, P12 p12, P13 p13, P14 p14, P15 p15 )
00512     {
00513         try
00514         {
00515             return pyBuildSimpleObject( (iObject->*iMethod)(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15) );
00516         }
00517         LASS_UTIL_PYOBJECT_CALL_CATCH_AND_RETURN
00518     }
00519     
00520 };
00521 
00522 /** specialisation for functions without return value, calls function and returns Py_None.
00523  */
00524 template <>
00525 struct Caller<void>
00526 {
00527     // free functions
00528 
00529     template <typename Function>
00530     static PyObject* function( Function iFunction )
00531     {
00532         try
00533         {
00534             iFunction();
00535         }
00536         LASS_UTIL_PYOBJECT_CALL_CATCH_AND_RETURN
00537         Py_INCREF( Py_None );
00538         return Py_None;
00539     };
00540     
00541     template <typename Function, typename P1>
00542     static PyObject* function( Function iFunction, P1 p1 )
00543     {
00544         try
00545         {
00546             iFunction(p1);
00547         }
00548         LASS_UTIL_PYOBJECT_CALL_CATCH_AND_RETURN
00549         Py_INCREF( Py_None );
00550         return Py_None;
00551     }
00552     
00553     template <typename Function, typename P1, typename P2>
00554     static PyObject* function( Function iFunction, P1 p1, P2 p2 )
00555     {
00556         try
00557         {
00558             iFunction(p1, p2);
00559         }
00560         LASS_UTIL_PYOBJECT_CALL_CATCH_AND_RETURN
00561         Py_INCREF( Py_None );
00562         return Py_None;
00563     }
00564     
00565     template <typename Function, typename P1, typename P2, typename P3>
00566     static PyObject* function( Function iFunction, P1 p1, P2 p2, P3 p3 )
00567     {
00568         try
00569         {
00570             iFunction(p1, p2, p3);
00571         }
00572         LASS_UTIL_PYOBJECT_CALL_CATCH_AND_RETURN
00573         Py_INCREF( Py_None );
00574         return Py_None;
00575     }
00576     
00577     template <typename Function, typename P1, typename P2, typename P3, typename P4>
00578     static PyObject* function( Function iFunction, P1 p1, P2 p2, P3 p3, P4 p4 )
00579     {
00580         try
00581         {
00582             iFunction(p1, p2, p3, p4);
00583         }
00584         LASS_UTIL_PYOBJECT_CALL_CATCH_AND_RETURN
00585         Py_INCREF( Py_None );
00586         return Py_None;
00587     }
00588     
00589     template <typename Function, typename P1, typename P2, typename P3, typename P4, typename P5>
00590     static PyObject* function( Function iFunction, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5 )
00591     {
00592         try
00593         {
00594             iFunction(p1, p2, p3, p4, p5);
00595         }
00596         LASS_UTIL_PYOBJECT_CALL_CATCH_AND_RETURN
00597         Py_INCREF( Py_None );
00598         return Py_None;
00599     }
00600     
00601     template <typename Function, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6>
00602     static PyObject* function( Function iFunction, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6 )
00603     {
00604         try
00605         {
00606             iFunction(p1, p2, p3, p4, p5, p6);
00607         }
00608         LASS_UTIL_PYOBJECT_CALL_CATCH_AND_RETURN
00609         Py_INCREF( Py_None );
00610         return Py_None;
00611     }
00612     
00613     template <typename Function, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7>
00614     static PyObject* function( Function iFunction, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7 )
00615     {
00616         try
00617         {
00618             iFunction(p1, p2, p3, p4, p5, p6, p7);
00619         }
00620         LASS_UTIL_PYOBJECT_CALL_CATCH_AND_RETURN
00621         Py_INCREF( Py_None );
00622         return Py_None;
00623     }
00624     
00625     template <typename Function, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8>
00626     static PyObject* function( Function iFunction, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7, P8 p8 )
00627     {
00628         try
00629         {
00630             iFunction(p1, p2, p3, p4, p5, p6, p7, p8);
00631         }
00632         LASS_UTIL_PYOBJECT_CALL_CATCH_AND_RETURN
00633         Py_INCREF( Py_None );
00634         return Py_None;
00635     }
00636     
00637     template <typename Function, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9>
00638     static PyObject* function( Function iFunction, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7, P8 p8, P9 p9 )
00639     {
00640         try
00641         {
00642             iFunction(p1, p2, p3, p4, p5, p6, p7, p8, p9);
00643         }
00644         LASS_UTIL_PYOBJECT_CALL_CATCH_AND_RETURN
00645         Py_INCREF( Py_None );
00646         return Py_None;
00647     }
00648     
00649     template <typename Function, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10>
00650     static PyObject* function( Function iFunction, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7, P8 p8, P9 p9, P10 p10 )
00651     {
00652         try
00653         {
00654             iFunction(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10);
00655         }
00656         LASS_UTIL_PYOBJECT_CALL_CATCH_AND_RETURN
00657         Py_INCREF( Py_None );
00658         return Py_None;
00659     }
00660     
00661     template <typename Function, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10, typename P11>
00662     static PyObject* function( Function iFunction, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7, P8 p8, P9 p9, P10 p10, P11 p11 )
00663     {
00664         try
00665         {
00666             iFunction(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11);
00667         }
00668         LASS_UTIL_PYOBJECT_CALL_CATCH_AND_RETURN
00669         Py_INCREF( Py_None );
00670         return Py_None;
00671     }
00672     
00673     template <typename Function, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10, typename P11, typename P12>
00674     static PyObject* function( Function iFunction, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7, P8 p8, P9 p9, P10 p10, P11 p11, P12 p12 )
00675     {
00676         try
00677         {
00678             iFunction(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12);
00679         }
00680         LASS_UTIL_PYOBJECT_CALL_CATCH_AND_RETURN
00681         Py_INCREF( Py_None );
00682         return Py_None;
00683     }
00684     
00685     template <typename Function, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10, typename P11, typename P12, typename P13>
00686     static PyObject* function( Function iFunction, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7, P8 p8, P9 p9, P10 p10, P11 p11, P12 p12, P13 p13 )
00687     {
00688         try
00689         {
00690             iFunction(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13);
00691         }
00692         LASS_UTIL_PYOBJECT_CALL_CATCH_AND_RETURN
00693         Py_INCREF( Py_None );
00694         return Py_None;
00695     }
00696     
00697     template <typename Function, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10, typename P11, typename P12, typename P13, typename P14>
00698     static PyObject* function( Function iFunction, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7, P8 p8, P9 p9, P10 p10, P11 p11, P12 p12, P13 p13, P14 p14 )
00699     {
00700         try
00701         {
00702             iFunction(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14);
00703         }
00704         LASS_UTIL_PYOBJECT_CALL_CATCH_AND_RETURN
00705         Py_INCREF( Py_None );
00706         return Py_None;
00707     }
00708     
00709     template <typename Function, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10, typename P11, typename P12, typename P13, typename P14, typename P15>
00710     static PyObject* function( Function iFunction, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7, P8 p8, P9 p9, P10 p10, P11 p11, P12 p12, P13 p13, P14 p14, P15 p15 )
00711     {
00712         try
00713         {
00714             iFunction(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15);
00715         }
00716         LASS_UTIL_PYOBJECT_CALL_CATCH_AND_RETURN
00717         Py_INCREF( Py_None );
00718         return Py_None;
00719     }
00720     
00721 
00722     // methods
00723 
00724     template <typename CppClassPtr, typename Method>
00725     static PyObject* method( CppClassPtr iObject, Method iMethod )
00726     {
00727         try
00728         {
00729             (iObject->*iMethod)();
00730         }
00731         LASS_UTIL_PYOBJECT_CALL_CATCH_AND_RETURN
00732         Py_INCREF( Py_None );
00733         return Py_None;
00734     };
00735     
00736     template <typename CppClassPtr, typename Method, typename P1>
00737     static PyObject* method( CppClassPtr iObject, Method iMethod, P1 p1 )
00738     {
00739         try
00740         {
00741             (iObject->*iMethod)(p1);
00742         }
00743         LASS_UTIL_PYOBJECT_CALL_CATCH_AND_RETURN
00744         Py_INCREF( Py_None );
00745         return Py_None;
00746     }
00747     
00748     template <typename CppClassPtr, typename Method, typename P1, typename P2>
00749     static PyObject* method( CppClassPtr iObject, Method iMethod, P1 p1, P2 p2 )
00750     {
00751         try
00752         {
00753             (iObject->*iMethod)(p1, p2);
00754         }
00755         LASS_UTIL_PYOBJECT_CALL_CATCH_AND_RETURN
00756         Py_INCREF( Py_None );
00757         return Py_None;
00758     }
00759     
00760     template <typename CppClassPtr, typename Method, typename P1, typename P2, typename P3>
00761     static PyObject* method( CppClassPtr iObject, Method iMethod, P1 p1, P2 p2, P3 p3 )
00762     {
00763         try
00764         {
00765             (iObject->*iMethod)(p1, p2, p3);
00766         }
00767         LASS_UTIL_PYOBJECT_CALL_CATCH_AND_RETURN
00768         Py_INCREF( Py_None );
00769         return Py_None;
00770     }
00771     
00772     template <typename CppClassPtr, typename Method, typename P1, typename P2, typename P3, typename P4>
00773     static PyObject* method( CppClassPtr iObject, Method iMethod, P1 p1, P2 p2, P3 p3, P4 p4 )
00774     {
00775         try
00776         {
00777             (iObject->*iMethod)(p1, p2, p3, p4);
00778         }
00779         LASS_UTIL_PYOBJECT_CALL_CATCH_AND_RETURN
00780         Py_INCREF( Py_None );
00781         return Py_None;
00782     }
00783     
00784     template <typename CppClassPtr, typename Method, typename P1, typename P2, typename P3, typename P4, typename P5>
00785     static PyObject* method( CppClassPtr iObject, Method iMethod, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5 )
00786     {
00787         try
00788         {
00789             (iObject->*iMethod)(p1, p2, p3, p4, p5);
00790         }
00791         LASS_UTIL_PYOBJECT_CALL_CATCH_AND_RETURN
00792         Py_INCREF( Py_None );
00793         return Py_None;
00794     }
00795     
00796     template <typename CppClassPtr, typename Method, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6>
00797     static PyObject* method( CppClassPtr iObject, Method iMethod, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6 )
00798     {
00799         try
00800         {
00801             (iObject->*iMethod)(p1, p2, p3, p4, p5, p6);
00802         }
00803         LASS_UTIL_PYOBJECT_CALL_CATCH_AND_RETURN
00804         Py_INCREF( Py_None );
00805         return Py_None;
00806     }
00807     
00808     template <typename CppClassPtr, typename Method, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7>
00809     static PyObject* method( CppClassPtr iObject, Method iMethod, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7 )
00810     {
00811         try
00812         {
00813             (iObject->*iMethod)(p1, p2, p3, p4, p5, p6, p7);
00814         }
00815         LASS_UTIL_PYOBJECT_CALL_CATCH_AND_RETURN
00816         Py_INCREF( Py_None );
00817         return Py_None;
00818     }
00819     
00820     template <typename CppClassPtr, typename Method, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8>
00821     static PyObject* method( CppClassPtr iObject, Method iMethod, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7, P8 p8 )
00822     {
00823         try
00824         {
00825             (iObject->*iMethod)(p1, p2, p3, p4, p5, p6, p7, p8);
00826         }
00827         LASS_UTIL_PYOBJECT_CALL_CATCH_AND_RETURN
00828         Py_INCREF( Py_None );
00829         return Py_None;
00830     }
00831     
00832     template <typename CppClassPtr, typename Method, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9>
00833     static PyObject* method( CppClassPtr iObject, Method iMethod, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7, P8 p8, P9 p9 )
00834     {
00835         try
00836         {
00837             (iObject->*iMethod)(p1, p2, p3, p4, p5, p6, p7, p8, p9);
00838         }
00839         LASS_UTIL_PYOBJECT_CALL_CATCH_AND_RETURN
00840         Py_INCREF( Py_None );
00841         return Py_None;
00842     }
00843     
00844     template <typename CppClassPtr, typename Method, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10>
00845     static PyObject* method( CppClassPtr iObject, Method iMethod, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7, P8 p8, P9 p9, P10 p10 )
00846     {
00847         try
00848         {
00849             (iObject->*iMethod)(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10);
00850         }
00851         LASS_UTIL_PYOBJECT_CALL_CATCH_AND_RETURN
00852         Py_INCREF( Py_None );
00853         return Py_None;
00854     }
00855     
00856     template <typename CppClassPtr, typename Method, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10, typename P11>
00857     static PyObject* method( CppClassPtr iObject, Method iMethod, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7, P8 p8, P9 p9, P10 p10, P11 p11 )
00858     {
00859         try
00860         {
00861             (iObject->*iMethod)(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11);
00862         }
00863         LASS_UTIL_PYOBJECT_CALL_CATCH_AND_RETURN
00864         Py_INCREF( Py_None );
00865         return Py_None;
00866     }
00867     
00868     template <typename CppClassPtr, typename Method, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10, typename P11, typename P12>
00869     static PyObject* method( CppClassPtr iObject, Method iMethod, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7, P8 p8, P9 p9, P10 p10, P11 p11, P12 p12 )
00870     {
00871         try
00872         {
00873             (iObject->*iMethod)(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12);
00874         }
00875         LASS_UTIL_PYOBJECT_CALL_CATCH_AND_RETURN
00876         Py_INCREF( Py_None );
00877         return Py_None;
00878     }
00879     
00880     template <typename CppClassPtr, typename Method, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10, typename P11, typename P12, typename P13>
00881     static PyObject* method( CppClassPtr iObject, Method iMethod, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7, P8 p8, P9 p9, P10 p10, P11 p11, P12 p12, P13 p13 )
00882     {
00883         try
00884         {
00885             (iObject->*iMethod)(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13);
00886         }
00887         LASS_UTIL_PYOBJECT_CALL_CATCH_AND_RETURN
00888         Py_INCREF( Py_None );
00889         return Py_None;
00890     }
00891     
00892     template <typename CppClassPtr, typename Method, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10, typename P11, typename P12, typename P13, typename P14>
00893     static PyObject* method( CppClassPtr iObject, Method iMethod, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7, P8 p8, P9 p9, P10 p10, P11 p11, P12 p12, P13 p13, P14 p14 )
00894     {
00895         try
00896         {
00897             (iObject->*iMethod)(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14);
00898         }
00899         LASS_UTIL_PYOBJECT_CALL_CATCH_AND_RETURN
00900         Py_INCREF( Py_None );
00901         return Py_None;
00902     }
00903     
00904     template <typename CppClassPtr, typename Method, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10, typename P11, typename P12, typename P13, typename P14, typename P15>
00905     static PyObject* method( CppClassPtr iObject, Method iMethod, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7, P8 p8, P9 p9, P10 p10, P11 p11, P12 p12, P13 p13, P14 p14, P15 p15 )
00906     {
00907         try
00908         {
00909             (iObject->*iMethod)(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15);
00910         }
00911         LASS_UTIL_PYOBJECT_CALL_CATCH_AND_RETURN
00912         Py_INCREF( Py_None );
00913         return Py_None;
00914     }
00915     
00916 };
00917 
00918 
00919 
00920 // --- free functions ------------------------------------------------------------------------------
00921 
00922 /** calls C++ function without arguments
00923  */
00924 template <typename R>
00925 PyObject* callFunction( PyObject* args, R (*iFunction)() )
00926 {
00927     typedef R(*TFunction)();
00928     if( decodeTuple(args) != 0 )
00929     {
00930         return 0;
00931     }
00932     return Caller<R>::template function<TFunction>( iFunction );
00933 }
00934 
00935 /** calls C++ function with 1 arguments, translated from python arguments
00936  */
00937 template <typename R, typename P1>
00938 PyObject* callFunction( PyObject* args, R (*iFunction)(P1) )
00939 {
00940     typedef R (*TFunction)(P1);
00941     typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
00942     
00943     if( decodeTuple<S1>( args, p1 ) != 0 )
00944     {
00945         return 0;
00946     }
00947     return Caller<R>::template function<TFunction, P1>( 
00948         iFunction, TArg1::arg(p1) );
00949 }
00950 
00951 /** calls C++ function with 2 arguments, translated from python arguments
00952  */
00953 template <typename R, typename P1, typename P2>
00954 PyObject* callFunction( PyObject* args, R (*iFunction)(P1, P2) )
00955 {
00956     typedef R (*TFunction)(P1, P2);
00957     typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
00958     typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
00959     
00960     if( decodeTuple<S1, S2>( args, p1, p2 ) != 0 )
00961     {
00962         return 0;
00963     }
00964     return Caller<R>::template function<TFunction, P1, P2>( 
00965         iFunction, TArg1::arg(p1), TArg2::arg(p2) );
00966 }
00967 
00968 /** calls C++ function with 3 arguments, translated from python arguments
00969  */
00970 template <typename R, typename P1, typename P2, typename P3>
00971 PyObject* callFunction( PyObject* args, R (*iFunction)(P1, P2, P3) )
00972 {
00973     typedef R (*TFunction)(P1, P2, P3);
00974     typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
00975     typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
00976     typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
00977     
00978     if( decodeTuple<S1, S2, S3>( args, p1, p2, p3 ) != 0 )
00979     {
00980         return 0;
00981     }
00982     return Caller<R>::template function<TFunction, P1, P2, P3>( 
00983         iFunction, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3) );
00984 }
00985 
00986 /** calls C++ function with 4 arguments, translated from python arguments
00987  */
00988 template <typename R, typename P1, typename P2, typename P3, typename P4>
00989 PyObject* callFunction( PyObject* args, R (*iFunction)(P1, P2, P3, P4) )
00990 {
00991     typedef R (*TFunction)(P1, P2, P3, P4);
00992     typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
00993     typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
00994     typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
00995     typedef ArgumentTraits<P4> TArg4; typedef typename TArg4::TStorage S4; S4 p4;
00996     
00997     if( decodeTuple<S1, S2, S3, S4>( args, p1, p2, p3, p4 ) != 0 )
00998     {
00999         return 0;
01000     }
01001     return Caller<R>::template function<TFunction, P1, P2, P3, P4>( 
01002         iFunction, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4) );
01003 }
01004 
01005 /** calls C++ function with 5 arguments, translated from python arguments
01006  */
01007 template <typename R, typename P1, typename P2, typename P3, typename P4, typename P5>
01008 PyObject* callFunction( PyObject* args, R (*iFunction)(P1, P2, P3, P4, P5) )
01009 {
01010     typedef R (*TFunction)(P1, P2, P3, P4, P5);
01011     typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
01012     typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
01013     typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
01014     typedef ArgumentTraits<P4> TArg4; typedef typename TArg4::TStorage S4; S4 p4;
01015     typedef ArgumentTraits<P5> TArg5; typedef typename TArg5::TStorage S5; S5 p5;
01016     
01017     if( decodeTuple<S1, S2, S3, S4, S5>( args, p1, p2, p3, p4, p5 ) != 0 )
01018     {
01019         return 0;
01020     }
01021     return Caller<R>::template function<TFunction, P1, P2, P3, P4, P5>( 
01022         iFunction, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4), TArg5::arg(p5) );
01023 }
01024 
01025 /** calls C++ function with 6 arguments, translated from python arguments
01026  */
01027 template <typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6>
01028 PyObject* callFunction( PyObject* args, R (*iFunction)(P1, P2, P3, P4, P5, P6) )
01029 {
01030     typedef R (*TFunction)(P1, P2, P3, P4, P5, P6);
01031     typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
01032     typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
01033     typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
01034     typedef ArgumentTraits<P4> TArg4; typedef typename TArg4::TStorage S4; S4 p4;
01035     typedef ArgumentTraits<P5> TArg5; typedef typename TArg5::TStorage S5; S5 p5;
01036     typedef ArgumentTraits<P6> TArg6; typedef typename TArg6::TStorage S6; S6 p6;
01037     
01038     if( decodeTuple<S1, S2, S3, S4, S5, S6>( args, p1, p2, p3, p4, p5, p6 ) != 0 )
01039     {
01040         return 0;
01041     }
01042     return Caller<R>::template function<TFunction, P1, P2, P3, P4, P5, P6>( 
01043         iFunction, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4), TArg5::arg(p5), TArg6::arg(p6) );
01044 }
01045 
01046 /** calls C++ function with 7 arguments, translated from python arguments
01047  */
01048 template <typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7>
01049 PyObject* callFunction( PyObject* args, R (*iFunction)(P1, P2, P3, P4, P5, P6, P7) )
01050 {
01051     typedef R (*TFunction)(P1, P2, P3, P4, P5, P6, P7);
01052     typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
01053     typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
01054     typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
01055     typedef ArgumentTraits<P4> TArg4; typedef typename TArg4::TStorage S4; S4 p4;
01056     typedef ArgumentTraits<P5> TArg5; typedef typename TArg5::TStorage S5; S5 p5;
01057     typedef ArgumentTraits<P6> TArg6; typedef typename TArg6::TStorage S6; S6 p6;
01058     typedef ArgumentTraits<P7> TArg7; typedef typename TArg7::TStorage S7; S7 p7;
01059     
01060     if( decodeTuple<S1, S2, S3, S4, S5, S6, S7>( args, p1, p2, p3, p4, p5, p6, p7 ) != 0 )
01061     {
01062         return 0;
01063     }
01064     return Caller<R>::template function<TFunction, P1, P2, P3, P4, P5, P6, P7>( 
01065         iFunction, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4), TArg5::arg(p5), TArg6::arg(p6), TArg7::arg(p7) );
01066 }
01067 
01068 /** calls C++ function with 8 arguments, translated from python arguments
01069  */
01070 template <typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8>
01071 PyObject* callFunction( PyObject* args, R (*iFunction)(P1, P2, P3, P4, P5, P6, P7, P8) )
01072 {
01073     typedef R (*TFunction)(P1, P2, P3, P4, P5, P6, P7, P8);
01074     typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
01075     typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
01076     typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
01077     typedef ArgumentTraits<P4> TArg4; typedef typename TArg4::TStorage S4; S4 p4;
01078     typedef ArgumentTraits<P5> TArg5; typedef typename TArg5::TStorage S5; S5 p5;
01079     typedef ArgumentTraits<P6> TArg6; typedef typename TArg6::TStorage S6; S6 p6;
01080     typedef ArgumentTraits<P7> TArg7; typedef typename TArg7::TStorage S7; S7 p7;
01081     typedef ArgumentTraits<P8> TArg8; typedef typename TArg8::TStorage S8; S8 p8;
01082     
01083     if( decodeTuple<S1, S2, S3, S4, S5, S6, S7, S8>( args, p1, p2, p3, p4, p5, p6, p7, p8 ) != 0 )
01084     {
01085         return 0;
01086     }
01087     return Caller<R>::template function<TFunction, P1, P2, P3, P4, P5, P6, P7, P8>( 
01088         iFunction, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4), TArg5::arg(p5), TArg6::arg(p6), TArg7::arg(p7), TArg8::arg(p8) );
01089 }
01090 
01091 /** calls C++ function with 9 arguments, translated from python arguments
01092  */
01093 template <typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9>
01094 PyObject* callFunction( PyObject* args, R (*iFunction)(P1, P2, P3, P4, P5, P6, P7, P8, P9) )
01095 {
01096     typedef R (*TFunction)(P1, P2, P3, P4, P5, P6, P7, P8, P9);
01097     typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
01098     typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
01099     typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
01100     typedef ArgumentTraits<P4> TArg4; typedef typename TArg4::TStorage S4; S4 p4;
01101     typedef ArgumentTraits<P5> TArg5; typedef typename TArg5::TStorage S5; S5 p5;
01102     typedef ArgumentTraits<P6> TArg6; typedef typename TArg6::TStorage S6; S6 p6;
01103     typedef ArgumentTraits<P7> TArg7; typedef typename TArg7::TStorage S7; S7 p7;
01104     typedef ArgumentTraits<P8> TArg8; typedef typename TArg8::TStorage S8; S8 p8;
01105     typedef ArgumentTraits<P9> TArg9; typedef typename TArg9::TStorage S9; S9 p9;
01106     
01107     if( decodeTuple<S1, S2, S3, S4, S5, S6, S7, S8, S9>( args, p1, p2, p3, p4, p5, p6, p7, p8, p9 ) != 0 )
01108     {
01109         return 0;
01110     }
01111     return Caller<R>::template function<TFunction, P1, P2, P3, P4, P5, P6, P7, P8, P9>( 
01112         iFunction, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4), TArg5::arg(p5), TArg6::arg(p6), TArg7::arg(p7), TArg8::arg(p8), TArg9::arg(p9) );
01113 }
01114 
01115 /** calls C++ function with 10 arguments, translated from python arguments
01116  */
01117 template <typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10>
01118 PyObject* callFunction( PyObject* args, R (*iFunction)(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10) )
01119 {
01120     typedef R (*TFunction)(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10);
01121     typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
01122     typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
01123     typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
01124     typedef ArgumentTraits<P4> TArg4; typedef typename TArg4::TStorage S4; S4 p4;
01125     typedef ArgumentTraits<P5> TArg5; typedef typename TArg5::TStorage S5; S5 p5;
01126     typedef ArgumentTraits<P6> TArg6; typedef typename TArg6::TStorage S6; S6 p6;
01127     typedef ArgumentTraits<P7> TArg7; typedef typename TArg7::TStorage S7; S7 p7;
01128     typedef ArgumentTraits<P8> TArg8; typedef typename TArg8::TStorage S8; S8 p8;
01129     typedef ArgumentTraits<P9> TArg9; typedef typename TArg9::TStorage S9; S9 p9;
01130     typedef ArgumentTraits<P10> TArg10; typedef typename TArg10::TStorage S10; S10 p10;
01131     
01132     if( decodeTuple<S1, S2, S3, S4, S5, S6, S7, S8, S9, S10>( args, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10 ) != 0 )
01133     {
01134         return 0;
01135     }
01136     return Caller<R>::template function<TFunction, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10>( 
01137         iFunction, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4), TArg5::arg(p5), TArg6::arg(p6), TArg7::arg(p7), TArg8::arg(p8), TArg9::arg(p9), TArg10::arg(p10) );
01138 }
01139 
01140 /** calls C++ function with 11 arguments, translated from python arguments
01141  */
01142 template <typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10, typename P11>
01143 PyObject* callFunction( PyObject* args, R (*iFunction)(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11) )
01144 {
01145     typedef R (*TFunction)(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11);
01146     typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
01147     typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
01148     typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
01149     typedef ArgumentTraits<P4> TArg4; typedef typename TArg4::TStorage S4; S4 p4;
01150     typedef ArgumentTraits<P5> TArg5; typedef typename TArg5::TStorage S5; S5 p5;
01151     typedef ArgumentTraits<P6> TArg6; typedef typename TArg6::TStorage S6; S6 p6;
01152     typedef ArgumentTraits<P7> TArg7; typedef typename TArg7::TStorage S7; S7 p7;
01153     typedef ArgumentTraits<P8> TArg8; typedef typename TArg8::TStorage S8; S8 p8;
01154     typedef ArgumentTraits<P9> TArg9; typedef typename TArg9::TStorage S9; S9 p9;
01155     typedef ArgumentTraits<P10> TArg10; typedef typename TArg10::TStorage S10; S10 p10;
01156     typedef ArgumentTraits<P11> TArg11; typedef typename TArg11::TStorage S11; S11 p11;
01157     
01158     if( decodeTuple<S1, S2, S3, S4, S5, S6, S7, S8, S9, S10, S11>( args, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11 ) != 0 )
01159     {
01160         return 0;
01161     }
01162     return Caller<R>::template function<TFunction, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11>( 
01163         iFunction, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4), TArg5::arg(p5), TArg6::arg(p6), TArg7::arg(p7), TArg8::arg(p8), TArg9::arg(p9), TArg10::arg(p10), TArg11::arg(p11) );
01164 }
01165 
01166 /** calls C++ function with 12 arguments, translated from python arguments
01167  */
01168 template <typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10, typename P11, typename P12>
01169 PyObject* callFunction( PyObject* args, R (*iFunction)(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12) )
01170 {
01171     typedef R (*TFunction)(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12);
01172     typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
01173     typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
01174     typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
01175     typedef ArgumentTraits<P4> TArg4; typedef typename TArg4::TStorage S4; S4 p4;
01176     typedef ArgumentTraits<P5> TArg5; typedef typename TArg5::TStorage S5; S5 p5;
01177     typedef ArgumentTraits<P6> TArg6; typedef typename TArg6::TStorage S6; S6 p6;
01178     typedef ArgumentTraits<P7> TArg7; typedef typename TArg7::TStorage S7; S7 p7;
01179     typedef ArgumentTraits<P8> TArg8; typedef typename TArg8::TStorage S8; S8 p8;
01180     typedef ArgumentTraits<P9> TArg9; typedef typename TArg9::TStorage S9; S9 p9;
01181     typedef ArgumentTraits<P10> TArg10; typedef typename TArg10::TStorage S10; S10 p10;
01182     typedef ArgumentTraits<P11> TArg11; typedef typename TArg11::TStorage S11; S11 p11;
01183     typedef ArgumentTraits<P12> TArg12; typedef typename TArg12::TStorage S12; S12 p12;
01184     
01185     if( decodeTuple<S1, S2, S3, S4, S5, S6, S7, S8, S9, S10, S11, S12>( args, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12 ) != 0 )
01186     {
01187         return 0;
01188     }
01189     return Caller<R>::template function<TFunction, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12>( 
01190         iFunction, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4), TArg5::arg(p5), TArg6::arg(p6), TArg7::arg(p7), TArg8::arg(p8), TArg9::arg(p9), TArg10::arg(p10), TArg11::arg(p11), TArg12::arg(p12) );
01191 }
01192 
01193 /** calls C++ function with 13 arguments, translated from python arguments
01194  */
01195 template <typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10, typename P11, typename P12, typename P13>
01196 PyObject* callFunction( PyObject* args, R (*iFunction)(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13) )
01197 {
01198     typedef R (*TFunction)(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13);
01199     typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
01200     typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
01201     typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
01202     typedef ArgumentTraits<P4> TArg4; typedef typename TArg4::TStorage S4; S4 p4;
01203     typedef ArgumentTraits<P5> TArg5; typedef typename TArg5::TStorage S5; S5 p5;
01204     typedef ArgumentTraits<P6> TArg6; typedef typename TArg6::TStorage S6; S6 p6;
01205     typedef ArgumentTraits<P7> TArg7; typedef typename TArg7::TStorage S7; S7 p7;
01206     typedef ArgumentTraits<P8> TArg8; typedef typename TArg8::TStorage S8; S8 p8;
01207     typedef ArgumentTraits<P9> TArg9; typedef typename TArg9::TStorage S9; S9 p9;
01208     typedef ArgumentTraits<P10> TArg10; typedef typename TArg10::TStorage S10; S10 p10;
01209     typedef ArgumentTraits<P11> TArg11; typedef typename TArg11::TStorage S11; S11 p11;
01210     typedef ArgumentTraits<P12> TArg12; typedef typename TArg12::TStorage S12; S12 p12;
01211     typedef ArgumentTraits<P13> TArg13; typedef typename TArg13::TStorage S13; S13 p13;
01212     
01213     if( decodeTuple<S1, S2, S3, S4, S5, S6, S7, S8, S9, S10, S11, S12, S13>( args, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13 ) != 0 )
01214     {
01215         return 0;
01216     }
01217     return Caller<R>::template function<TFunction, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13>( 
01218         iFunction, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4), TArg5::arg(p5), TArg6::arg(p6), TArg7::arg(p7), TArg8::arg(p8), TArg9::arg(p9), TArg10::arg(p10), TArg11::arg(p11), TArg12::arg(p12), TArg13::arg(p13) );
01219 }
01220 
01221 /** calls C++ function with 14 arguments, translated from python arguments
01222  */
01223 template <typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10, typename P11, typename P12, typename P13, typename P14>
01224 PyObject* callFunction( PyObject* args, R (*iFunction)(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14) )
01225 {
01226     typedef R (*TFunction)(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14);
01227     typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
01228     typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
01229     typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
01230     typedef ArgumentTraits<P4> TArg4; typedef typename TArg4::TStorage S4; S4 p4;
01231     typedef ArgumentTraits<P5> TArg5; typedef typename TArg5::TStorage S5; S5 p5;
01232     typedef ArgumentTraits<P6> TArg6; typedef typename TArg6::TStorage S6; S6 p6;
01233     typedef ArgumentTraits<P7> TArg7; typedef typename TArg7::TStorage S7; S7 p7;
01234     typedef ArgumentTraits<P8> TArg8; typedef typename TArg8::TStorage S8; S8 p8;
01235     typedef ArgumentTraits<P9> TArg9; typedef typename TArg9::TStorage S9; S9 p9;
01236     typedef ArgumentTraits<P10> TArg10; typedef typename TArg10::TStorage S10; S10 p10;
01237     typedef ArgumentTraits<P11> TArg11; typedef typename TArg11::TStorage S11; S11 p11;
01238     typedef ArgumentTraits<P12> TArg12; typedef typename TArg12::TStorage S12; S12 p12;
01239     typedef ArgumentTraits<P13> TArg13; typedef typename TArg13::TStorage S13; S13 p13;
01240     typedef ArgumentTraits<P14> TArg14; typedef typename TArg14::TStorage S14; S14 p14;
01241     
01242     if( decodeTuple<S1, S2, S3, S4, S5, S6, S7, S8, S9, S10, S11, S12, S13, S14>( args, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14 ) != 0 )
01243     {
01244         return 0;
01245     }
01246     return Caller<R>::template function<TFunction, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14>( 
01247         iFunction, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4), TArg5::arg(p5), TArg6::arg(p6), TArg7::arg(p7), TArg8::arg(p8), TArg9::arg(p9), TArg10::arg(p10), TArg11::arg(p11), TArg12::arg(p12), TArg13::arg(p13), TArg14::arg(p14) );
01248 }
01249 
01250 /** calls C++ function with 15 arguments, translated from python arguments
01251  */
01252 template <typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10, typename P11, typename P12, typename P13, typename P14, typename P15>
01253 PyObject* callFunction( PyObject* args, R (*iFunction)(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15) )
01254 {
01255     typedef R (*TFunction)(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15);
01256     typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
01257     typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
01258     typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
01259     typedef ArgumentTraits<P4> TArg4; typedef typename TArg4::TStorage S4; S4 p4;
01260     typedef ArgumentTraits<P5> TArg5; typedef typename TArg5::TStorage S5; S5 p5;
01261     typedef ArgumentTraits<P6> TArg6; typedef typename TArg6::TStorage S6; S6 p6;
01262     typedef ArgumentTraits<P7> TArg7; typedef typename TArg7::TStorage S7; S7 p7;
01263     typedef ArgumentTraits<P8> TArg8; typedef typename TArg8::TStorage S8; S8 p8;
01264     typedef ArgumentTraits<P9> TArg9; typedef typename TArg9::TStorage S9; S9 p9;
01265     typedef ArgumentTraits<P10> TArg10; typedef typename TArg10::TStorage S10; S10 p10;
01266     typedef ArgumentTraits<P11> TArg11; typedef typename TArg11::TStorage S11; S11 p11;
01267     typedef ArgumentTraits<P12> TArg12; typedef typename TArg12::TStorage S12; S12 p12;
01268     typedef ArgumentTraits<P13> TArg13; typedef typename TArg13::TStorage S13; S13 p13;
01269     typedef ArgumentTraits<P14> TArg14; typedef typename TArg14::TStorage S14; S14 p14;
01270     typedef ArgumentTraits<P15> TArg15; typedef typename TArg15::TStorage S15; S15 p15;
01271     
01272     if( decodeTuple<S1, S2, S3, S4, S5, S6, S7, S8, S9, S10, S11, S12, S13, S14, S15>( args, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15 ) != 0 )
01273     {
01274         return 0;
01275     }
01276     return Caller<R>::template function<TFunction, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15>( 
01277         iFunction, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4), TArg5::arg(p5), TArg6::arg(p6), TArg7::arg(p7), TArg8::arg(p8), TArg9::arg(p9), TArg10::arg(p10), TArg11::arg(p11), TArg12::arg(p12), TArg13::arg(p13), TArg14::arg(p14), TArg15::arg(p15) );
01278 }
01279 
01280 
01281 
01282 
01283 // --- methods -------------------------------------------------------------------------------------
01284 
01285 template <class CppClass>
01286 struct CallMethod
01287 {
01288     // non const methods
01289 
01290     /** call non const method without arguments
01291      */
01292     template <typename C, typename R>
01293     static PyObject* call( PyObject* args, CppClass* iObject, R (C::*iMethod)() )
01294     {
01295         typedef R (C::*TMethod)();
01296         if( decodeTuple(args) != 0 )
01297         {
01298             return 0;
01299         }
01300         return Caller<R>::template method<CppClass*, TMethod>(
01301             iObject, iMethod );
01302     }
01303 
01304     /** call non const method with 1 arguments, translated from python arguments
01305      */
01306     template <typename C, typename R, typename P1>
01307     static PyObject* call( PyObject* args, CppClass* iObject, R (C::*iMethod)(P1) )
01308     {
01309         typedef R (C::*TMethod)(P1);
01310         typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
01311         
01312         if( decodeTuple<S1>( args, p1 ) != 0 )
01313         {
01314             return 0;
01315         }
01316         return Caller<R>::template method<CppClass*, TMethod, P1>( 
01317             iObject, iMethod, TArg1::arg(p1) );
01318     }
01319 
01320     /** call non const method with 2 arguments, translated from python arguments
01321      */
01322     template <typename C, typename R, typename P1, typename P2>
01323     static PyObject* call( PyObject* args, CppClass* iObject, R (C::*iMethod)(P1, P2) )
01324     {
01325         typedef R (C::*TMethod)(P1, P2);
01326         typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
01327         typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
01328         
01329         if( decodeTuple<S1, S2>( args, p1, p2 ) != 0 )
01330         {
01331             return 0;
01332         }
01333         return Caller<R>::template method<CppClass*, TMethod, P1, P2>( 
01334             iObject, iMethod, TArg1::arg(p1), TArg2::arg(p2) );
01335     }
01336 
01337     /** call non const method with 3 arguments, translated from python arguments
01338      */
01339     template <typename C, typename R, typename P1, typename P2, typename P3>
01340     static PyObject* call( PyObject* args, CppClass* iObject, R (C::*iMethod)(P1, P2, P3) )
01341     {
01342         typedef R (C::*TMethod)(P1, P2, P3);
01343         typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
01344         typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
01345         typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
01346         
01347         if( decodeTuple<S1, S2, S3>( args, p1, p2, p3 ) != 0 )
01348         {
01349             return 0;
01350         }
01351         return Caller<R>::template method<CppClass*, TMethod, P1, P2, P3>( 
01352             iObject, iMethod, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3) );
01353     }
01354 
01355     /** call non const method with 4 arguments, translated from python arguments
01356      */
01357     template <typename C, typename R, typename P1, typename P2, typename P3, typename P4>
01358     static PyObject* call( PyObject* args, CppClass* iObject, R (C::*iMethod)(P1, P2, P3, P4) )
01359     {
01360         typedef R (C::*TMethod)(P1, P2, P3, P4);
01361         typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
01362         typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
01363         typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
01364         typedef ArgumentTraits<P4> TArg4; typedef typename TArg4::TStorage S4; S4 p4;
01365         
01366         if( decodeTuple<S1, S2, S3, S4>( args, p1, p2, p3, p4 ) != 0 )
01367         {
01368             return 0;
01369         }
01370         return Caller<R>::template method<CppClass*, TMethod, P1, P2, P3, P4>( 
01371             iObject, iMethod, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4) );
01372     }
01373 
01374     /** call non const method with 5 arguments, translated from python arguments
01375      */
01376     template <typename C, typename R, typename P1, typename P2, typename P3, typename P4, typename P5>
01377     static PyObject* call( PyObject* args, CppClass* iObject, R (C::*iMethod)(P1, P2, P3, P4, P5) )
01378     {
01379         typedef R (C::*TMethod)(P1, P2, P3, P4, P5);
01380         typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
01381         typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
01382         typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
01383         typedef ArgumentTraits<P4> TArg4; typedef typename TArg4::TStorage S4; S4 p4;
01384         typedef ArgumentTraits<P5> TArg5; typedef typename TArg5::TStorage S5; S5 p5;
01385         
01386         if( decodeTuple<S1, S2, S3, S4, S5>( args, p1, p2, p3, p4, p5 ) != 0 )
01387         {
01388             return 0;
01389         }
01390         return Caller<R>::template method<CppClass*, TMethod, P1, P2, P3, P4, P5>( 
01391             iObject, iMethod, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4), TArg5::arg(p5) );
01392     }
01393 
01394     /** call non const method with 6 arguments, translated from python arguments
01395      */
01396     template <typename C, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6>
01397     static PyObject* call( PyObject* args, CppClass* iObject, R (C::*iMethod)(P1, P2, P3, P4, P5, P6) )
01398     {
01399         typedef R (C::*TMethod)(P1, P2, P3, P4, P5, P6);
01400         typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
01401         typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
01402         typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
01403         typedef ArgumentTraits<P4> TArg4; typedef typename TArg4::TStorage S4; S4 p4;
01404         typedef ArgumentTraits<P5> TArg5; typedef typename TArg5::TStorage S5; S5 p5;
01405         typedef ArgumentTraits<P6> TArg6; typedef typename TArg6::TStorage S6; S6 p6;
01406         
01407         if( decodeTuple<S1, S2, S3, S4, S5, S6>( args, p1, p2, p3, p4, p5, p6 ) != 0 )
01408         {
01409             return 0;
01410         }
01411         return Caller<R>::template method<CppClass*, TMethod, P1, P2, P3, P4, P5, P6>( 
01412             iObject, iMethod, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4), TArg5::arg(p5), TArg6::arg(p6) );
01413     }
01414 
01415     /** call non const method with 7 arguments, translated from python arguments
01416      */
01417     template <typename C, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7>
01418     static PyObject* call( PyObject* args, CppClass* iObject, R (C::*iMethod)(P1, P2, P3, P4, P5, P6, P7) )
01419     {
01420         typedef R (C::*TMethod)(P1, P2, P3, P4, P5, P6, P7);
01421         typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
01422         typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
01423         typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
01424         typedef ArgumentTraits<P4> TArg4; typedef typename TArg4::TStorage S4; S4 p4;
01425         typedef ArgumentTraits<P5> TArg5; typedef typename TArg5::TStorage S5; S5 p5;
01426         typedef ArgumentTraits<P6> TArg6; typedef typename TArg6::TStorage S6; S6 p6;
01427         typedef ArgumentTraits<P7> TArg7; typedef typename TArg7::TStorage S7; S7 p7;
01428         
01429         if( decodeTuple<S1, S2, S3, S4, S5, S6, S7>( args, p1, p2, p3, p4, p5, p6, p7 ) != 0 )
01430         {
01431             return 0;
01432         }
01433         return Caller<R>::template method<CppClass*, TMethod, P1, P2, P3, P4, P5, P6, P7>( 
01434             iObject, iMethod, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4), TArg5::arg(p5), TArg6::arg(p6), TArg7::arg(p7) );
01435     }
01436 
01437     /** call non const method with 8 arguments, translated from python arguments
01438      */
01439     template <typename C, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8>
01440     static PyObject* call( PyObject* args, CppClass* iObject, R (C::*iMethod)(P1, P2, P3, P4, P5, P6, P7, P8) )
01441     {
01442         typedef R (C::*TMethod)(P1, P2, P3, P4, P5, P6, P7, P8);
01443         typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
01444         typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
01445         typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
01446         typedef ArgumentTraits<P4> TArg4; typedef typename TArg4::TStorage S4; S4 p4;
01447         typedef ArgumentTraits<P5> TArg5; typedef typename TArg5::TStorage S5; S5 p5;
01448         typedef ArgumentTraits<P6> TArg6; typedef typename TArg6::TStorage S6; S6 p6;
01449         typedef ArgumentTraits<P7> TArg7; typedef typename TArg7::TStorage S7; S7 p7;
01450         typedef ArgumentTraits<P8> TArg8; typedef typename TArg8::TStorage S8; S8 p8;
01451         
01452         if( decodeTuple<S1, S2, S3, S4, S5, S6, S7, S8>( args, p1, p2, p3, p4, p5, p6, p7, p8 ) != 0 )
01453         {
01454             return 0;
01455         }
01456         return Caller<R>::template method<CppClass*, TMethod, P1, P2, P3, P4, P5, P6, P7, P8>( 
01457             iObject, iMethod, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4), TArg5::arg(p5), TArg6::arg(p6), TArg7::arg(p7), TArg8::arg(p8) );
01458     }
01459 
01460     /** call non const method with 9 arguments, translated from python arguments
01461      */
01462     template <typename C, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9>
01463     static PyObject* call( PyObject* args, CppClass* iObject, R (C::*iMethod)(P1, P2, P3, P4, P5, P6, P7, P8, P9) )
01464     {
01465         typedef R (C::*TMethod)(P1, P2, P3, P4, P5, P6, P7, P8, P9);
01466         typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
01467         typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
01468         typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
01469         typedef ArgumentTraits<P4> TArg4; typedef typename TArg4::TStorage S4; S4 p4;
01470         typedef ArgumentTraits<P5> TArg5; typedef typename TArg5::TStorage S5; S5 p5;
01471         typedef ArgumentTraits<P6> TArg6; typedef typename TArg6::TStorage S6; S6 p6;
01472         typedef ArgumentTraits<P7> TArg7; typedef typename TArg7::TStorage S7; S7 p7;
01473         typedef ArgumentTraits<P8> TArg8; typedef typename TArg8::TStorage S8; S8 p8;
01474         typedef ArgumentTraits<P9> TArg9; typedef typename TArg9::TStorage S9; S9 p9;
01475         
01476         if( decodeTuple<S1, S2, S3, S4, S5, S6, S7, S8, S9>( args, p1, p2, p3, p4, p5, p6, p7, p8, p9 ) != 0 )
01477         {
01478             return 0;
01479         }
01480         return Caller<R>::template method<CppClass*, TMethod, P1, P2, P3, P4, P5, P6, P7, P8, P9>( 
01481             iObject, iMethod, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4), TArg5::arg(p5), TArg6::arg(p6), TArg7::arg(p7), TArg8::arg(p8), TArg9::arg(p9) );
01482     }
01483 
01484     /** call non const method with 10 arguments, translated from python arguments
01485      */
01486     template <typename C, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10>
01487     static PyObject* call( PyObject* args, CppClass* iObject, R (C::*iMethod)(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10) )
01488     {
01489         typedef R (C::*TMethod)(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10);
01490         typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
01491         typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
01492         typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
01493         typedef ArgumentTraits<P4> TArg4; typedef typename TArg4::TStorage S4; S4 p4;
01494         typedef ArgumentTraits<P5> TArg5; typedef typename TArg5::TStorage S5; S5 p5;
01495         typedef ArgumentTraits<P6> TArg6; typedef typename TArg6::TStorage S6; S6 p6;
01496         typedef ArgumentTraits<P7> TArg7; typedef typename TArg7::TStorage S7; S7 p7;
01497         typedef ArgumentTraits<P8> TArg8; typedef typename TArg8::TStorage S8; S8 p8;
01498         typedef ArgumentTraits<P9> TArg9; typedef typename TArg9::TStorage S9; S9 p9;
01499         typedef ArgumentTraits<P10> TArg10; typedef typename TArg10::TStorage S10; S10 p10;
01500         
01501         if( decodeTuple<S1, S2, S3, S4, S5, S6, S7, S8, S9, S10>( args, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10 ) != 0 )
01502         {
01503             return 0;
01504         }
01505         return Caller<R>::template method<CppClass*, TMethod, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10>( 
01506             iObject, iMethod, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4), TArg5::arg(p5), TArg6::arg(p6), TArg7::arg(p7), TArg8::arg(p8), TArg9::arg(p9), TArg10::arg(p10) );
01507     }
01508 
01509     /** call non const method with 11 arguments, translated from python arguments
01510      */
01511     template <typename C, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10, typename P11>
01512     static PyObject* call( PyObject* args, CppClass* iObject, R (C::*iMethod)(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11) )
01513     {
01514         typedef R (C::*TMethod)(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11);
01515         typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
01516         typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
01517         typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
01518         typedef ArgumentTraits<P4> TArg4; typedef typename TArg4::TStorage S4; S4 p4;
01519         typedef ArgumentTraits<P5> TArg5; typedef typename TArg5::TStorage S5; S5 p5;
01520         typedef ArgumentTraits<P6> TArg6; typedef typename TArg6::TStorage S6; S6 p6;
01521         typedef ArgumentTraits<P7> TArg7; typedef typename TArg7::TStorage S7; S7 p7;
01522         typedef ArgumentTraits<P8> TArg8; typedef typename TArg8::TStorage S8; S8 p8;
01523         typedef ArgumentTraits<P9> TArg9; typedef typename TArg9::TStorage S9; S9 p9;
01524         typedef ArgumentTraits<P10> TArg10; typedef typename TArg10::TStorage S10; S10 p10;
01525         typedef ArgumentTraits<P11> TArg11; typedef typename TArg11::TStorage S11; S11 p11;
01526         
01527         if( decodeTuple<S1, S2, S3, S4, S5, S6, S7, S8, S9, S10, S11>( args, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11 ) != 0 )
01528         {
01529             return 0;
01530         }
01531         return Caller<R>::template method<CppClass*, TMethod, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11>( 
01532             iObject, iMethod, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4), TArg5::arg(p5), TArg6::arg(p6), TArg7::arg(p7), TArg8::arg(p8), TArg9::arg(p9), TArg10::arg(p10), TArg11::arg(p11) );
01533     }
01534 
01535     /** call non const method with 12 arguments, translated from python arguments
01536      */
01537     template <typename C, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10, typename P11, typename P12>
01538     static PyObject* call( PyObject* args, CppClass* iObject, R (C::*iMethod)(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12) )
01539     {
01540         typedef R (C::*TMethod)(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12);
01541         typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
01542         typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
01543         typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
01544         typedef ArgumentTraits<P4> TArg4; typedef typename TArg4::TStorage S4; S4 p4;
01545         typedef ArgumentTraits<P5> TArg5; typedef typename TArg5::TStorage S5; S5 p5;
01546         typedef ArgumentTraits<P6> TArg6; typedef typename TArg6::TStorage S6; S6 p6;
01547         typedef ArgumentTraits<P7> TArg7; typedef typename TArg7::TStorage S7; S7 p7;
01548         typedef ArgumentTraits<P8> TArg8; typedef typename TArg8::TStorage S8; S8 p8;
01549         typedef ArgumentTraits<P9> TArg9; typedef typename TArg9::TStorage S9; S9 p9;
01550         typedef ArgumentTraits<P10> TArg10; typedef typename TArg10::TStorage S10; S10 p10;
01551         typedef ArgumentTraits<P11> TArg11; typedef typename TArg11::TStorage S11; S11 p11;
01552         typedef ArgumentTraits<P12> TArg12; typedef typename TArg12::TStorage S12; S12 p12;
01553         
01554         if( decodeTuple<S1, S2, S3, S4, S5, S6, S7, S8, S9, S10, S11, S12>( args, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12 ) != 0 )
01555         {
01556             return 0;
01557         }
01558         return Caller<R>::template method<CppClass*, TMethod, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12>( 
01559             iObject, iMethod, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4), TArg5::arg(p5), TArg6::arg(p6), TArg7::arg(p7), TArg8::arg(p8), TArg9::arg(p9), TArg10::arg(p10), TArg11::arg(p11), TArg12::arg(p12) );
01560     }
01561 
01562     /** call non const method with 13 arguments, translated from python arguments
01563      */
01564     template <typename C, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10, typename P11, typename P12, typename P13>
01565     static PyObject* call( PyObject* args, CppClass* iObject, R (C::*iMethod)(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13) )
01566     {
01567         typedef R (C::*TMethod)(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13);
01568         typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
01569         typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
01570         typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
01571         typedef ArgumentTraits<P4> TArg4; typedef typename TArg4::TStorage S4; S4 p4;
01572         typedef ArgumentTraits<P5> TArg5; typedef typename TArg5::TStorage S5; S5 p5;
01573         typedef ArgumentTraits<P6> TArg6; typedef typename TArg6::TStorage S6; S6 p6;
01574         typedef ArgumentTraits<P7> TArg7; typedef typename TArg7::TStorage S7; S7 p7;
01575         typedef ArgumentTraits<P8> TArg8; typedef typename TArg8::TStorage S8; S8 p8;
01576         typedef ArgumentTraits<P9> TArg9; typedef typename TArg9::TStorage S9; S9 p9;
01577         typedef ArgumentTraits<P10> TArg10; typedef typename TArg10::TStorage S10; S10 p10;
01578         typedef ArgumentTraits<P11> TArg11; typedef typename TArg11::TStorage S11; S11 p11;
01579         typedef ArgumentTraits<P12> TArg12; typedef typename TArg12::TStorage S12; S12 p12;
01580         typedef ArgumentTraits<P13> TArg13; typedef typename TArg13::TStorage S13; S13 p13;
01581         
01582         if( decodeTuple<S1, S2, S3, S4, S5, S6, S7, S8, S9, S10, S11, S12, S13>( args, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13 ) != 0 )
01583         {
01584             return 0;
01585         }
01586         return Caller<R>::template method<CppClass*, TMethod, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13>( 
01587             iObject, iMethod, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4), TArg5::arg(p5), TArg6::arg(p6), TArg7::arg(p7), TArg8::arg(p8), TArg9::arg(p9), TArg10::arg(p10), TArg11::arg(p11), TArg12::arg(p12), TArg13::arg(p13) );
01588     }
01589 
01590     /** call non const method with 14 arguments, translated from python arguments
01591      */
01592     template <typename C, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10, typename P11, typename P12, typename P13, typename P14>
01593     static PyObject* call( PyObject* args, CppClass* iObject, R (C::*iMethod)(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14) )
01594     {
01595         typedef R (C::*TMethod)(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14);
01596         typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
01597         typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
01598         typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
01599         typedef ArgumentTraits<P4> TArg4; typedef typename TArg4::TStorage S4; S4 p4;
01600         typedef ArgumentTraits<P5> TArg5; typedef typename TArg5::TStorage S5; S5 p5;
01601         typedef ArgumentTraits<P6> TArg6; typedef typename TArg6::TStorage S6; S6 p6;
01602         typedef ArgumentTraits<P7> TArg7; typedef typename TArg7::TStorage S7; S7 p7;
01603         typedef ArgumentTraits<P8> TArg8; typedef typename TArg8::TStorage S8; S8 p8;
01604         typedef ArgumentTraits<P9> TArg9; typedef typename TArg9::TStorage S9; S9 p9;
01605         typedef ArgumentTraits<P10> TArg10; typedef typename TArg10::TStorage S10; S10 p10;
01606         typedef ArgumentTraits<P11> TArg11; typedef typename TArg11::TStorage S11; S11 p11;
01607         typedef ArgumentTraits<P12> TArg12; typedef typename TArg12::TStorage S12; S12 p12;
01608         typedef ArgumentTraits<P13> TArg13; typedef typename TArg13::TStorage S13; S13 p13;
01609         typedef ArgumentTraits<P14> TArg14; typedef typename TArg14::TStorage S14; S14 p14;
01610         
01611         if( decodeTuple<S1, S2, S3, S4, S5, S6, S7, S8, S9, S10, S11, S12, S13, S14>( args, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14 ) != 0 )
01612         {
01613             return 0;
01614         }
01615         return Caller<R>::template method<CppClass*, TMethod, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14>( 
01616             iObject, iMethod, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4), TArg5::arg(p5), TArg6::arg(p6), TArg7::arg(p7), TArg8::arg(p8), TArg9::arg(p9), TArg10::arg(p10), TArg11::arg(p11), TArg12::arg(p12), TArg13::arg(p13), TArg14::arg(p14) );
01617     }
01618 
01619     /** call non const method with 15 arguments, translated from python arguments
01620      */
01621     template <typename C, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10, typename P11, typename P12, typename P13, typename P14, typename P15>
01622     static PyObject* call( PyObject* args, CppClass* iObject, R (C::*iMethod)(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15) )
01623     {
01624         typedef R (C::*TMethod)(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15);
01625         typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
01626         typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
01627         typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
01628         typedef ArgumentTraits<P4> TArg4; typedef typename TArg4::TStorage S4; S4 p4;
01629         typedef ArgumentTraits<P5> TArg5; typedef typename TArg5::TStorage S5; S5 p5;
01630         typedef ArgumentTraits<P6> TArg6; typedef typename TArg6::TStorage S6; S6 p6;
01631         typedef ArgumentTraits<P7> TArg7; typedef typename TArg7::TStorage S7; S7 p7;
01632         typedef ArgumentTraits<P8> TArg8; typedef typename TArg8::TStorage S8; S8 p8;
01633         typedef ArgumentTraits<P9> TArg9; typedef typename TArg9::TStorage S9; S9 p9;
01634         typedef ArgumentTraits<P10> TArg10; typedef typename TArg10::TStorage S10; S10 p10;
01635         typedef ArgumentTraits<P11> TArg11; typedef typename TArg11::TStorage S11; S11 p11;
01636         typedef ArgumentTraits<P12> TArg12; typedef typename TArg12::TStorage S12; S12 p12;
01637         typedef ArgumentTraits<P13> TArg13; typedef typename TArg13::TStorage S13; S13 p13;
01638         typedef ArgumentTraits<P14> TArg14; typedef typename TArg14::TStorage S14; S14 p14;
01639         typedef ArgumentTraits<P15> TArg15; typedef typename TArg15::TStorage S15; S15 p15;
01640         
01641         if( decodeTuple<S1, S2, S3, S4, S5, S6, S7, S8, S9, S10, S11, S12, S13, S14, S15>( args, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15 ) != 0 )
01642         {
01643             return 0;
01644         }
01645         return Caller<R>::template method<CppClass*, TMethod, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15>( 
01646             iObject, iMethod, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4), TArg5::arg(p5), TArg6::arg(p6), TArg7::arg(p7), TArg8::arg(p8), TArg9::arg(p9), TArg10::arg(p10), TArg11::arg(p11), TArg12::arg(p12), TArg13::arg(p13), TArg14::arg(p14), TArg15::arg(p15) );
01647     }
01648 
01649 
01650     // const methods
01651 
01652     /** call const method without arguments
01653      */
01654     template <typename C, typename R>
01655     static PyObject* call( PyObject* args, const CppClass* iObject, R (C::*iMethod)() const )
01656     {
01657         typedef R (C::*TMethod)() const;
01658         if( decodeTuple(args) != 0 )
01659         {
01660             return 0;
01661         }
01662         return Caller<R>::template method<const CppClass*, TMethod>( 
01663             iObject, iMethod );
01664     }
01665 
01666     /** call const method with 1 argument, translated from python arguments
01667      */
01668     template <typename C, typename R, typename P1>
01669     static PyObject* call( PyObject* args, const CppClass* iObject, R (C::*iMethod)(P1) const )
01670     {
01671         typedef R (C::*TMethod)(P1) const;
01672         typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
01673         
01674         if( decodeTuple<S1>( args, p1 ) != 0 )
01675         {
01676             return 0;
01677         }
01678         return Caller<R>::template method<const CppClass*, TMethod, P1>(
01679             iObject, iMethod, TArg1::arg(p1) );
01680     }
01681 
01682     /** call const method with 2 argument, translated from python arguments
01683      */
01684     template <typename C, typename R, typename P1, typename P2>
01685     static PyObject* call( PyObject* args, const CppClass* iObject, R (C::*iMethod)(P1, P2) const )
01686     {
01687         typedef R (C::*TMethod)(P1, P2) const;
01688         typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
01689         typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
01690         
01691         if( decodeTuple<S1, S2>( args, p1, p2 ) != 0 )
01692         {
01693             return 0;
01694         }
01695         return Caller<R>::template method<const CppClass*, TMethod, P1, P2>(
01696             iObject, iMethod, TArg1::arg(p1), TArg2::arg(p2) );
01697     }
01698 
01699     /** call const method with 3 argument, translated from python arguments
01700      */
01701     template <typename C, typename R, typename P1, typename P2, typename P3>
01702     static PyObject* call( PyObject* args, const CppClass* iObject, R (C::*iMethod)(P1, P2, P3) const )
01703     {
01704         typedef R (C::*TMethod)(P1, P2, P3) const;
01705         typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
01706         typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
01707         typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
01708         
01709         if( decodeTuple<S1, S2, S3>( args, p1, p2, p3 ) != 0 )
01710         {
01711             return 0;
01712         }
01713         return Caller<R>::template method<const CppClass*, TMethod, P1, P2, P3>(
01714             iObject, iMethod, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3) );
01715     }
01716 
01717     /** call const method with 4 argument, translated from python arguments
01718      */
01719     template <typename C, typename R, typename P1, typename P2, typename P3, typename P4>
01720     static PyObject* call( PyObject* args, const CppClass* iObject, R (C::*iMethod)(P1, P2, P3, P4) const )
01721     {
01722         typedef R (C::*TMethod)(P1, P2, P3, P4) const;
01723         typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
01724         typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
01725         typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
01726         typedef ArgumentTraits<P4> TArg4; typedef typename TArg4::TStorage S4; S4 p4;
01727         
01728         if( decodeTuple<S1, S2, S3, S4>( args, p1, p2, p3, p4 ) != 0 )
01729         {
01730             return 0;
01731         }
01732         return Caller<R>::template method<const CppClass*, TMethod, P1, P2, P3, P4>(
01733             iObject, iMethod, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4) );
01734     }
01735 
01736     /** call const method with 5 argument, translated from python arguments
01737      */
01738     template <typename C, typename R, typename P1, typename P2, typename P3, typename P4, typename P5>
01739     static PyObject* call( PyObject* args, const CppClass* iObject, R (C::*iMethod)(P1, P2, P3, P4, P5) const )
01740     {
01741         typedef R (C::*TMethod)(P1, P2, P3, P4, P5) const;
01742         typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
01743         typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
01744         typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
01745         typedef ArgumentTraits<P4> TArg4; typedef typename TArg4::TStorage S4; S4 p4;
01746         typedef ArgumentTraits<P5> TArg5; typedef typename TArg5::TStorage S5; S5 p5;
01747         
01748         if( decodeTuple<S1, S2, S3, S4, S5>( args, p1, p2, p3, p4, p5 ) != 0 )
01749         {
01750             return 0;
01751         }
01752         return Caller<R>::template method<const CppClass*, TMethod, P1, P2, P3, P4, P5>(
01753             iObject, iMethod, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4), TArg5::arg(p5) );
01754     }
01755 
01756     /** call const method with 6 argument, translated from python arguments
01757      */
01758     template <typename C, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6>
01759     static PyObject* call( PyObject* args, const CppClass* iObject, R (C::*iMethod)(P1, P2, P3, P4, P5, P6) const )
01760     {
01761         typedef R (C::*TMethod)(P1, P2, P3, P4, P5, P6) const;
01762         typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
01763         typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
01764         typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
01765         typedef ArgumentTraits<P4> TArg4; typedef typename TArg4::TStorage S4; S4 p4;
01766         typedef ArgumentTraits<P5> TArg5; typedef typename TArg5::TStorage S5; S5 p5;
01767         typedef ArgumentTraits<P6> TArg6; typedef typename TArg6::TStorage S6; S6 p6;
01768         
01769         if( decodeTuple<S1, S2, S3, S4, S5, S6>( args, p1, p2, p3, p4, p5, p6 ) != 0 )
01770         {
01771             return 0;
01772         }
01773         return Caller<R>::template method<const CppClass*, TMethod, P1, P2, P3, P4, P5, P6>(
01774             iObject, iMethod, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4), TArg5::arg(p5), TArg6::arg(p6) );
01775     }
01776 
01777     /** call const method with 7 argument, translated from python arguments
01778      */
01779     template <typename C, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7>
01780     static PyObject* call( PyObject* args, const CppClass* iObject, R (C::*iMethod)(P1, P2, P3, P4, P5, P6, P7) const )
01781     {
01782         typedef R (C::*TMethod)(P1, P2, P3, P4, P5, P6, P7) const;
01783         typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
01784         typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
01785         typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
01786         typedef ArgumentTraits<P4> TArg4; typedef typename TArg4::TStorage S4; S4 p4;
01787         typedef ArgumentTraits<P5> TArg5; typedef typename TArg5::TStorage S5; S5 p5;
01788         typedef ArgumentTraits<P6> TArg6; typedef typename TArg6::TStorage S6; S6 p6;
01789         typedef ArgumentTraits<P7> TArg7; typedef typename TArg7::TStorage S7; S7 p7;
01790         
01791         if( decodeTuple<S1, S2, S3, S4, S5, S6, S7>( args, p1, p2, p3, p4, p5, p6, p7 ) != 0 )
01792         {
01793             return 0;
01794         }
01795         return Caller<R>::template method<const CppClass*, TMethod, P1, P2, P3, P4, P5, P6, P7>(
01796             iObject, iMethod, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4), TArg5::arg(p5), TArg6::arg(p6), TArg7::arg(p7) );
01797     }
01798 
01799     /** call const method with 8 argument, translated from python arguments
01800      */
01801     template <typename C, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8>
01802     static PyObject* call( PyObject* args, const CppClass* iObject, R (C::*iMethod)(P1, P2, P3, P4, P5, P6, P7, P8) const )
01803     {
01804         typedef R (C::*TMethod)(P1, P2, P3, P4, P5, P6, P7, P8) const;
01805         typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
01806         typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
01807         typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
01808         typedef ArgumentTraits<P4> TArg4; typedef typename TArg4::TStorage S4; S4 p4;
01809         typedef ArgumentTraits<P5> TArg5; typedef typename TArg5::TStorage S5; S5 p5;
01810         typedef ArgumentTraits<P6> TArg6; typedef typename TArg6::TStorage S6; S6 p6;
01811         typedef ArgumentTraits<P7> TArg7; typedef typename TArg7::TStorage S7; S7 p7;
01812         typedef ArgumentTraits<P8> TArg8; typedef typename TArg8::TStorage S8; S8 p8;
01813         
01814         if( decodeTuple<S1, S2, S3, S4, S5, S6, S7, S8>( args, p1, p2, p3, p4, p5, p6, p7, p8 ) != 0 )
01815         {
01816             return 0;
01817         }
01818         return Caller<R>::template method<const CppClass*, TMethod, P1, P2, P3, P4, P5, P6, P7, P8>(
01819             iObject, iMethod, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4), TArg5::arg(p5), TArg6::arg(p6), TArg7::arg(p7), TArg8::arg(p8) );
01820     }
01821 
01822     /** call const method with 9 argument, translated from python arguments
01823      */
01824     template <typename C, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9>
01825     static PyObject* call( PyObject* args, const CppClass* iObject, R (C::*iMethod)(P1, P2, P3, P4, P5, P6, P7, P8, P9) const )
01826     {
01827         typedef R (C::*TMethod)(P1, P2, P3, P4, P5, P6, P7, P8, P9) const;
01828         typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
01829         typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
01830         typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
01831         typedef ArgumentTraits<P4> TArg4; typedef typename TArg4::TStorage S4; S4 p4;
01832         typedef ArgumentTraits<P5> TArg5; typedef typename TArg5::TStorage S5; S5 p5;
01833         typedef ArgumentTraits<P6> TArg6; typedef typename TArg6::TStorage S6; S6 p6;
01834         typedef ArgumentTraits<P7> TArg7; typedef typename TArg7::TStorage S7; S7 p7;
01835         typedef ArgumentTraits<P8> TArg8; typedef typename TArg8::TStorage S8; S8 p8;
01836         typedef ArgumentTraits<P9> TArg9; typedef typename TArg9::TStorage S9; S9 p9;
01837         
01838         if( decodeTuple<S1, S2, S3, S4, S5, S6, S7, S8, S9>( args, p1, p2, p3, p4, p5, p6, p7, p8, p9 ) != 0 )
01839         {
01840             return 0;
01841         }
01842         return Caller<R>::template method<const CppClass*, TMethod, P1, P2, P3, P4, P5, P6, P7, P8, P9>(
01843             iObject, iMethod, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4), TArg5::arg(p5), TArg6::arg(p6), TArg7::arg(p7), TArg8::arg(p8), TArg9::arg(p9) );
01844     }
01845 
01846     /** call const method with 10 argument, translated from python arguments
01847      */
01848     template <typename C, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10>
01849     static PyObject* call( PyObject* args, const CppClass* iObject, R (C::*iMethod)(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10) const )
01850     {
01851         typedef R (C::*TMethod)(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10) const;
01852         typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
01853         typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
01854         typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
01855         typedef ArgumentTraits<P4> TArg4; typedef typename TArg4::TStorage S4; S4 p4;
01856         typedef ArgumentTraits<P5> TArg5; typedef typename TArg5::TStorage S5; S5 p5;
01857         typedef ArgumentTraits<P6> TArg6; typedef typename TArg6::TStorage S6; S6 p6;
01858         typedef ArgumentTraits<P7> TArg7; typedef typename TArg7::TStorage S7; S7 p7;
01859         typedef ArgumentTraits<P8> TArg8; typedef typename TArg8::TStorage S8; S8 p8;
01860         typedef ArgumentTraits<P9> TArg9; typedef typename TArg9::TStorage S9; S9 p9;
01861         typedef ArgumentTraits<P10> TArg10; typedef typename TArg10::TStorage S10; S10 p10;
01862         
01863         if( decodeTuple<S1, S2, S3, S4, S5, S6, S7, S8, S9, S10>( args, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10 ) != 0 )
01864         {
01865             return 0;
01866         }
01867         return Caller<R>::template method<const CppClass*, TMethod, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10>(
01868             iObject, iMethod, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4), TArg5::arg(p5), TArg6::arg(p6), TArg7::arg(p7), TArg8::arg(p8), TArg9::arg(p9), TArg10::arg(p10) );
01869     }
01870 
01871     /** call const method with 11 argument, translated from python arguments
01872      */
01873     template <typename C, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10, typename P11>
01874     static PyObject* call( PyObject* args, const CppClass* iObject, R (C::*iMethod)(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11) const )
01875     {
01876         typedef R (C::*TMethod)(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11) const;
01877         typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
01878         typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
01879         typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
01880         typedef ArgumentTraits<P4> TArg4; typedef typename TArg4::TStorage S4; S4 p4;
01881         typedef ArgumentTraits<P5> TArg5; typedef typename TArg5::TStorage S5; S5 p5;
01882         typedef ArgumentTraits<P6> TArg6; typedef typename TArg6::TStorage S6; S6 p6;
01883         typedef ArgumentTraits<P7> TArg7; typedef typename TArg7::TStorage S7; S7 p7;
01884         typedef ArgumentTraits<P8> TArg8; typedef typename TArg8::TStorage S8; S8 p8;
01885         typedef ArgumentTraits<P9> TArg9; typedef typename TArg9::TStorage S9; S9 p9;
01886         typedef ArgumentTraits<P10> TArg10; typedef typename TArg10::TStorage S10; S10 p10;
01887         typedef ArgumentTraits<P11> TArg11; typedef typename TArg11::TStorage S11; S11 p11;
01888         
01889         if( decodeTuple<S1, S2, S3, S4, S5, S6, S7, S8, S9, S10, S11>( args, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11 ) != 0 )
01890         {
01891             return 0;
01892         }
01893         return Caller<R>::template method<const CppClass*, TMethod, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11>(
01894             iObject, iMethod, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4), TArg5::arg(p5), TArg6::arg(p6), TArg7::arg(p7), TArg8::arg(p8), TArg9::arg(p9), TArg10::arg(p10), TArg11::arg(p11) );
01895     }
01896 
01897     /** call const method with 12 argument, translated from python arguments
01898      */
01899     template <typename C, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10, typename P11, typename P12>
01900     static PyObject* call( PyObject* args, const CppClass* iObject, R (C::*iMethod)(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12) const )
01901     {
01902         typedef R (C::*TMethod)(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12) const;
01903         typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
01904         typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
01905         typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
01906         typedef ArgumentTraits<P4> TArg4; typedef typename TArg4::TStorage S4; S4 p4;
01907         typedef ArgumentTraits<P5> TArg5; typedef typename TArg5::TStorage S5; S5 p5;
01908         typedef ArgumentTraits<P6> TArg6; typedef typename TArg6::TStorage S6; S6 p6;
01909         typedef ArgumentTraits<P7> TArg7; typedef typename TArg7::TStorage S7; S7 p7;
01910         typedef ArgumentTraits<P8> TArg8; typedef typename TArg8::TStorage S8; S8 p8;
01911         typedef ArgumentTraits<P9> TArg9; typedef typename TArg9::TStorage S9; S9 p9;
01912         typedef ArgumentTraits<P10> TArg10; typedef typename TArg10::TStorage S10; S10 p10;
01913         typedef ArgumentTraits<P11> TArg11; typedef typename TArg11::TStorage S11; S11 p11;
01914         typedef ArgumentTraits<P12> TArg12; typedef typename TArg12::TStorage S12; S12 p12;
01915         
01916         if( decodeTuple<S1, S2, S3, S4, S5, S6, S7, S8, S9, S10, S11, S12>( args, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12 ) != 0 )
01917         {
01918             return 0;
01919         }
01920         return Caller<R>::template method<const CppClass*, TMethod, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12>(
01921             iObject, iMethod, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4), TArg5::arg(p5), TArg6::arg(p6), TArg7::arg(p7), TArg8::arg(p8), TArg9::arg(p9), TArg10::arg(p10), TArg11::arg(p11), TArg12::arg(p12) );
01922     }
01923 
01924     /** call const method with 13 argument, translated from python arguments
01925      */
01926     template <typename C, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10, typename P11, typename P12, typename P13>
01927     static PyObject* call( PyObject* args, const CppClass* iObject, R (C::*iMethod)(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13) const )
01928     {
01929         typedef R (C::*TMethod)(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13) const;
01930         typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
01931         typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
01932         typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
01933         typedef ArgumentTraits<P4> TArg4; typedef typename TArg4::TStorage S4; S4 p4;
01934         typedef ArgumentTraits<P5> TArg5; typedef typename TArg5::TStorage S5; S5 p5;
01935         typedef ArgumentTraits<P6> TArg6; typedef typename TArg6::TStorage S6; S6 p6;
01936         typedef ArgumentTraits<P7> TArg7; typedef typename TArg7::TStorage S7; S7 p7;
01937         typedef ArgumentTraits<P8> TArg8; typedef typename TArg8::TStorage S8; S8 p8;
01938         typedef ArgumentTraits<P9> TArg9; typedef typename TArg9::TStorage S9; S9 p9;
01939         typedef ArgumentTraits<P10> TArg10; typedef typename TArg10::TStorage S10; S10 p10;
01940         typedef ArgumentTraits<P11> TArg11; typedef typename TArg11::TStorage S11; S11 p11;
01941         typedef ArgumentTraits<P12> TArg12; typedef typename TArg12::TStorage S12; S12 p12;
01942         typedef ArgumentTraits<P13> TArg13; typedef typename TArg13::TStorage S13; S13 p13;
01943         
01944         if( decodeTuple<S1, S2, S3, S4, S5, S6, S7, S8, S9, S10, S11, S12, S13>( args, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13 ) != 0 )
01945         {
01946             return 0;
01947         }
01948         return Caller<R>::template method<const CppClass*, TMethod, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13>(
01949             iObject, iMethod, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4), TArg5::arg(p5), TArg6::arg(p6), TArg7::arg(p7), TArg8::arg(p8), TArg9::arg(p9), TArg10::arg(p10), TArg11::arg(p11), TArg12::arg(p12), TArg13::arg(p13) );
01950     }
01951 
01952     /** call const method with 14 argument, translated from python arguments
01953      */
01954     template <typename C, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10, typename P11, typename P12, typename P13, typename P14>
01955     static PyObject* call( PyObject* args, const CppClass* iObject, R (C::*iMethod)(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14) const )
01956     {
01957         typedef R (C::*TMethod)(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14) const;
01958         typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
01959         typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
01960         typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
01961         typedef ArgumentTraits<P4> TArg4; typedef typename TArg4::TStorage S4; S4 p4;
01962         typedef ArgumentTraits<P5> TArg5; typedef typename TArg5::TStorage S5; S5 p5;
01963         typedef ArgumentTraits<P6> TArg6; typedef typename TArg6::TStorage S6; S6 p6;
01964         typedef ArgumentTraits<P7> TArg7; typedef typename TArg7::TStorage S7; S7 p7;
01965         typedef ArgumentTraits<P8> TArg8; typedef typename TArg8::TStorage S8; S8 p8;
01966         typedef ArgumentTraits<P9> TArg9; typedef typename TArg9::TStorage S9; S9 p9;
01967         typedef ArgumentTraits<P10> TArg10; typedef typename TArg10::TStorage S10; S10 p10;
01968         typedef ArgumentTraits<P11> TArg11; typedef typename TArg11::TStorage S11; S11 p11;
01969         typedef ArgumentTraits<P12> TArg12; typedef typename TArg12::TStorage S12; S12 p12;
01970         typedef ArgumentTraits<P13> TArg13; typedef typename TArg13::TStorage S13; S13 p13;
01971         typedef ArgumentTraits<P14> TArg14; typedef typename TArg14::TStorage S14; S14 p14;
01972         
01973         if( decodeTuple<S1, S2, S3, S4, S5, S6, S7, S8, S9, S10, S11, S12, S13, S14>( args, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14 ) != 0 )
01974         {
01975             return 0;
01976         }
01977         return Caller<R>::template method<const CppClass*, TMethod, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14>(
01978             iObject, iMethod, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4), TArg5::arg(p5), TArg6::arg(p6), TArg7::arg(p7), TArg8::arg(p8), TArg9::arg(p9), TArg10::arg(p10), TArg11::arg(p11), TArg12::arg(p12), TArg13::arg(p13), TArg14::arg(p14) );
01979     }
01980 
01981     /** call const method with 15 argument, translated from python arguments
01982      */
01983     template <typename C, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10, typename P11, typename P12, typename P13, typename P14, typename P15>
01984     static PyObject* call( PyObject* args, const CppClass* iObject, R (C::*iMethod)(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15) const )
01985     {
01986         typedef R (C::*TMethod)(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15) const;
01987         typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
01988         typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
01989         typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
01990         typedef ArgumentTraits<P4> TArg4; typedef typename TArg4::TStorage S4; S4 p4;
01991         typedef ArgumentTraits<P5> TArg5; typedef typename TArg5::TStorage S5; S5 p5;
01992         typedef ArgumentTraits<P6> TArg6; typedef typename TArg6::TStorage S6; S6 p6;
01993         typedef ArgumentTraits<P7> TArg7; typedef typename TArg7::TStorage S7; S7 p7;
01994         typedef ArgumentTraits<P8> TArg8; typedef typename TArg8::TStorage S8; S8 p8;
01995         typedef ArgumentTraits<P9> TArg9; typedef typename TArg9::TStorage S9; S9 p9;
01996         typedef ArgumentTraits<P10> TArg10; typedef typename TArg10::TStorage S10; S10 p10;
01997         typedef ArgumentTraits<P11> TArg11; typedef typename TArg11::TStorage S11; S11 p11;
01998         typedef ArgumentTraits<P12> TArg12; typedef typename TArg12::TStorage S12; S12 p12;
01999         typedef ArgumentTraits<P13> TArg13; typedef typename TArg13::TStorage S13; S13 p13;
02000         typedef ArgumentTraits<P14> TArg14; typedef typename TArg14::TStorage S14; S14 p14;
02001         typedef ArgumentTraits<P15> TArg15; typedef typename TArg15::TStorage S15; S15 p15;
02002         
02003         if( decodeTuple<S1, S2, S3, S4, S5, S6, S7, S8, S9, S10, S11, S12, S13, S14, S15>( args, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15 ) != 0 )
02004         {
02005             return 0;
02006         }
02007         return Caller<R>::template method<const CppClass*, TMethod, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15>(
02008             iObject, iMethod, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4), TArg5::arg(p5), TArg6::arg(p6), TArg7::arg(p7), TArg8::arg(p8), TArg9::arg(p9), TArg10::arg(p10), TArg11::arg(p11), TArg12::arg(p12), TArg13::arg(p13), TArg14::arg(p14), TArg15::arg(p15) );
02009     }
02010 
02011     // "free" non-const methods passing iObject as pointer
02012 
02013     /** call non const "free method" without arguments, passing iObject as pointer
02014      */
02015     template <typename C, typename R>
02016     static PyObject* callFree( PyObject* args, CppClass* iObject, R (*iFreeMethod)(C*) )
02017     {
02018         typedef R (*TFunction)(C*);
02019         if( decodeTuple(args) != 0 )
02020         {
02021             return 0;
02022         }
02023         return Caller<R>::template function<TFunction, C* >(
02024             iFreeMethod, iObject );
02025     }
02026 
02027     /** call non-const "free method" with 1 arguments translated from python arguments, 
02028      *  passing iObject as pointer
02029      */
02030     template <typename C, typename R, typename P1>
02031     static PyObject* callFree( PyObject* args, CppClass* iObject, R (*iFreeMethod)(C*, P1) )
02032     {
02033         typedef R (*TFunction)(C*, P1);
02034         typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
02035         
02036         if( decodeTuple<S1>( args, p1 ) != 0 )
02037         {
02038             return 0;
02039         }
02040         return Caller<R>::template function<TFunction, C*, P1>(
02041             iFreeMethod, iObject, TArg1::arg(p1) );
02042     }
02043 
02044     /** call non-const "free method" with 2 arguments translated from python arguments, 
02045      *  passing iObject as pointer
02046      */
02047     template <typename C, typename R, typename P1, typename P2>
02048     static PyObject* callFree( PyObject* args, CppClass* iObject, R (*iFreeMethod)(C*, P1, P2) )
02049     {
02050         typedef R (*TFunction)(C*, P1, P2);
02051         typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
02052         typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
02053         
02054         if( decodeTuple<S1, S2>( args, p1, p2 ) != 0 )
02055         {
02056             return 0;
02057         }
02058         return Caller<R>::template function<TFunction, C*, P1, P2>(
02059             iFreeMethod, iObject, TArg1::arg(p1), TArg2::arg(p2) );
02060     }
02061 
02062     /** call non-const "free method" with 3 arguments translated from python arguments, 
02063      *  passing iObject as pointer
02064      */
02065     template <typename C, typename R, typename P1, typename P2, typename P3>
02066     static PyObject* callFree( PyObject* args, CppClass* iObject, R (*iFreeMethod)(C*, P1, P2, P3) )
02067     {
02068         typedef R (*TFunction)(C*, P1, P2, P3);
02069         typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
02070         typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
02071         typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
02072         
02073         if( decodeTuple<S1, S2, S3>( args, p1, p2, p3 ) != 0 )
02074         {
02075             return 0;
02076         }
02077         return Caller<R>::template function<TFunction, C*, P1, P2, P3>(
02078             iFreeMethod, iObject, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3) );
02079     }
02080 
02081     /** call non-const "free method" with 4 arguments translated from python arguments, 
02082      *  passing iObject as pointer
02083      */
02084     template <typename C, typename R, typename P1, typename P2, typename P3, typename P4>
02085     static PyObject* callFree( PyObject* args, CppClass* iObject, R (*iFreeMethod)(C*, P1, P2, P3, P4) )
02086     {
02087         typedef R (*TFunction)(C*, P1, P2, P3, P4);
02088         typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
02089         typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
02090         typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
02091         typedef ArgumentTraits<P4> TArg4; typedef typename TArg4::TStorage S4; S4 p4;
02092         
02093         if( decodeTuple<S1, S2, S3, S4>( args, p1, p2, p3, p4 ) != 0 )
02094         {
02095             return 0;
02096         }
02097         return Caller<R>::template function<TFunction, C*, P1, P2, P3, P4>(
02098             iFreeMethod, iObject, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4) );
02099     }
02100 
02101     /** call non-const "free method" with 5 arguments translated from python arguments, 
02102      *  passing iObject as pointer
02103      */
02104     template <typename C, typename R, typename P1, typename P2, typename P3, typename P4, typename P5>
02105     static PyObject* callFree( PyObject* args, CppClass* iObject, R (*iFreeMethod)(C*, P1, P2, P3, P4, P5) )
02106     {
02107         typedef R (*TFunction)(C*, P1, P2, P3, P4, P5);
02108         typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
02109         typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
02110         typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
02111         typedef ArgumentTraits<P4> TArg4; typedef typename TArg4::TStorage S4; S4 p4;
02112         typedef ArgumentTraits<P5> TArg5; typedef typename TArg5::TStorage S5; S5 p5;
02113         
02114         if( decodeTuple<S1, S2, S3, S4, S5>( args, p1, p2, p3, p4, p5 ) != 0 )
02115         {
02116             return 0;
02117         }
02118         return Caller<R>::template function<TFunction, C*, P1, P2, P3, P4, P5>(
02119             iFreeMethod, iObject, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4), TArg5::arg(p5) );
02120     }
02121 
02122     /** call non-const "free method" with 6 arguments translated from python arguments, 
02123      *  passing iObject as pointer
02124      */
02125     template <typename C, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6>
02126     static PyObject* callFree( PyObject* args, CppClass* iObject, R (*iFreeMethod)(C*, P1, P2, P3, P4, P5, P6) )
02127     {
02128         typedef R (*TFunction)(C*, P1, P2, P3, P4, P5, P6);
02129         typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
02130         typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
02131         typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
02132         typedef ArgumentTraits<P4> TArg4; typedef typename TArg4::TStorage S4; S4 p4;
02133         typedef ArgumentTraits<P5> TArg5; typedef typename TArg5::TStorage S5; S5 p5;
02134         typedef ArgumentTraits<P6> TArg6; typedef typename TArg6::TStorage S6; S6 p6;
02135         
02136         if( decodeTuple<S1, S2, S3, S4, S5, S6>( args, p1, p2, p3, p4, p5, p6 ) != 0 )
02137         {
02138             return 0;
02139         }
02140         return Caller<R>::template function<TFunction, C*, P1, P2, P3, P4, P5, P6>(
02141             iFreeMethod, iObject, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4), TArg5::arg(p5), TArg6::arg(p6) );
02142     }
02143 
02144     /** call non-const "free method" with 7 arguments translated from python arguments, 
02145      *  passing iObject as pointer
02146      */
02147     template <typename C, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7>
02148     static PyObject* callFree( PyObject* args, CppClass* iObject, R (*iFreeMethod)(C*, P1, P2, P3, P4, P5, P6, P7) )
02149     {
02150         typedef R (*TFunction)(C*, P1, P2, P3, P4, P5, P6, P7);
02151         typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
02152         typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
02153         typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
02154         typedef ArgumentTraits<P4> TArg4; typedef typename TArg4::TStorage S4; S4 p4;
02155         typedef ArgumentTraits<P5> TArg5; typedef typename TArg5::TStorage S5; S5 p5;
02156         typedef ArgumentTraits<P6> TArg6; typedef typename TArg6::TStorage S6; S6 p6;
02157         typedef ArgumentTraits<P7> TArg7; typedef typename TArg7::TStorage S7; S7 p7;
02158         
02159         if( decodeTuple<S1, S2, S3, S4, S5, S6, S7>( args, p1, p2, p3, p4, p5, p6, p7 ) != 0 )
02160         {
02161             return 0;
02162         }
02163         return Caller<R>::template function<TFunction, C*, P1, P2, P3, P4, P5, P6, P7>(
02164             iFreeMethod, iObject, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4), TArg5::arg(p5), TArg6::arg(p6), TArg7::arg(p7) );
02165     }
02166 
02167     /** call non-const "free method" with 8 arguments translated from python arguments, 
02168      *  passing iObject as pointer
02169      */
02170     template <typename C, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8>
02171     static PyObject* callFree( PyObject* args, CppClass* iObject, R (*iFreeMethod)(C*, P1, P2, P3, P4, P5, P6, P7, P8) )
02172     {
02173         typedef R (*TFunction)(C*, P1, P2, P3, P4, P5, P6, P7, P8);
02174         typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
02175         typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
02176         typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
02177         typedef ArgumentTraits<P4> TArg4; typedef typename TArg4::TStorage S4; S4 p4;
02178         typedef ArgumentTraits<P5> TArg5; typedef typename TArg5::TStorage S5; S5 p5;
02179         typedef ArgumentTraits<P6> TArg6; typedef typename TArg6::TStorage S6; S6 p6;
02180         typedef ArgumentTraits<P7> TArg7; typedef typename TArg7::TStorage S7; S7 p7;
02181         typedef ArgumentTraits<P8> TArg8; typedef typename TArg8::TStorage S8; S8 p8;
02182         
02183         if( decodeTuple<S1, S2, S3, S4, S5, S6, S7, S8>( args, p1, p2, p3, p4, p5, p6, p7, p8 ) != 0 )
02184         {
02185             return 0;
02186         }
02187         return Caller<R>::template function<TFunction, C*, P1, P2, P3, P4, P5, P6, P7, P8>(
02188             iFreeMethod, iObject, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4), TArg5::arg(p5), TArg6::arg(p6), TArg7::arg(p7), TArg8::arg(p8) );
02189     }
02190 
02191     /** call non-const "free method" with 9 arguments translated from python arguments, 
02192      *  passing iObject as pointer
02193      */
02194     template <typename C, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9>
02195     static PyObject* callFree( PyObject* args, CppClass* iObject, R (*iFreeMethod)(C*, P1, P2, P3, P4, P5, P6, P7, P8, P9) )
02196     {
02197         typedef R (*TFunction)(C*, P1, P2, P3, P4, P5, P6, P7, P8, P9);
02198         typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
02199         typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
02200         typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
02201         typedef ArgumentTraits<P4> TArg4; typedef typename TArg4::TStorage S4; S4 p4;
02202         typedef ArgumentTraits<P5> TArg5; typedef typename TArg5::TStorage S5; S5 p5;
02203         typedef ArgumentTraits<P6> TArg6; typedef typename TArg6::TStorage S6; S6 p6;
02204         typedef ArgumentTraits<P7> TArg7; typedef typename TArg7::TStorage S7; S7 p7;
02205         typedef ArgumentTraits<P8> TArg8; typedef typename TArg8::TStorage S8; S8 p8;
02206         typedef ArgumentTraits<P9> TArg9; typedef typename TArg9::TStorage S9; S9 p9;
02207         
02208         if( decodeTuple<S1, S2, S3, S4, S5, S6, S7, S8, S9>( args, p1, p2, p3, p4, p5, p6, p7, p8, p9 ) != 0 )
02209         {
02210             return 0;
02211         }
02212         return Caller<R>::template function<TFunction, C*, P1, P2, P3, P4, P5, P6, P7, P8, P9>(
02213             iFreeMethod, iObject, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4), TArg5::arg(p5), TArg6::arg(p6), TArg7::arg(p7), TArg8::arg(p8), TArg9::arg(p9) );
02214     }
02215 
02216     /** call non-const "free method" with 10 arguments translated from python arguments, 
02217      *  passing iObject as pointer
02218      */
02219     template <typename C, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10>
02220     static PyObject* callFree( PyObject* args, CppClass* iObject, R (*iFreeMethod)(C*, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10) )
02221     {
02222         typedef R (*TFunction)(C*, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10);
02223         typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
02224         typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
02225         typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
02226         typedef ArgumentTraits<P4> TArg4; typedef typename TArg4::TStorage S4; S4 p4;
02227         typedef ArgumentTraits<P5> TArg5; typedef typename TArg5::TStorage S5; S5 p5;
02228         typedef ArgumentTraits<P6> TArg6; typedef typename TArg6::TStorage S6; S6 p6;
02229         typedef ArgumentTraits<P7> TArg7; typedef typename TArg7::TStorage S7; S7 p7;
02230         typedef ArgumentTraits<P8> TArg8; typedef typename TArg8::TStorage S8; S8 p8;
02231         typedef ArgumentTraits<P9> TArg9; typedef typename TArg9::TStorage S9; S9 p9;
02232         typedef ArgumentTraits<P10> TArg10; typedef typename TArg10::TStorage S10; S10 p10;
02233         
02234         if( decodeTuple<S1, S2, S3, S4, S5, S6, S7, S8, S9, S10>( args, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10 ) != 0 )
02235         {
02236             return 0;
02237         }
02238         return Caller<R>::template function<TFunction, C*, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10>(
02239             iFreeMethod, iObject, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4), TArg5::arg(p5), TArg6::arg(p6), TArg7::arg(p7), TArg8::arg(p8), TArg9::arg(p9), TArg10::arg(p10) );
02240     }
02241 
02242     /** call non-const "free method" with 11 arguments translated from python arguments, 
02243      *  passing iObject as pointer
02244      */
02245     template <typename C, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10, typename P11>
02246     static PyObject* callFree( PyObject* args, CppClass* iObject, R (*iFreeMethod)(C*, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11) )
02247     {
02248         typedef R (*TFunction)(C*, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11);
02249         typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
02250         typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
02251         typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
02252         typedef ArgumentTraits<P4> TArg4; typedef typename TArg4::TStorage S4; S4 p4;
02253         typedef ArgumentTraits<P5> TArg5; typedef typename TArg5::TStorage S5; S5 p5;
02254         typedef ArgumentTraits<P6> TArg6; typedef typename TArg6::TStorage S6; S6 p6;
02255         typedef ArgumentTraits<P7> TArg7; typedef typename TArg7::TStorage S7; S7 p7;
02256         typedef ArgumentTraits<P8> TArg8; typedef typename TArg8::TStorage S8; S8 p8;
02257         typedef ArgumentTraits<P9> TArg9; typedef typename TArg9::TStorage S9; S9 p9;
02258         typedef ArgumentTraits<P10> TArg10; typedef typename TArg10::TStorage S10; S10 p10;
02259         typedef ArgumentTraits<P11> TArg11; typedef typename TArg11::TStorage S11; S11 p11;
02260         
02261         if( decodeTuple<S1, S2, S3, S4, S5, S6, S7, S8, S9, S10, S11>( args, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11 ) != 0 )
02262         {
02263             return 0;
02264         }
02265         return Caller<R>::template function<TFunction, C*, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11>(
02266             iFreeMethod, iObject, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4), TArg5::arg(p5), TArg6::arg(p6), TArg7::arg(p7), TArg8::arg(p8), TArg9::arg(p9), TArg10::arg(p10), TArg11::arg(p11) );
02267     }
02268 
02269     /** call non-const "free method" with 12 arguments translated from python arguments, 
02270      *  passing iObject as pointer
02271      */
02272     template <typename C, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10, typename P11, typename P12>
02273     static PyObject* callFree( PyObject* args, CppClass* iObject, R (*iFreeMethod)(C*, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12) )
02274     {
02275         typedef R (*TFunction)(C*, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12);
02276         typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
02277         typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
02278         typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
02279         typedef ArgumentTraits<P4> TArg4; typedef typename TArg4::TStorage S4; S4 p4;
02280         typedef ArgumentTraits<P5> TArg5; typedef typename TArg5::TStorage S5; S5 p5;
02281         typedef ArgumentTraits<P6> TArg6; typedef typename TArg6::TStorage S6; S6 p6;
02282         typedef ArgumentTraits<P7> TArg7; typedef typename TArg7::TStorage S7; S7 p7;
02283         typedef ArgumentTraits<P8> TArg8; typedef typename TArg8::TStorage S8; S8 p8;
02284         typedef ArgumentTraits<P9> TArg9; typedef typename TArg9::TStorage S9; S9 p9;
02285         typedef ArgumentTraits<P10> TArg10; typedef typename TArg10::TStorage S10; S10 p10;
02286         typedef ArgumentTraits<P11> TArg11; typedef typename TArg11::TStorage S11; S11 p11;
02287         typedef ArgumentTraits<P12> TArg12; typedef typename TArg12::TStorage S12; S12 p12;
02288         
02289         if( decodeTuple<S1, S2, S3, S4, S5, S6, S7, S8, S9, S10, S11, S12>( args, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12 ) != 0 )
02290         {
02291             return 0;
02292         }
02293         return Caller<R>::template function<TFunction, C*, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12>(
02294             iFreeMethod, iObject, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4), TArg5::arg(p5), TArg6::arg(p6), TArg7::arg(p7), TArg8::arg(p8), TArg9::arg(p9), TArg10::arg(p10), TArg11::arg(p11), TArg12::arg(p12) );
02295     }
02296 
02297     /** call non-const "free method" with 13 arguments translated from python arguments, 
02298      *  passing iObject as pointer
02299      */
02300     template <typename C, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10, typename P11, typename P12, typename P13>
02301     static PyObject* callFree( PyObject* args, CppClass* iObject, R (*iFreeMethod)(C*, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13) )
02302     {
02303         typedef R (*TFunction)(C*, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13);
02304         typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
02305         typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
02306         typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
02307         typedef ArgumentTraits<P4> TArg4; typedef typename TArg4::TStorage S4; S4 p4;
02308         typedef ArgumentTraits<P5> TArg5; typedef typename TArg5::TStorage S5; S5 p5;
02309         typedef ArgumentTraits<P6> TArg6; typedef typename TArg6::TStorage S6; S6 p6;
02310         typedef ArgumentTraits<P7> TArg7; typedef typename TArg7::TStorage S7; S7 p7;
02311         typedef ArgumentTraits<P8> TArg8; typedef typename TArg8::TStorage S8; S8 p8;
02312         typedef ArgumentTraits<P9> TArg9; typedef typename TArg9::TStorage S9; S9 p9;
02313         typedef ArgumentTraits<P10> TArg10; typedef typename TArg10::TStorage S10; S10 p10;
02314         typedef ArgumentTraits<P11> TArg11; typedef typename TArg11::TStorage S11; S11 p11;
02315         typedef ArgumentTraits<P12> TArg12; typedef typename TArg12::TStorage S12; S12 p12;
02316         typedef ArgumentTraits<P13> TArg13; typedef typename TArg13::TStorage S13; S13 p13;
02317         
02318         if( decodeTuple<S1, S2, S3, S4, S5, S6, S7, S8, S9, S10, S11, S12, S13>( args, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13 ) != 0 )
02319         {
02320             return 0;
02321         }
02322         return Caller<R>::template function<TFunction, C*, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13>(
02323             iFreeMethod, iObject, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4), TArg5::arg(p5), TArg6::arg(p6), TArg7::arg(p7), TArg8::arg(p8), TArg9::arg(p9), TArg10::arg(p10), TArg11::arg(p11), TArg12::arg(p12), TArg13::arg(p13) );
02324     }
02325 
02326     /** call non-const "free method" with 14 arguments translated from python arguments, 
02327      *  passing iObject as pointer
02328      */
02329     template <typename C, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10, typename P11, typename P12, typename P13, typename P14>
02330     static PyObject* callFree( PyObject* args, CppClass* iObject, R (*iFreeMethod)(C*, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14) )
02331     {
02332         typedef R (*TFunction)(C*, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14);
02333         typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
02334         typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
02335         typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
02336         typedef ArgumentTraits<P4> TArg4; typedef typename TArg4::TStorage S4; S4 p4;
02337         typedef ArgumentTraits<P5> TArg5; typedef typename TArg5::TStorage S5; S5 p5;
02338         typedef ArgumentTraits<P6> TArg6; typedef typename TArg6::TStorage S6; S6 p6;
02339         typedef ArgumentTraits<P7> TArg7; typedef typename TArg7::TStorage S7; S7 p7;
02340         typedef ArgumentTraits<P8> TArg8; typedef typename TArg8::TStorage S8; S8 p8;
02341         typedef ArgumentTraits<P9> TArg9; typedef typename TArg9::TStorage S9; S9 p9;
02342         typedef ArgumentTraits<P10> TArg10; typedef typename TArg10::TStorage S10; S10 p10;
02343         typedef ArgumentTraits<P11> TArg11; typedef typename TArg11::TStorage S11; S11 p11;
02344         typedef ArgumentTraits<P12> TArg12; typedef typename TArg12::TStorage S12; S12 p12;
02345         typedef ArgumentTraits<P13> TArg13; typedef typename TArg13::TStorage S13; S13 p13;
02346         typedef ArgumentTraits<P14> TArg14; typedef typename TArg14::TStorage S14; S14 p14;
02347         
02348         if( decodeTuple<S1, S2, S3, S4, S5, S6, S7, S8, S9, S10, S11, S12, S13, S14>( args, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14 ) != 0 )
02349         {
02350             return 0;
02351         }
02352         return Caller<R>::template function<TFunction, C*, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14>(
02353             iFreeMethod, iObject, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4), TArg5::arg(p5), TArg6::arg(p6), TArg7::arg(p7), TArg8::arg(p8), TArg9::arg(p9), TArg10::arg(p10), TArg11::arg(p11), TArg12::arg(p12), TArg13::arg(p13), TArg14::arg(p14) );
02354     }
02355 
02356     /** call non-const "free method" with 15 arguments translated from python arguments, 
02357      *  passing iObject as pointer
02358      */
02359     template <typename C, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10, typename P11, typename P12, typename P13, typename P14, typename P15>
02360     static PyObject* callFree( PyObject* args, CppClass* iObject, R (*iFreeMethod)(C*, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15) )
02361     {
02362         typedef R (*TFunction)(C*, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15);
02363         typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
02364         typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
02365         typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
02366         typedef ArgumentTraits<P4> TArg4; typedef typename TArg4::TStorage S4; S4 p4;
02367         typedef ArgumentTraits<P5> TArg5; typedef typename TArg5::TStorage S5; S5 p5;
02368         typedef ArgumentTraits<P6> TArg6; typedef typename TArg6::TStorage S6; S6 p6;
02369         typedef ArgumentTraits<P7> TArg7; typedef typename TArg7::TStorage S7; S7 p7;
02370         typedef ArgumentTraits<P8> TArg8; typedef typename TArg8::TStorage S8; S8 p8;
02371         typedef ArgumentTraits<P9> TArg9; typedef typename TArg9::TStorage S9; S9 p9;
02372         typedef ArgumentTraits<P10> TArg10; typedef typename TArg10::TStorage S10; S10 p10;
02373         typedef ArgumentTraits<P11> TArg11; typedef typename TArg11::TStorage S11; S11 p11;
02374         typedef ArgumentTraits<P12> TArg12; typedef typename TArg12::TStorage S12; S12 p12;
02375         typedef ArgumentTraits<P13> TArg13; typedef typename TArg13::TStorage S13; S13 p13;
02376         typedef ArgumentTraits<P14> TArg14; typedef typename TArg14::TStorage S14; S14 p14;
02377         typedef ArgumentTraits<P15> TArg15; typedef typename TArg15::TStorage S15; S15 p15;
02378         
02379         if( decodeTuple<S1, S2, S3, S4, S5, S6, S7, S8, S9, S10, S11, S12, S13, S14, S15>( args, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15 ) != 0 )
02380         {
02381             return 0;
02382         }
02383         return Caller<R>::template function<TFunction, C*, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15>(
02384             iFreeMethod, iObject, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4), TArg5::arg(p5), TArg6::arg(p6), TArg7::arg(p7), TArg8::arg(p8), TArg9::arg(p9), TArg10::arg(p10), TArg11::arg(p11), TArg12::arg(p12), TArg13::arg(p13), TArg14::arg(p14), TArg15::arg(p15) );
02385     }
02386 
02387 
02388     // "free" non-const methods passing iObject as reference
02389 
02390     /** call non const "free method" without arguments, passing iObject as reference
02391      */
02392     template <typename C, typename R>
02393     static PyObject* callFree( PyObject* args, CppClass* iObject, R (*iFreeMethod)(C&) )
02394     {
02395         typedef R (*TFunction)(C&);
02396         if( decodeTuple(args) != 0 )
02397         {
02398             return 0;
02399         }
02400         LASS_ASSERT(iObject);
02401         return Caller<R>::template function<TFunction, C& >(
02402             iFreeMethod, *iObject );
02403     }
02404 
02405     /** call non-const "free method" with 1 arguments translated from python arguments, 
02406      *  passing iObject as reference
02407      */
02408     template <typename C, typename R, typename P1>
02409     static PyObject* callFree( PyObject* args, CppClass* iObject, R (*iFreeMethod)(C&, P1) )
02410     {
02411         typedef R (*TFunction)(C&, P1);
02412         typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
02413         
02414         if( decodeTuple<S1>( args, p1 ) != 0 )
02415         {
02416             return 0;
02417         }
02418         LASS_ASSERT(iObject);
02419         return Caller<R>::template function<TFunction, C&, P1>(
02420             iFreeMethod, *iObject, TArg1::arg(p1) );
02421     }
02422 
02423     /** call non-const "free method" with 2 arguments translated from python arguments, 
02424      *  passing iObject as reference
02425      */
02426     template <typename C, typename R, typename P1, typename P2>
02427     static PyObject* callFree( PyObject* args, CppClass* iObject, R (*iFreeMethod)(C&, P1, P2) )
02428     {
02429         typedef R (*TFunction)(C&, P1, P2);
02430         typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
02431         typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
02432         
02433         if( decodeTuple<S1, S2>( args, p1, p2 ) != 0 )
02434         {
02435             return 0;
02436         }
02437         LASS_ASSERT(iObject);
02438         return Caller<R>::template function<TFunction, C&, P1, P2>(
02439             iFreeMethod, *iObject, TArg1::arg(p1), TArg2::arg(p2) );
02440     }
02441 
02442     /** call non-const "free method" with 3 arguments translated from python arguments, 
02443      *  passing iObject as reference
02444      */
02445     template <typename C, typename R, typename P1, typename P2, typename P3>
02446     static PyObject* callFree( PyObject* args, CppClass* iObject, R (*iFreeMethod)(C&, P1, P2, P3) )
02447     {
02448         typedef R (*TFunction)(C&, P1, P2, P3);
02449         typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
02450         typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
02451         typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
02452         
02453         if( decodeTuple<S1, S2, S3>( args, p1, p2, p3 ) != 0 )
02454         {
02455             return 0;
02456         }
02457         LASS_ASSERT(iObject);
02458         return Caller<R>::template function<TFunction, C&, P1, P2, P3>(
02459             iFreeMethod, *iObject, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3) );
02460     }
02461 
02462     /** call non-const "free method" with 4 arguments translated from python arguments, 
02463      *  passing iObject as reference
02464      */
02465     template <typename C, typename R, typename P1, typename P2, typename P3, typename P4>
02466     static PyObject* callFree( PyObject* args, CppClass* iObject, R (*iFreeMethod)(C&, P1, P2, P3, P4) )
02467     {
02468         typedef R (*TFunction)(C&, P1, P2, P3, P4);
02469         typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
02470         typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
02471         typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
02472         typedef ArgumentTraits<P4> TArg4; typedef typename TArg4::TStorage S4; S4 p4;
02473         
02474         if( decodeTuple<S1, S2, S3, S4>( args, p1, p2, p3, p4 ) != 0 )
02475         {
02476             return 0;
02477         }
02478         LASS_ASSERT(iObject);
02479         return Caller<R>::template function<TFunction, C&, P1, P2, P3, P4>(
02480             iFreeMethod, *iObject, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4) );
02481     }
02482 
02483     /** call non-const "free method" with 5 arguments translated from python arguments, 
02484      *  passing iObject as reference
02485      */
02486     template <typename C, typename R, typename P1, typename P2, typename P3, typename P4, typename P5>
02487     static PyObject* callFree( PyObject* args, CppClass* iObject, R (*iFreeMethod)(C&, P1, P2, P3, P4, P5) )
02488     {
02489         typedef R (*TFunction)(C&, P1, P2, P3, P4, P5);
02490         typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
02491         typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
02492         typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
02493         typedef ArgumentTraits<P4> TArg4; typedef typename TArg4::TStorage S4; S4 p4;
02494         typedef ArgumentTraits<P5> TArg5; typedef typename TArg5::TStorage S5; S5 p5;
02495         
02496         if( decodeTuple<S1, S2, S3, S4, S5>( args, p1, p2, p3, p4, p5 ) != 0 )
02497         {
02498             return 0;
02499         }
02500         LASS_ASSERT(iObject);
02501         return Caller<R>::template function<TFunction, C&, P1, P2, P3, P4, P5>(
02502             iFreeMethod, *iObject, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4), TArg5::arg(p5) );
02503     }
02504 
02505     /** call non-const "free method" with 6 arguments translated from python arguments, 
02506      *  passing iObject as reference
02507      */
02508     template <typename C, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6>
02509     static PyObject* callFree( PyObject* args, CppClass* iObject, R (*iFreeMethod)(C&, P1, P2, P3, P4, P5, P6) )
02510     {
02511         typedef R (*TFunction)(C&, P1, P2, P3, P4, P5, P6);
02512         typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
02513         typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
02514         typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
02515         typedef ArgumentTraits<P4> TArg4; typedef typename TArg4::TStorage S4; S4 p4;
02516         typedef ArgumentTraits<P5> TArg5; typedef typename TArg5::TStorage S5; S5 p5;
02517         typedef ArgumentTraits<P6> TArg6; typedef typename TArg6::TStorage S6; S6 p6;
02518         
02519         if( decodeTuple<S1, S2, S3, S4, S5, S6>( args, p1, p2, p3, p4, p5, p6 ) != 0 )
02520         {
02521             return 0;
02522         }
02523         LASS_ASSERT(iObject);
02524         return Caller<R>::template function<TFunction, C&, P1, P2, P3, P4, P5, P6>(
02525             iFreeMethod, *iObject, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4), TArg5::arg(p5), TArg6::arg(p6) );
02526     }
02527 
02528     /** call non-const "free method" with 7 arguments translated from python arguments, 
02529      *  passing iObject as reference
02530      */
02531     template <typename C, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7>
02532     static PyObject* callFree( PyObject* args, CppClass* iObject, R (*iFreeMethod)(C&, P1, P2, P3, P4, P5, P6, P7) )
02533     {
02534         typedef R (*TFunction)(C&, P1, P2, P3, P4, P5, P6, P7);
02535         typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
02536         typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
02537         typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
02538         typedef ArgumentTraits<P4> TArg4; typedef typename TArg4::TStorage S4; S4 p4;
02539         typedef ArgumentTraits<P5> TArg5; typedef typename TArg5::TStorage S5; S5 p5;
02540         typedef ArgumentTraits<P6> TArg6; typedef typename TArg6::TStorage S6; S6 p6;
02541         typedef ArgumentTraits<P7> TArg7; typedef typename TArg7::TStorage S7; S7 p7;
02542         
02543         if( decodeTuple<S1, S2, S3, S4, S5, S6, S7>( args, p1, p2, p3, p4, p5, p6, p7 ) != 0 )
02544         {
02545             return 0;
02546         }
02547         LASS_ASSERT(iObject);
02548         return Caller<R>::template function<TFunction, C&, P1, P2, P3, P4, P5, P6, P7>(
02549             iFreeMethod, *iObject, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4), TArg5::arg(p5), TArg6::arg(p6), TArg7::arg(p7) );
02550     }
02551 
02552     /** call non-const "free method" with 8 arguments translated from python arguments, 
02553      *  passing iObject as reference
02554      */
02555     template <typename C, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8>
02556     static PyObject* callFree( PyObject* args, CppClass* iObject, R (*iFreeMethod)(C&, P1, P2, P3, P4, P5, P6, P7, P8) )
02557     {
02558         typedef R (*TFunction)(C&, P1, P2, P3, P4, P5, P6, P7, P8);
02559         typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
02560         typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
02561         typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
02562         typedef ArgumentTraits<P4> TArg4; typedef typename TArg4::TStorage S4; S4 p4;
02563         typedef ArgumentTraits<P5> TArg5; typedef typename TArg5::TStorage S5; S5 p5;
02564         typedef ArgumentTraits<P6> TArg6; typedef typename TArg6::TStorage S6; S6 p6;
02565         typedef ArgumentTraits<P7> TArg7; typedef typename TArg7::TStorage S7; S7 p7;
02566         typedef ArgumentTraits<P8> TArg8; typedef typename TArg8::TStorage S8; S8 p8;
02567         
02568         if( decodeTuple<S1, S2, S3, S4, S5, S6, S7, S8>( args, p1, p2, p3, p4, p5, p6, p7, p8 ) != 0 )
02569         {
02570             return 0;
02571         }
02572         LASS_ASSERT(iObject);
02573         return Caller<R>::template function<TFunction, C&, P1, P2, P3, P4, P5, P6, P7, P8>(
02574             iFreeMethod, *iObject, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4), TArg5::arg(p5), TArg6::arg(p6), TArg7::arg(p7), TArg8::arg(p8) );
02575     }
02576 
02577     /** call non-const "free method" with 9 arguments translated from python arguments, 
02578      *  passing iObject as reference
02579      */
02580     template <typename C, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9>
02581     static PyObject* callFree( PyObject* args, CppClass* iObject, R (*iFreeMethod)(C&, P1, P2, P3, P4, P5, P6, P7, P8, P9) )
02582     {
02583         typedef R (*TFunction)(C&, P1, P2, P3, P4, P5, P6, P7, P8, P9);
02584         typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
02585         typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
02586         typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
02587         typedef ArgumentTraits<P4> TArg4; typedef typename TArg4::TStorage S4; S4 p4;
02588         typedef ArgumentTraits<P5> TArg5; typedef typename TArg5::TStorage S5; S5 p5;
02589         typedef ArgumentTraits<P6> TArg6; typedef typename TArg6::TStorage S6; S6 p6;
02590         typedef ArgumentTraits<P7> TArg7; typedef typename TArg7::TStorage S7; S7 p7;
02591         typedef ArgumentTraits<P8> TArg8; typedef typename TArg8::TStorage S8; S8 p8;
02592         typedef ArgumentTraits<P9> TArg9; typedef typename TArg9::TStorage S9; S9 p9;
02593         
02594         if( decodeTuple<S1, S2, S3, S4, S5, S6, S7, S8, S9>( args, p1, p2, p3, p4, p5, p6, p7, p8, p9 ) != 0 )
02595         {
02596             return 0;
02597         }
02598         LASS_ASSERT(iObject);
02599         return Caller<R>::template function<TFunction, C&, P1, P2, P3, P4, P5, P6, P7, P8, P9>(
02600             iFreeMethod, *iObject, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4), TArg5::arg(p5), TArg6::arg(p6), TArg7::arg(p7), TArg8::arg(p8), TArg9::arg(p9) );
02601     }
02602 
02603     /** call non-const "free method" with 10 arguments translated from python arguments, 
02604      *  passing iObject as reference
02605      */
02606     template <typename C, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10>
02607     static PyObject* callFree( PyObject* args, CppClass* iObject, R (*iFreeMethod)(C&, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10) )
02608     {
02609         typedef R (*TFunction)(C&, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10);
02610         typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
02611         typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
02612         typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
02613         typedef ArgumentTraits<P4> TArg4; typedef typename TArg4::TStorage S4; S4 p4;
02614         typedef ArgumentTraits<P5> TArg5; typedef typename TArg5::TStorage S5; S5 p5;
02615         typedef ArgumentTraits<P6> TArg6; typedef typename TArg6::TStorage S6; S6 p6;
02616         typedef ArgumentTraits<P7> TArg7; typedef typename TArg7::TStorage S7; S7 p7;
02617         typedef ArgumentTraits<P8> TArg8; typedef typename TArg8::TStorage S8; S8 p8;
02618         typedef ArgumentTraits<P9> TArg9; typedef typename TArg9::TStorage S9; S9 p9;
02619         typedef ArgumentTraits<P10> TArg10; typedef typename TArg10::TStorage S10; S10 p10;
02620         
02621         if( decodeTuple<S1, S2, S3, S4, S5, S6, S7, S8, S9, S10>( args, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10 ) != 0 )
02622         {
02623             return 0;
02624         }
02625         LASS_ASSERT(iObject);
02626         return Caller<R>::template function<TFunction, C&, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10>(
02627             iFreeMethod, *iObject, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4), TArg5::arg(p5), TArg6::arg(p6), TArg7::arg(p7), TArg8::arg(p8), TArg9::arg(p9), TArg10::arg(p10) );
02628     }
02629 
02630     /** call non-const "free method" with 11 arguments translated from python arguments, 
02631      *  passing iObject as reference
02632      */
02633     template <typename C, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10, typename P11>
02634     static PyObject* callFree( PyObject* args, CppClass* iObject, R (*iFreeMethod)(C&, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11) )
02635     {
02636         typedef R (*TFunction)(C&, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11);
02637         typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
02638         typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
02639         typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
02640         typedef ArgumentTraits<P4> TArg4; typedef typename TArg4::TStorage S4; S4 p4;
02641         typedef ArgumentTraits<P5> TArg5; typedef typename TArg5::TStorage S5; S5 p5;
02642         typedef ArgumentTraits<P6> TArg6; typedef typename TArg6::TStorage S6; S6 p6;
02643         typedef ArgumentTraits<P7> TArg7; typedef typename TArg7::TStorage S7; S7 p7;
02644         typedef ArgumentTraits<P8> TArg8; typedef typename TArg8::TStorage S8; S8 p8;
02645         typedef ArgumentTraits<P9> TArg9; typedef typename TArg9::TStorage S9; S9 p9;
02646         typedef ArgumentTraits<P10> TArg10; typedef typename TArg10::TStorage S10; S10 p10;
02647         typedef ArgumentTraits<P11> TArg11; typedef typename TArg11::TStorage S11; S11 p11;
02648         
02649         if( decodeTuple<S1, S2, S3, S4, S5, S6, S7, S8, S9, S10, S11>( args, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11 ) != 0 )
02650         {
02651             return 0;
02652         }
02653         LASS_ASSERT(iObject);
02654         return Caller<R>::template function<TFunction, C&, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11>(
02655             iFreeMethod, *iObject, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4), TArg5::arg(p5), TArg6::arg(p6), TArg7::arg(p7), TArg8::arg(p8), TArg9::arg(p9), TArg10::arg(p10), TArg11::arg(p11) );
02656     }
02657 
02658     /** call non-const "free method" with 12 arguments translated from python arguments, 
02659      *  passing iObject as reference
02660      */
02661     template <typename C, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10, typename P11, typename P12>
02662     static PyObject* callFree( PyObject* args, CppClass* iObject, R (*iFreeMethod)(C&, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12) )
02663     {
02664         typedef R (*TFunction)(C&, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12);
02665         typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
02666         typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
02667         typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
02668         typedef ArgumentTraits<P4> TArg4; typedef typename TArg4::TStorage S4; S4 p4;
02669         typedef ArgumentTraits<P5> TArg5; typedef typename TArg5::TStorage S5; S5 p5;
02670         typedef ArgumentTraits<P6> TArg6; typedef typename TArg6::TStorage S6; S6 p6;
02671         typedef ArgumentTraits<P7> TArg7; typedef typename TArg7::TStorage S7; S7 p7;
02672         typedef ArgumentTraits<P8> TArg8; typedef typename TArg8::TStorage S8; S8 p8;
02673         typedef ArgumentTraits<P9> TArg9; typedef typename TArg9::TStorage S9; S9 p9;
02674         typedef ArgumentTraits<P10> TArg10; typedef typename TArg10::TStorage S10; S10 p10;
02675         typedef ArgumentTraits<P11> TArg11; typedef typename TArg11::TStorage S11; S11 p11;
02676         typedef ArgumentTraits<P12> TArg12; typedef typename TArg12::TStorage S12; S12 p12;
02677         
02678         if( decodeTuple<S1, S2, S3, S4, S5, S6, S7, S8, S9, S10, S11, S12>( args, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12 ) != 0 )
02679         {
02680             return 0;
02681         }
02682         LASS_ASSERT(iObject);
02683         return Caller<R>::template function<TFunction, C&, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12>(
02684             iFreeMethod, *iObject, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4), TArg5::arg(p5), TArg6::arg(p6), TArg7::arg(p7), TArg8::arg(p8), TArg9::arg(p9), TArg10::arg(p10), TArg11::arg(p11), TArg12::arg(p12) );
02685     }
02686 
02687     /** call non-const "free method" with 13 arguments translated from python arguments, 
02688      *  passing iObject as reference
02689      */
02690     template <typename C, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10, typename P11, typename P12, typename P13>
02691     static PyObject* callFree( PyObject* args, CppClass* iObject, R (*iFreeMethod)(C&, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13) )
02692     {
02693         typedef R (*TFunction)(C&, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13);
02694         typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
02695         typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
02696         typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
02697         typedef ArgumentTraits<P4> TArg4; typedef typename TArg4::TStorage S4; S4 p4;
02698         typedef ArgumentTraits<P5> TArg5; typedef typename TArg5::TStorage S5; S5 p5;
02699         typedef ArgumentTraits<P6> TArg6; typedef typename TArg6::TStorage S6; S6 p6;
02700         typedef ArgumentTraits<P7> TArg7; typedef typename TArg7::TStorage S7; S7 p7;
02701         typedef ArgumentTraits<P8> TArg8; typedef typename TArg8::TStorage S8; S8 p8;
02702         typedef ArgumentTraits<P9> TArg9; typedef typename TArg9::TStorage S9; S9 p9;
02703         typedef ArgumentTraits<P10> TArg10; typedef typename TArg10::TStorage S10; S10 p10;
02704         typedef ArgumentTraits<P11> TArg11; typedef typename TArg11::TStorage S11; S11 p11;
02705         typedef ArgumentTraits<P12> TArg12; typedef typename TArg12::TStorage S12; S12 p12;
02706         typedef ArgumentTraits<P13> TArg13; typedef typename TArg13::TStorage S13; S13 p13;
02707         
02708         if( decodeTuple<S1, S2, S3, S4, S5, S6, S7, S8, S9, S10, S11, S12, S13>( args, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13 ) != 0 )
02709         {
02710             return 0;
02711         }
02712         LASS_ASSERT(iObject);
02713         return Caller<R>::template function<TFunction, C&, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13>(
02714             iFreeMethod, *iObject, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4), TArg5::arg(p5), TArg6::arg(p6), TArg7::arg(p7), TArg8::arg(p8), TArg9::arg(p9), TArg10::arg(p10), TArg11::arg(p11), TArg12::arg(p12), TArg13::arg(p13) );
02715     }
02716 
02717     /** call non-const "free method" with 14 arguments translated from python arguments, 
02718      *  passing iObject as reference
02719      */
02720     template <typename C, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10, typename P11, typename P12, typename P13, typename P14>
02721     static PyObject* callFree( PyObject* args, CppClass* iObject, R (*iFreeMethod)(C&, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14) )
02722     {
02723         typedef R (*TFunction)(C&, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14);
02724         typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
02725         typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
02726         typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
02727         typedef ArgumentTraits<P4> TArg4; typedef typename TArg4::TStorage S4; S4 p4;
02728         typedef ArgumentTraits<P5> TArg5; typedef typename TArg5::TStorage S5; S5 p5;
02729         typedef ArgumentTraits<P6> TArg6; typedef typename TArg6::TStorage S6; S6 p6;
02730         typedef ArgumentTraits<P7> TArg7; typedef typename TArg7::TStorage S7; S7 p7;
02731         typedef ArgumentTraits<P8> TArg8; typedef typename TArg8::TStorage S8; S8 p8;
02732         typedef ArgumentTraits<P9> TArg9; typedef typename TArg9::TStorage S9; S9 p9;
02733         typedef ArgumentTraits<P10> TArg10; typedef typename TArg10::TStorage S10; S10 p10;
02734         typedef ArgumentTraits<P11> TArg11; typedef typename TArg11::TStorage S11; S11 p11;
02735         typedef ArgumentTraits<P12> TArg12; typedef typename TArg12::TStorage S12; S12 p12;
02736         typedef ArgumentTraits<P13> TArg13; typedef typename TArg13::TStorage S13; S13 p13;
02737         typedef ArgumentTraits<P14> TArg14; typedef typename TArg14::TStorage S14; S14 p14;
02738         
02739         if( decodeTuple<S1, S2, S3, S4, S5, S6, S7, S8, S9, S10, S11, S12, S13, S14>( args, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14 ) != 0 )
02740         {
02741             return 0;
02742         }
02743         LASS_ASSERT(iObject);
02744         return Caller<R>::template function<TFunction, C&, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14>(
02745             iFreeMethod, *iObject, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4), TArg5::arg(p5), TArg6::arg(p6), TArg7::arg(p7), TArg8::arg(p8), TArg9::arg(p9), TArg10::arg(p10), TArg11::arg(p11), TArg12::arg(p12), TArg13::arg(p13), TArg14::arg(p14) );
02746     }
02747 
02748     /** call non-const "free method" with 15 arguments translated from python arguments, 
02749      *  passing iObject as reference
02750      */
02751     template <typename C, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10, typename P11, typename P12, typename P13, typename P14, typename P15>
02752     static PyObject* callFree( PyObject* args, CppClass* iObject, R (*iFreeMethod)(C&, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15) )
02753     {
02754         typedef R (*TFunction)(C&, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15);
02755         typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
02756         typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
02757         typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
02758         typedef ArgumentTraits<P4> TArg4; typedef typename TArg4::TStorage S4; S4 p4;
02759         typedef ArgumentTraits<P5> TArg5; typedef typename TArg5::TStorage S5; S5 p5;
02760         typedef ArgumentTraits<P6> TArg6; typedef typename TArg6::TStorage S6; S6 p6;
02761         typedef ArgumentTraits<P7> TArg7; typedef typename TArg7::TStorage S7; S7 p7;
02762         typedef ArgumentTraits<P8> TArg8; typedef typename TArg8::TStorage S8; S8 p8;
02763         typedef ArgumentTraits<P9> TArg9; typedef typename TArg9::TStorage S9; S9 p9;
02764         typedef ArgumentTraits<P10> TArg10; typedef typename TArg10::TStorage S10; S10 p10;
02765         typedef ArgumentTraits<P11> TArg11; typedef typename TArg11::TStorage S11; S11 p11;
02766         typedef ArgumentTraits<P12> TArg12; typedef typename TArg12::TStorage S12; S12 p12;
02767         typedef ArgumentTraits<P13> TArg13; typedef typename TArg13::TStorage S13; S13 p13;
02768         typedef ArgumentTraits<P14> TArg14; typedef typename TArg14::TStorage S14; S14 p14;
02769         typedef ArgumentTraits<P15> TArg15; typedef typename TArg15::TStorage S15; S15 p15;
02770         
02771         if( decodeTuple<S1, S2, S3, S4, S5, S6, S7, S8, S9, S10, S11, S12, S13, S14, S15>( args, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15 ) != 0 )
02772         {
02773             return 0;
02774         }
02775         LASS_ASSERT(iObject);
02776         return Caller<R>::template function<TFunction, C&, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15>(
02777             iFreeMethod, *iObject, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4), TArg5::arg(p5), TArg6::arg(p6), TArg7::arg(p7), TArg8::arg(p8), TArg9::arg(p9), TArg10::arg(p10), TArg11::arg(p11), TArg12::arg(p12), TArg13::arg(p13), TArg14::arg(p14), TArg15::arg(p15) );
02778     }
02779 
02780 
02781     // "free" const methods passing iObject as pointer
02782 
02783     /** call const "free method" without arguments, passing iObject as pointer
02784      */
02785     template <typename C, typename R>
02786     static PyObject* callFree( PyObject* args, const CppClass* iObject, R (*iFreeMethod)(const C*) )
02787     {
02788         typedef R (*TFunction)(const C*);
02789         if( decodeTuple(args) != 0 )
02790         {
02791             return 0;
02792         }
02793         return Caller<R>::template function<TFunction, const C* >(
02794             iFreeMethod, iObject );
02795     }
02796 
02797     /** call const "free method" with 1 arguments translated from python arguments, 
02798      *  passing iObject as pointer
02799      */
02800     template <typename C, typename R, typename P1>
02801     static PyObject* callFree( PyObject* args, const CppClass* iObject, R (*iFreeMethod)(const C*, P1) )
02802     {
02803         typedef R (*TFunction)(const C*, P1);
02804         typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
02805         
02806         if( decodeTuple<S1>( args, p1 ) != 0 )
02807         {
02808             return 0;
02809         }
02810         return Caller<R>::template function<TFunction, const C*, P1>(
02811             iFreeMethod, iObject, TArg1::arg(p1) );
02812     }
02813 
02814     /** call const "free method" with 2 arguments translated from python arguments, 
02815      *  passing iObject as pointer
02816      */
02817     template <typename C, typename R, typename P1, typename P2>
02818     static PyObject* callFree( PyObject* args, const CppClass* iObject, R (*iFreeMethod)(const C*, P1, P2) )
02819     {
02820         typedef R (*TFunction)(const C*, P1, P2);
02821         typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
02822         typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
02823         
02824         if( decodeTuple<S1, S2>( args, p1, p2 ) != 0 )
02825         {
02826             return 0;
02827         }
02828         return Caller<R>::template function<TFunction, const C*, P1, P2>(
02829             iFreeMethod, iObject, TArg1::arg(p1), TArg2::arg(p2) );
02830     }
02831 
02832     /** call const "free method" with 3 arguments translated from python arguments, 
02833      *  passing iObject as pointer
02834      */
02835     template <typename C, typename R, typename P1, typename P2, typename P3>
02836     static PyObject* callFree( PyObject* args, const CppClass* iObject, R (*iFreeMethod)(const C*, P1, P2, P3) )
02837     {
02838         typedef R (*TFunction)(const C*, P1, P2, P3);
02839         typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
02840         typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
02841         typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
02842         
02843         if( decodeTuple<S1, S2, S3>( args, p1, p2, p3 ) != 0 )
02844         {
02845             return 0;
02846         }
02847         return Caller<R>::template function<TFunction, const C*, P1, P2, P3>(
02848             iFreeMethod, iObject, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3) );
02849     }
02850 
02851     /** call const "free method" with 4 arguments translated from python arguments, 
02852      *  passing iObject as pointer
02853      */
02854     template <typename C, typename R, typename P1, typename P2, typename P3, typename P4>
02855     static PyObject* callFree( PyObject* args, const CppClass* iObject, R (*iFreeMethod)(const C*, P1, P2, P3, P4) )
02856     {
02857         typedef R (*TFunction)(const C*, P1, P2, P3, P4);
02858         typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
02859         typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
02860         typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
02861         typedef ArgumentTraits<P4> TArg4; typedef typename TArg4::TStorage S4; S4 p4;
02862         
02863         if( decodeTuple<S1, S2, S3, S4>( args, p1, p2, p3, p4 ) != 0 )
02864         {
02865             return 0;
02866         }
02867         return Caller<R>::template function<TFunction, const C*, P1, P2, P3, P4>(
02868             iFreeMethod, iObject, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4) );
02869     }
02870 
02871     /** call const "free method" with 5 arguments translated from python arguments, 
02872      *  passing iObject as pointer
02873      */
02874     template <typename C, typename R, typename P1, typename P2, typename P3, typename P4, typename P5>
02875     static PyObject* callFree( PyObject* args, const CppClass* iObject, R (*iFreeMethod)(const C*, P1, P2, P3, P4, P5) )
02876     {
02877         typedef R (*TFunction)(const C*, P1, P2, P3, P4, P5);
02878         typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
02879         typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
02880         typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
02881         typedef ArgumentTraits<P4> TArg4; typedef typename TArg4::TStorage S4; S4 p4;
02882         typedef ArgumentTraits<P5> TArg5; typedef typename TArg5::TStorage S5; S5 p5;
02883         
02884         if( decodeTuple<S1, S2, S3, S4, S5>( args, p1, p2, p3, p4, p5 ) != 0 )
02885         {
02886             return 0;
02887         }
02888         return Caller<R>::template function<TFunction, const C*, P1, P2, P3, P4, P5>(
02889             iFreeMethod, iObject, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4), TArg5::arg(p5) );
02890     }
02891 
02892     /** call const "free method" with 6 arguments translated from python arguments, 
02893      *  passing iObject as pointer
02894      */
02895     template <typename C, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6>
02896     static PyObject* callFree( PyObject* args, const CppClass* iObject, R (*iFreeMethod)(const C*, P1, P2, P3, P4, P5, P6) )
02897     {
02898         typedef R (*TFunction)(const C*, P1, P2, P3, P4, P5, P6);
02899         typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
02900         typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
02901         typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
02902         typedef ArgumentTraits<P4> TArg4; typedef typename TArg4::TStorage S4; S4 p4;
02903         typedef ArgumentTraits<P5> TArg5; typedef typename TArg5::TStorage S5; S5 p5;
02904         typedef ArgumentTraits<P6> TArg6; typedef typename TArg6::TStorage S6; S6 p6;
02905         
02906         if( decodeTuple<S1, S2, S3, S4, S5, S6>( args, p1, p2, p3, p4, p5, p6 ) != 0 )
02907         {
02908             return 0;
02909         }
02910         return Caller<R>::template function<TFunction, const C*, P1, P2, P3, P4, P5, P6>(
02911             iFreeMethod, iObject, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4), TArg5::arg(p5), TArg6::arg(p6) );
02912     }
02913 
02914     /** call const "free method" with 7 arguments translated from python arguments, 
02915      *  passing iObject as pointer
02916      */
02917     template <typename C, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7>
02918     static PyObject* callFree( PyObject* args, const CppClass* iObject, R (*iFreeMethod)(const C*, P1, P2, P3, P4, P5, P6, P7) )
02919     {
02920         typedef R (*TFunction)(const C*, P1, P2, P3, P4, P5, P6, P7);
02921         typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
02922         typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
02923         typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
02924         typedef ArgumentTraits<P4> TArg4; typedef typename TArg4::TStorage S4; S4 p4;
02925         typedef ArgumentTraits<P5> TArg5; typedef typename TArg5::TStorage S5; S5 p5;
02926         typedef ArgumentTraits<P6> TArg6; typedef typename TArg6::TStorage S6; S6 p6;
02927         typedef ArgumentTraits<P7> TArg7; typedef typename TArg7::TStorage S7; S7 p7;
02928         
02929         if( decodeTuple<S1, S2, S3, S4, S5, S6, S7>( args, p1, p2, p3, p4, p5, p6, p7 ) != 0 )
02930         {
02931             return 0;
02932         }
02933         return Caller<R>::template function<TFunction, const C*, P1, P2, P3, P4, P5, P6, P7>(
02934             iFreeMethod, iObject, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4), TArg5::arg(p5), TArg6::arg(p6), TArg7::arg(p7) );
02935     }
02936 
02937     /** call const "free method" with 8 arguments translated from python arguments, 
02938      *  passing iObject as pointer
02939      */
02940     template <typename C, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8>
02941     static PyObject* callFree( PyObject* args, const CppClass* iObject, R (*iFreeMethod)(const C*, P1, P2, P3, P4, P5, P6, P7, P8) )
02942     {
02943         typedef R (*TFunction)(const C*, P1, P2, P3, P4, P5, P6, P7, P8);
02944         typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
02945         typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
02946         typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
02947         typedef ArgumentTraits<P4> TArg4; typedef typename TArg4::TStorage S4; S4 p4;
02948         typedef ArgumentTraits<P5> TArg5; typedef typename TArg5::TStorage S5; S5 p5;
02949         typedef ArgumentTraits<P6> TArg6; typedef typename TArg6::TStorage S6; S6 p6;
02950         typedef ArgumentTraits<P7> TArg7; typedef typename TArg7::TStorage S7; S7 p7;
02951         typedef ArgumentTraits<P8> TArg8; typedef typename TArg8::TStorage S8; S8 p8;
02952         
02953         if( decodeTuple<S1, S2, S3, S4, S5, S6, S7, S8>( args, p1, p2, p3, p4, p5, p6, p7, p8 ) != 0 )
02954         {
02955             return 0;
02956         }
02957         return Caller<R>::template function<TFunction, const C*, P1, P2, P3, P4, P5, P6, P7, P8>(
02958             iFreeMethod, iObject, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4), TArg5::arg(p5), TArg6::arg(p6), TArg7::arg(p7), TArg8::arg(p8) );
02959     }
02960 
02961     /** call const "free method" with 9 arguments translated from python arguments, 
02962      *  passing iObject as pointer
02963      */
02964     template <typename C, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9>
02965     static PyObject* callFree( PyObject* args, const CppClass* iObject, R (*iFreeMethod)(const C*, P1, P2, P3, P4, P5, P6, P7, P8, P9) )
02966     {
02967         typedef R (*TFunction)(const C*, P1, P2, P3, P4, P5, P6, P7, P8, P9);
02968         typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
02969         typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
02970         typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
02971         typedef ArgumentTraits<P4> TArg4; typedef typename TArg4::TStorage S4; S4 p4;
02972         typedef ArgumentTraits<P5> TArg5; typedef typename TArg5::TStorage S5; S5 p5;
02973         typedef ArgumentTraits<P6> TArg6; typedef typename TArg6::TStorage S6; S6 p6;
02974         typedef ArgumentTraits<P7> TArg7; typedef typename TArg7::TStorage S7; S7 p7;
02975         typedef ArgumentTraits<P8> TArg8; typedef typename TArg8::TStorage S8; S8 p8;
02976         typedef ArgumentTraits<P9> TArg9; typedef typename TArg9::TStorage S9; S9 p9;
02977         
02978         if( decodeTuple<S1, S2, S3, S4, S5, S6, S7, S8, S9>( args, p1, p2, p3, p4, p5, p6, p7, p8, p9 ) != 0 )
02979         {
02980             return 0;
02981         }
02982         return Caller<R>::template function<TFunction, const C*, P1, P2, P3, P4, P5, P6, P7, P8, P9>(
02983             iFreeMethod, iObject, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4), TArg5::arg(p5), TArg6::arg(p6), TArg7::arg(p7), TArg8::arg(p8), TArg9::arg(p9) );
02984     }
02985 
02986     /** call const "free method" with 10 arguments translated from python arguments, 
02987      *  passing iObject as pointer
02988      */
02989     template <typename C, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10>
02990     static PyObject* callFree( PyObject* args, const CppClass* iObject, R (*iFreeMethod)(const C*, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10) )
02991     {
02992         typedef R (*TFunction)(const C*, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10);
02993         typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
02994         typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
02995         typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
02996         typedef ArgumentTraits<P4> TArg4; typedef typename TArg4::TStorage S4; S4 p4;
02997         typedef ArgumentTraits<P5> TArg5; typedef typename TArg5::TStorage S5; S5 p5;
02998         typedef ArgumentTraits<P6> TArg6; typedef typename TArg6::TStorage S6; S6 p6;
02999         typedef ArgumentTraits<P7> TArg7; typedef typename TArg7::TStorage S7; S7 p7;
03000         typedef ArgumentTraits<P8> TArg8; typedef typename TArg8::TStorage S8; S8 p8;
03001         typedef ArgumentTraits<P9> TArg9; typedef typename TArg9::TStorage S9; S9 p9;
03002         typedef ArgumentTraits<P10> TArg10; typedef typename TArg10::TStorage S10; S10 p10;
03003         
03004         if( decodeTuple<S1, S2, S3, S4, S5, S6, S7, S8, S9, S10>( args, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10 ) != 0 )
03005         {
03006             return 0;
03007         }
03008         return Caller<R>::template function<TFunction, const C*, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10>(
03009             iFreeMethod, iObject, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4), TArg5::arg(p5), TArg6::arg(p6), TArg7::arg(p7), TArg8::arg(p8), TArg9::arg(p9), TArg10::arg(p10) );
03010     }
03011 
03012     /** call const "free method" with 11 arguments translated from python arguments, 
03013      *  passing iObject as pointer
03014      */
03015     template <typename C, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10, typename P11>
03016     static PyObject* callFree( PyObject* args, const CppClass* iObject, R (*iFreeMethod)(const C*, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11) )
03017     {
03018         typedef R (*TFunction)(const C*, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11);
03019         typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
03020         typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
03021         typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
03022         typedef ArgumentTraits<P4> TArg4; typedef typename TArg4::TStorage S4; S4 p4;
03023         typedef ArgumentTraits<P5> TArg5; typedef typename TArg5::TStorage S5; S5 p5;
03024         typedef ArgumentTraits<P6> TArg6; typedef typename TArg6::TStorage S6; S6 p6;
03025         typedef ArgumentTraits<P7> TArg7; typedef typename TArg7::TStorage S7; S7 p7;
03026         typedef ArgumentTraits<P8> TArg8; typedef typename TArg8::TStorage S8; S8 p8;
03027         typedef ArgumentTraits<P9> TArg9; typedef typename TArg9::TStorage S9; S9 p9;
03028         typedef ArgumentTraits<P10> TArg10; typedef typename TArg10::TStorage S10; S10 p10;
03029         typedef ArgumentTraits<P11> TArg11; typedef typename TArg11::TStorage S11; S11 p11;
03030         
03031         if( decodeTuple<S1, S2, S3, S4, S5, S6, S7, S8, S9, S10, S11>( args, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11 ) != 0 )
03032         {
03033             return 0;
03034         }
03035         return Caller<R>::template function<TFunction, const C*, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11>(
03036             iFreeMethod, iObject, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4), TArg5::arg(p5), TArg6::arg(p6), TArg7::arg(p7), TArg8::arg(p8), TArg9::arg(p9), TArg10::arg(p10), TArg11::arg(p11) );
03037     }
03038 
03039     /** call const "free method" with 12 arguments translated from python arguments, 
03040      *  passing iObject as pointer
03041      */
03042     template <typename C, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10, typename P11, typename P12>
03043     static PyObject* callFree( PyObject* args, const CppClass* iObject, R (*iFreeMethod)(const C*, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12) )
03044     {
03045         typedef R (*TFunction)(const C*, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12);
03046         typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
03047         typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
03048         typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
03049         typedef ArgumentTraits<P4> TArg4; typedef typename TArg4::TStorage S4; S4 p4;
03050         typedef ArgumentTraits<P5> TArg5; typedef typename TArg5::TStorage S5; S5 p5;
03051         typedef ArgumentTraits<P6> TArg6; typedef typename TArg6::TStorage S6; S6 p6;
03052         typedef ArgumentTraits<P7> TArg7; typedef typename TArg7::TStorage S7; S7 p7;
03053         typedef ArgumentTraits<P8> TArg8; typedef typename TArg8::TStorage S8; S8 p8;
03054         typedef ArgumentTraits<P9> TArg9; typedef typename TArg9::TStorage S9; S9 p9;
03055         typedef ArgumentTraits<P10> TArg10; typedef typename TArg10::TStorage S10; S10 p10;
03056         typedef ArgumentTraits<P11> TArg11; typedef typename TArg11::TStorage S11; S11 p11;
03057         typedef ArgumentTraits<P12> TArg12; typedef typename TArg12::TStorage S12; S12 p12;
03058         
03059         if( decodeTuple<S1, S2, S3, S4, S5, S6, S7, S8, S9, S10, S11, S12>( args, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12 ) != 0 )
03060         {
03061             return 0;
03062         }
03063         return Caller<R>::template function<TFunction, const C*, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12>(
03064             iFreeMethod, iObject, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4), TArg5::arg(p5), TArg6::arg(p6), TArg7::arg(p7), TArg8::arg(p8), TArg9::arg(p9), TArg10::arg(p10), TArg11::arg(p11), TArg12::arg(p12) );
03065     }
03066 
03067     /** call const "free method" with 13 arguments translated from python arguments, 
03068      *  passing iObject as pointer
03069      */
03070     template <typename C, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10, typename P11, typename P12, typename P13>
03071     static PyObject* callFree( PyObject* args, const CppClass* iObject, R (*iFreeMethod)(const C*, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13) )
03072     {
03073         typedef R (*TFunction)(const C*, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13);
03074         typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
03075         typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
03076         typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
03077         typedef ArgumentTraits<P4> TArg4; typedef typename TArg4::TStorage S4; S4 p4;
03078         typedef ArgumentTraits<P5> TArg5; typedef typename TArg5::TStorage S5; S5 p5;
03079         typedef ArgumentTraits<P6> TArg6; typedef typename TArg6::TStorage S6; S6 p6;
03080         typedef ArgumentTraits<P7> TArg7; typedef typename TArg7::TStorage S7; S7 p7;
03081         typedef ArgumentTraits<P8> TArg8; typedef typename TArg8::TStorage S8; S8 p8;
03082         typedef ArgumentTraits<P9> TArg9; typedef typename TArg9::TStorage S9; S9 p9;
03083         typedef ArgumentTraits<P10> TArg10; typedef typename TArg10::TStorage S10; S10 p10;
03084         typedef ArgumentTraits<P11> TArg11; typedef typename TArg11::TStorage S11; S11 p11;
03085         typedef ArgumentTraits<P12> TArg12; typedef typename TArg12::TStorage S12; S12 p12;
03086         typedef ArgumentTraits<P13> TArg13; typedef typename TArg13::TStorage S13; S13 p13;
03087         
03088         if( decodeTuple<S1, S2, S3, S4, S5, S6, S7, S8, S9, S10, S11, S12, S13>( args, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13 ) != 0 )
03089         {
03090             return 0;
03091         }
03092         return Caller<R>::template function<TFunction, const C*, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13>(
03093             iFreeMethod, iObject, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4), TArg5::arg(p5), TArg6::arg(p6), TArg7::arg(p7), TArg8::arg(p8), TArg9::arg(p9), TArg10::arg(p10), TArg11::arg(p11), TArg12::arg(p12), TArg13::arg(p13) );
03094     }
03095 
03096     /** call const "free method" with 14 arguments translated from python arguments, 
03097      *  passing iObject as pointer
03098      */
03099     template <typename C, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10, typename P11, typename P12, typename P13, typename P14>
03100     static PyObject* callFree( PyObject* args, const CppClass* iObject, R (*iFreeMethod)(const C*, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14) )
03101     {
03102         typedef R (*TFunction)(const C*, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14);
03103         typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
03104         typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
03105         typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
03106         typedef ArgumentTraits<P4> TArg4; typedef typename TArg4::TStorage S4; S4 p4;
03107         typedef ArgumentTraits<P5> TArg5; typedef typename TArg5::TStorage S5; S5 p5;
03108         typedef ArgumentTraits<P6> TArg6; typedef typename TArg6::TStorage S6; S6 p6;
03109         typedef ArgumentTraits<P7> TArg7; typedef typename TArg7::TStorage S7; S7 p7;
03110         typedef ArgumentTraits<P8> TArg8; typedef typename TArg8::TStorage S8; S8 p8;
03111         typedef ArgumentTraits<P9> TArg9; typedef typename TArg9::TStorage S9; S9 p9;
03112         typedef ArgumentTraits<P10> TArg10; typedef typename TArg10::TStorage S10; S10 p10;
03113         typedef ArgumentTraits<P11> TArg11; typedef typename TArg11::TStorage S11; S11 p11;
03114         typedef ArgumentTraits<P12> TArg12; typedef typename TArg12::TStorage S12; S12 p12;
03115         typedef ArgumentTraits<P13> TArg13; typedef typename TArg13::TStorage S13; S13 p13;
03116         typedef ArgumentTraits<P14> TArg14; typedef typename TArg14::TStorage S14; S14 p14;
03117         
03118         if( decodeTuple<S1, S2, S3, S4, S5, S6, S7, S8, S9, S10, S11, S12, S13, S14>( args, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14 ) != 0 )
03119         {
03120             return 0;
03121         }
03122         return Caller<R>::template function<TFunction, const C*, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14>(
03123             iFreeMethod, iObject, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4), TArg5::arg(p5), TArg6::arg(p6), TArg7::arg(p7), TArg8::arg(p8), TArg9::arg(p9), TArg10::arg(p10), TArg11::arg(p11), TArg12::arg(p12), TArg13::arg(p13), TArg14::arg(p14) );
03124     }
03125 
03126     /** call const "free method" with 15 arguments translated from python arguments, 
03127      *  passing iObject as pointer
03128      */
03129     template <typename C, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10, typename P11, typename P12, typename P13, typename P14, typename P15>
03130     static PyObject* callFree( PyObject* args, const CppClass* iObject, R (*iFreeMethod)(const C*, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15) )
03131     {
03132         typedef R (*TFunction)(const C*, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15);
03133         typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
03134         typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
03135         typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
03136         typedef ArgumentTraits<P4> TArg4; typedef typename TArg4::TStorage S4; S4 p4;
03137         typedef ArgumentTraits<P5> TArg5; typedef typename TArg5::TStorage S5; S5 p5;
03138         typedef ArgumentTraits<P6> TArg6; typedef typename TArg6::TStorage S6; S6 p6;
03139         typedef ArgumentTraits<P7> TArg7; typedef typename TArg7::TStorage S7; S7 p7;
03140         typedef ArgumentTraits<P8> TArg8; typedef typename TArg8::TStorage S8; S8 p8;
03141         typedef ArgumentTraits<P9> TArg9; typedef typename TArg9::TStorage S9; S9 p9;
03142         typedef ArgumentTraits<P10> TArg10; typedef typename TArg10::TStorage S10; S10 p10;
03143         typedef ArgumentTraits<P11> TArg11; typedef typename TArg11::TStorage S11; S11 p11;
03144         typedef ArgumentTraits<P12> TArg12; typedef typename TArg12::TStorage S12; S12 p12;
03145         typedef ArgumentTraits<P13> TArg13; typedef typename TArg13::TStorage S13; S13 p13;
03146         typedef ArgumentTraits<P14> TArg14; typedef typename TArg14::TStorage S14; S14 p14;
03147         typedef ArgumentTraits<P15> TArg15; typedef typename TArg15::TStorage S15; S15 p15;
03148         
03149         if( decodeTuple<S1, S2, S3, S4, S5, S6, S7, S8, S9, S10, S11, S12, S13, S14, S15>( args, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15 ) != 0 )
03150         {
03151             return 0;
03152         }
03153         return Caller<R>::template function<TFunction, const C*, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15>(
03154             iFreeMethod, iObject, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4), TArg5::arg(p5), TArg6::arg(p6), TArg7::arg(p7), TArg8::arg(p8), TArg9::arg(p9), TArg10::arg(p10), TArg11::arg(p11), TArg12::arg(p12), TArg13::arg(p13), TArg14::arg(p14), TArg15::arg(p15) );
03155     }
03156 
03157 
03158     // "free" const methods passing iObject as reference
03159 
03160     /** call non const "free method" without arguments, passing iObject as pointer
03161      */
03162     template <typename C, typename R>
03163     static PyObject* callFree( PyObject* args, const CppClass* iObject, R (*iFreeMethod)(const C&) )
03164     {
03165         typedef R (*TFunction)(const C&);
03166         if( decodeTuple(args) != 0 )
03167         {
03168             return 0;
03169         }
03170         LASS_ASSERT(iObject);
03171         return Caller<R>::template function<TFunction, const C& >(
03172             iFreeMethod, *iObject );
03173     }
03174 
03175     /** call const "free method" with 1 arguments translated from python arguments, 
03176      *  passing iObject as pointer
03177      */
03178     template <typename C, typename R, typename P1>
03179     static PyObject* callFree( PyObject* args, const CppClass* iObject, R (*iFreeMethod)(const C&, P1) )
03180     {
03181         typedef R (*TFunction)(const C&, P1);
03182         typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
03183         
03184         if( decodeTuple<S1>( args, p1 ) != 0 )
03185         {
03186             return 0;
03187         }
03188         LASS_ASSERT(iObject);
03189         return Caller<R>::template function<TFunction, const C&, P1>(
03190             iFreeMethod, *iObject, TArg1::arg(p1) );
03191     }
03192 
03193     /** call const "free method" with 2 arguments translated from python arguments, 
03194      *  passing iObject as pointer
03195      */
03196     template <typename C, typename R, typename P1, typename P2>
03197     static PyObject* callFree( PyObject* args, const CppClass* iObject, R (*iFreeMethod)(const C&, P1, P2) )
03198     {
03199         typedef R (*TFunction)(const C&, P1, P2);
03200         typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
03201         typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
03202         
03203         if( decodeTuple<S1, S2>( args, p1, p2 ) != 0 )
03204         {
03205             return 0;
03206         }
03207         LASS_ASSERT(iObject);
03208         return Caller<R>::template function<TFunction, const C&, P1, P2>(
03209             iFreeMethod, *iObject, TArg1::arg(p1), TArg2::arg(p2) );
03210     }
03211 
03212     /** call const "free method" with 3 arguments translated from python arguments, 
03213      *  passing iObject as pointer
03214      */
03215     template <typename C, typename R, typename P1, typename P2, typename P3>
03216     static PyObject* callFree( PyObject* args, const CppClass* iObject, R (*iFreeMethod)(const C&, P1, P2, P3) )
03217     {
03218         typedef R (*TFunction)(const C&, P1, P2, P3);
03219         typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
03220         typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
03221         typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
03222         
03223         if( decodeTuple<S1, S2, S3>( args, p1, p2, p3 ) != 0 )
03224         {
03225             return 0;
03226         }
03227         LASS_ASSERT(iObject);
03228         return Caller<R>::template function<TFunction, const C&, P1, P2, P3>(
03229             iFreeMethod, *iObject, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3) );
03230     }
03231 
03232     /** call const "free method" with 4 arguments translated from python arguments, 
03233      *  passing iObject as pointer
03234      */
03235     template <typename C, typename R, typename P1, typename P2, typename P3, typename P4>
03236     static PyObject* callFree( PyObject* args, const CppClass* iObject, R (*iFreeMethod)(const C&, P1, P2, P3, P4) )
03237     {
03238         typedef R (*TFunction)(const C&, P1, P2, P3, P4);
03239         typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
03240         typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
03241         typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
03242         typedef ArgumentTraits<P4> TArg4; typedef typename TArg4::TStorage S4; S4 p4;
03243         
03244         if( decodeTuple<S1, S2, S3, S4>( args, p1, p2, p3, p4 ) != 0 )
03245         {
03246             return 0;
03247         }
03248         LASS_ASSERT(iObject);
03249         return Caller<R>::template function<TFunction, const C&, P1, P2, P3, P4>(
03250             iFreeMethod, *iObject, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4) );
03251     }
03252 
03253     /** call const "free method" with 5 arguments translated from python arguments, 
03254      *  passing iObject as pointer
03255      */
03256     template <typename C, typename R, typename P1, typename P2, typename P3, typename P4, typename P5>
03257     static PyObject* callFree( PyObject* args, const CppClass* iObject, R (*iFreeMethod)(const C&, P1, P2, P3, P4, P5) )
03258     {
03259         typedef R (*TFunction)(const C&, P1, P2, P3, P4, P5);
03260         typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
03261         typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
03262         typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
03263         typedef ArgumentTraits<P4> TArg4; typedef typename TArg4::TStorage S4; S4 p4;
03264         typedef ArgumentTraits<P5> TArg5; typedef typename TArg5::TStorage S5; S5 p5;
03265         
03266         if( decodeTuple<S1, S2, S3, S4, S5>( args, p1, p2, p3, p4, p5 ) != 0 )
03267         {
03268             return 0;
03269         }
03270         LASS_ASSERT(iObject);
03271         return Caller<R>::template function<TFunction, const C&, P1, P2, P3, P4, P5>(
03272             iFreeMethod, *iObject, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4), TArg5::arg(p5) );
03273     }
03274 
03275     /** call const "free method" with 6 arguments translated from python arguments, 
03276      *  passing iObject as pointer
03277      */
03278     template <typename C, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6>
03279     static PyObject* callFree( PyObject* args, const CppClass* iObject, R (*iFreeMethod)(const C&, P1, P2, P3, P4, P5, P6) )
03280     {
03281         typedef R (*TFunction)(const C&, P1, P2, P3, P4, P5, P6);
03282         typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
03283         typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
03284         typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
03285         typedef ArgumentTraits<P4> TArg4; typedef typename TArg4::TStorage S4; S4 p4;
03286         typedef ArgumentTraits<P5> TArg5; typedef typename TArg5::TStorage S5; S5 p5;
03287         typedef ArgumentTraits<P6> TArg6; typedef typename TArg6::TStorage S6; S6 p6;
03288         
03289         if( decodeTuple<S1, S2, S3, S4, S5, S6>( args, p1, p2, p3, p4, p5, p6 ) != 0 )
03290         {
03291             return 0;
03292         }
03293         LASS_ASSERT(iObject);
03294         return Caller<R>::template function<TFunction, const C&, P1, P2, P3, P4, P5, P6>(
03295             iFreeMethod, *iObject, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4), TArg5::arg(p5), TArg6::arg(p6) );
03296     }
03297 
03298     /** call const "free method" with 7 arguments translated from python arguments, 
03299      *  passing iObject as pointer
03300      */
03301     template <typename C, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7>
03302     static PyObject* callFree( PyObject* args, const CppClass* iObject, R (*iFreeMethod)(const C&, P1, P2, P3, P4, P5, P6, P7) )
03303     {
03304         typedef R (*TFunction)(const C&, P1, P2, P3, P4, P5, P6, P7);
03305         typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
03306         typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
03307         typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
03308         typedef ArgumentTraits<P4> TArg4; typedef typename TArg4::TStorage S4; S4 p4;
03309         typedef ArgumentTraits<P5> TArg5; typedef typename TArg5::TStorage S5; S5 p5;
03310         typedef ArgumentTraits<P6> TArg6; typedef typename TArg6::TStorage S6; S6 p6;
03311         typedef ArgumentTraits<P7> TArg7; typedef typename TArg7::TStorage S7; S7 p7;
03312         
03313         if( decodeTuple<S1, S2, S3, S4, S5, S6, S7>( args, p1, p2, p3, p4, p5, p6, p7 ) != 0 )
03314         {
03315             return 0;
03316         }
03317         LASS_ASSERT(iObject);
03318         return Caller<R>::template function<TFunction, const C&, P1, P2, P3, P4, P5, P6, P7>(
03319             iFreeMethod, *iObject, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4), TArg5::arg(p5), TArg6::arg(p6), TArg7::arg(p7) );
03320     }
03321 
03322     /** call const "free method" with 8 arguments translated from python arguments, 
03323      *  passing iObject as pointer
03324      */
03325     template <typename C, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8>
03326     static PyObject* callFree( PyObject* args, const CppClass* iObject, R (*iFreeMethod)(const C&, P1, P2, P3, P4, P5, P6, P7, P8) )
03327     {
03328         typedef R (*TFunction)(const C&, P1, P2, P3, P4, P5, P6, P7, P8);
03329         typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
03330         typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
03331         typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
03332         typedef ArgumentTraits<P4> TArg4; typedef typename TArg4::TStorage S4; S4 p4;
03333         typedef ArgumentTraits<P5> TArg5; typedef typename TArg5::TStorage S5; S5 p5;
03334         typedef ArgumentTraits<P6> TArg6; typedef typename TArg6::TStorage S6; S6 p6;
03335         typedef ArgumentTraits<P7> TArg7; typedef typename TArg7::TStorage S7; S7 p7;
03336         typedef ArgumentTraits<P8> TArg8; typedef typename TArg8::TStorage S8; S8 p8;
03337         
03338         if( decodeTuple<S1, S2, S3, S4, S5, S6, S7, S8>( args, p1, p2, p3, p4, p5, p6, p7, p8 ) != 0 )
03339         {
03340             return 0;
03341         }
03342         LASS_ASSERT(iObject);
03343         return Caller<R>::template function<TFunction, const C&, P1, P2, P3, P4, P5, P6, P7, P8>(
03344             iFreeMethod, *iObject, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4), TArg5::arg(p5), TArg6::arg(p6), TArg7::arg(p7), TArg8::arg(p8) );
03345     }
03346 
03347     /** call const "free method" with 9 arguments translated from python arguments, 
03348      *  passing iObject as pointer
03349      */
03350     template <typename C, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9>
03351     static PyObject* callFree( PyObject* args, const CppClass* iObject, R (*iFreeMethod)(const C&, P1, P2, P3, P4, P5, P6, P7, P8, P9) )
03352     {
03353         typedef R (*TFunction)(const C&, P1, P2, P3, P4, P5, P6, P7, P8, P9);
03354         typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
03355         typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
03356         typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
03357         typedef ArgumentTraits<P4> TArg4; typedef typename TArg4::TStorage S4; S4 p4;
03358         typedef ArgumentTraits<P5> TArg5; typedef typename TArg5::TStorage S5; S5 p5;
03359         typedef ArgumentTraits<P6> TArg6; typedef typename TArg6::TStorage S6; S6 p6;
03360         typedef ArgumentTraits<P7> TArg7; typedef typename TArg7::TStorage S7; S7 p7;
03361         typedef ArgumentTraits<P8> TArg8; typedef typename TArg8::TStorage S8; S8 p8;
03362         typedef ArgumentTraits<P9> TArg9; typedef typename TArg9::TStorage S9; S9 p9;
03363         
03364         if( decodeTuple<S1, S2, S3, S4, S5, S6, S7, S8, S9>( args, p1, p2, p3, p4, p5, p6, p7, p8, p9 ) != 0 )
03365         {
03366             return 0;
03367         }
03368         LASS_ASSERT(iObject);
03369         return Caller<R>::template function<TFunction, const C&, P1, P2, P3, P4, P5, P6, P7, P8, P9>(
03370             iFreeMethod, *iObject, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4), TArg5::arg(p5), TArg6::arg(p6), TArg7::arg(p7), TArg8::arg(p8), TArg9::arg(p9) );
03371     }
03372 
03373     /** call const "free method" with 10 arguments translated from python arguments, 
03374      *  passing iObject as pointer
03375      */
03376     template <typename C, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10>
03377     static PyObject* callFree( PyObject* args, const CppClass* iObject, R (*iFreeMethod)(const C&, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10) )
03378     {
03379         typedef R (*TFunction)(const C&, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10);
03380         typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
03381         typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
03382         typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
03383         typedef ArgumentTraits<P4> TArg4; typedef typename TArg4::TStorage S4; S4 p4;
03384         typedef ArgumentTraits<P5> TArg5; typedef typename TArg5::TStorage S5; S5 p5;
03385         typedef ArgumentTraits<P6> TArg6; typedef typename TArg6::TStorage S6; S6 p6;
03386         typedef ArgumentTraits<P7> TArg7; typedef typename TArg7::TStorage S7; S7 p7;
03387         typedef ArgumentTraits<P8> TArg8; typedef typename TArg8::TStorage S8; S8 p8;
03388         typedef ArgumentTraits<P9> TArg9; typedef typename TArg9::TStorage S9; S9 p9;
03389         typedef ArgumentTraits<P10> TArg10; typedef typename TArg10::TStorage S10; S10 p10;
03390         
03391         if( decodeTuple<S1, S2, S3, S4, S5, S6, S7, S8, S9, S10>( args, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10 ) != 0 )
03392         {
03393             return 0;
03394         }
03395         LASS_ASSERT(iObject);
03396         return Caller<R>::template function<TFunction, const C&, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10>(
03397             iFreeMethod, *iObject, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4), TArg5::arg(p5), TArg6::arg(p6), TArg7::arg(p7), TArg8::arg(p8), TArg9::arg(p9), TArg10::arg(p10) );
03398     }
03399 
03400     /** call const "free method" with 11 arguments translated from python arguments, 
03401      *  passing iObject as pointer
03402      */
03403     template <typename C, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10, typename P11>
03404     static PyObject* callFree( PyObject* args, const CppClass* iObject, R (*iFreeMethod)(const C&, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11) )
03405     {
03406         typedef R (*TFunction)(const C&, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11);
03407         typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
03408         typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
03409         typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
03410         typedef ArgumentTraits<P4> TArg4; typedef typename TArg4::TStorage S4; S4 p4;
03411         typedef ArgumentTraits<P5> TArg5; typedef typename TArg5::TStorage S5; S5 p5;
03412         typedef ArgumentTraits<P6> TArg6; typedef typename TArg6::TStorage S6; S6 p6;
03413         typedef ArgumentTraits<P7> TArg7; typedef typename TArg7::TStorage S7; S7 p7;
03414         typedef ArgumentTraits<P8> TArg8; typedef typename TArg8::TStorage S8; S8 p8;
03415         typedef ArgumentTraits<P9> TArg9; typedef typename TArg9::TStorage S9; S9 p9;
03416         typedef ArgumentTraits<P10> TArg10; typedef typename TArg10::TStorage S10; S10 p10;
03417         typedef ArgumentTraits<P11> TArg11; typedef typename TArg11::TStorage S11; S11 p11;
03418         
03419         if( decodeTuple<S1, S2, S3, S4, S5, S6, S7, S8, S9, S10, S11>( args, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11 ) != 0 )
03420         {
03421             return 0;
03422         }
03423         LASS_ASSERT(iObject);
03424         return Caller<R>::template function<TFunction, const C&, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11>(
03425             iFreeMethod, *iObject, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4), TArg5::arg(p5), TArg6::arg(p6), TArg7::arg(p7), TArg8::arg(p8), TArg9::arg(p9), TArg10::arg(p10), TArg11::arg(p11) );
03426     }
03427 
03428     /** call const "free method" with 12 arguments translated from python arguments, 
03429      *  passing iObject as pointer
03430      */
03431     template <typename C, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10, typename P11, typename P12>
03432     static PyObject* callFree( PyObject* args, const CppClass* iObject, R (*iFreeMethod)(const C&, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12) )
03433     {
03434         typedef R (*TFunction)(const C&, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12);
03435         typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
03436         typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
03437         typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
03438         typedef ArgumentTraits<P4> TArg4; typedef typename TArg4::TStorage S4; S4 p4;
03439         typedef ArgumentTraits<P5> TArg5; typedef typename TArg5::TStorage S5; S5 p5;
03440         typedef ArgumentTraits<P6> TArg6; typedef typename TArg6::TStorage S6; S6 p6;
03441         typedef ArgumentTraits<P7> TArg7; typedef typename TArg7::TStorage S7; S7 p7;
03442         typedef ArgumentTraits<P8> TArg8; typedef typename TArg8::TStorage S8; S8 p8;
03443         typedef ArgumentTraits<P9> TArg9; typedef typename TArg9::TStorage S9; S9 p9;
03444         typedef ArgumentTraits<P10> TArg10; typedef typename TArg10::TStorage S10; S10 p10;
03445         typedef ArgumentTraits<P11> TArg11; typedef typename TArg11::TStorage S11; S11 p11;
03446         typedef ArgumentTraits<P12> TArg12; typedef typename TArg12::TStorage S12; S12 p12;
03447         
03448         if( decodeTuple<S1, S2, S3, S4, S5, S6, S7, S8, S9, S10, S11, S12>( args, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12 ) != 0 )
03449         {
03450             return 0;
03451         }
03452         LASS_ASSERT(iObject);
03453         return Caller<R>::template function<TFunction, const C&, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12>(
03454             iFreeMethod, *iObject, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4), TArg5::arg(p5), TArg6::arg(p6), TArg7::arg(p7), TArg8::arg(p8), TArg9::arg(p9), TArg10::arg(p10), TArg11::arg(p11), TArg12::arg(p12) );
03455     }
03456 
03457     /** call const "free method" with 13 arguments translated from python arguments, 
03458      *  passing iObject as pointer
03459      */
03460     template <typename C, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10, typename P11, typename P12, typename P13>
03461     static PyObject* callFree( PyObject* args, const CppClass* iObject, R (*iFreeMethod)(const C&, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13) )
03462     {
03463         typedef R (*TFunction)(const C&, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13);
03464         typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
03465         typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
03466         typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
03467         typedef ArgumentTraits<P4> TArg4; typedef typename TArg4::TStorage S4; S4 p4;
03468         typedef ArgumentTraits<P5> TArg5; typedef typename TArg5::TStorage S5; S5 p5;
03469         typedef ArgumentTraits<P6> TArg6; typedef typename TArg6::TStorage S6; S6 p6;
03470         typedef ArgumentTraits<P7> TArg7; typedef typename TArg7::TStorage S7; S7 p7;
03471         typedef ArgumentTraits<P8> TArg8; typedef typename TArg8::TStorage S8; S8 p8;
03472         typedef ArgumentTraits<P9> TArg9; typedef typename TArg9::TStorage S9; S9 p9;
03473         typedef ArgumentTraits<P10> TArg10; typedef typename TArg10::TStorage S10; S10 p10;
03474         typedef ArgumentTraits<P11> TArg11; typedef typename TArg11::TStorage S11; S11 p11;
03475         typedef ArgumentTraits<P12> TArg12; typedef typename TArg12::TStorage S12; S12 p12;
03476         typedef ArgumentTraits<P13> TArg13; typedef typename TArg13::TStorage S13; S13 p13;
03477         
03478         if( decodeTuple<S1, S2, S3, S4, S5, S6, S7, S8, S9, S10, S11, S12, S13>( args, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13 ) != 0 )
03479         {
03480             return 0;
03481         }
03482         LASS_ASSERT(iObject);
03483         return Caller<R>::template function<TFunction, const C&, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13>(
03484             iFreeMethod, *iObject, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4), TArg5::arg(p5), TArg6::arg(p6), TArg7::arg(p7), TArg8::arg(p8), TArg9::arg(p9), TArg10::arg(p10), TArg11::arg(p11), TArg12::arg(p12), TArg13::arg(p13) );
03485     }
03486 
03487     /** call const "free method" with 14 arguments translated from python arguments, 
03488      *  passing iObject as pointer
03489      */
03490     template <typename C, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10, typename P11, typename P12, typename P13, typename P14>
03491     static PyObject* callFree( PyObject* args, const CppClass* iObject, R (*iFreeMethod)(const C&, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14) )
03492     {
03493         typedef R (*TFunction)(const C&, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14);
03494         typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
03495         typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
03496         typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
03497         typedef ArgumentTraits<P4> TArg4; typedef typename TArg4::TStorage S4; S4 p4;
03498         typedef ArgumentTraits<P5> TArg5; typedef typename TArg5::TStorage S5; S5 p5;
03499         typedef ArgumentTraits<P6> TArg6; typedef typename TArg6::TStorage S6; S6 p6;
03500         typedef ArgumentTraits<P7> TArg7; typedef typename TArg7::TStorage S7; S7 p7;
03501         typedef ArgumentTraits<P8> TArg8; typedef typename TArg8::TStorage S8; S8 p8;
03502         typedef ArgumentTraits<P9> TArg9; typedef typename TArg9::TStorage S9; S9 p9;
03503         typedef ArgumentTraits<P10> TArg10; typedef typename TArg10::TStorage S10; S10 p10;
03504         typedef ArgumentTraits<P11> TArg11; typedef typename TArg11::TStorage S11; S11 p11;
03505         typedef ArgumentTraits<P12> TArg12; typedef typename TArg12::TStorage S12; S12 p12;
03506         typedef ArgumentTraits<P13> TArg13; typedef typename TArg13::TStorage S13; S13 p13;
03507         typedef ArgumentTraits<P14> TArg14; typedef typename TArg14::TStorage S14; S14 p14;
03508         
03509         if( decodeTuple<S1, S2, S3, S4, S5, S6, S7, S8, S9, S10, S11, S12, S13, S14>( args, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14 ) != 0 )
03510         {
03511             return 0;
03512         }
03513         LASS_ASSERT(iObject);
03514         return Caller<R>::template function<TFunction, const C&, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14>(
03515             iFreeMethod, *iObject, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4), TArg5::arg(p5), TArg6::arg(p6), TArg7::arg(p7), TArg8::arg(p8), TArg9::arg(p9), TArg10::arg(p10), TArg11::arg(p11), TArg12::arg(p12), TArg13::arg(p13), TArg14::arg(p14) );
03516     }
03517 
03518     /** call const "free method" with 15 arguments translated from python arguments, 
03519      *  passing iObject as pointer
03520      */
03521     template <typename C, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10, typename P11, typename P12, typename P13, typename P14, typename P15>
03522     static PyObject* callFree( PyObject* args, const CppClass* iObject, R (*iFreeMethod)(const C&, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15) )
03523     {
03524         typedef R (*TFunction)(const C&, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15);
03525         typedef ArgumentTraits<P1> TArg1; typedef typename TArg1::TStorage S1; S1 p1;
03526         typedef ArgumentTraits<P2> TArg2; typedef typename TArg2::TStorage S2; S2 p2;
03527         typedef ArgumentTraits<P3> TArg3; typedef typename TArg3::TStorage S3; S3 p3;
03528         typedef ArgumentTraits<P4> TArg4; typedef typename TArg4::TStorage S4; S4 p4;
03529         typedef ArgumentTraits<P5> TArg5; typedef typename TArg5::TStorage S5; S5 p5;
03530         typedef ArgumentTraits<P6> TArg6; typedef typename TArg6::TStorage S6; S6 p6;
03531         typedef ArgumentTraits<P7> TArg7; typedef typename TArg7::TStorage S7; S7 p7;
03532         typedef ArgumentTraits<P8> TArg8; typedef typename TArg8::TStorage S8; S8 p8;
03533         typedef ArgumentTraits<P9> TArg9; typedef typename TArg9::TStorage S9; S9 p9;
03534         typedef ArgumentTraits<P10> TArg10; typedef typename TArg10::TStorage S10; S10 p10;
03535         typedef ArgumentTraits<P11> TArg11; typedef typename TArg11::TStorage S11; S11 p11;
03536         typedef ArgumentTraits<P12> TArg12; typedef typename TArg12::TStorage S12; S12 p12;
03537         typedef ArgumentTraits<P13> TArg13; typedef typename TArg13::TStorage S13; S13 p13;
03538         typedef ArgumentTraits<P14> TArg14; typedef typename TArg14::TStorage S14; S14 p14;
03539         typedef ArgumentTraits<P15> TArg15; typedef typename TArg15::TStorage S15; S15 p15;
03540         
03541         if( decodeTuple<S1, S2, S3, S4, S5, S6, S7, S8, S9, S10, S11, S12, S13, S14, S15>( args, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15 ) != 0 )
03542         {
03543             return 0;
03544         }
03545         LASS_ASSERT(iObject);
03546         return Caller<R>::template function<TFunction, const C&, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15>(
03547             iFreeMethod, *iObject, TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4), TArg5::arg(p5), TArg6::arg(p6), TArg7::arg(p7), TArg8::arg(p8), TArg9::arg(p9), TArg10::arg(p10), TArg11::arg(p11), TArg12::arg(p12), TArg13::arg(p13), TArg14::arg(p14), TArg15::arg(p15) );
03548     }
03549 
03550 
03551     // member getters and setters
03552 
03553     /** call const getter function
03554      */
03555     template <typename C, typename R>
03556     static PyObject* get( const CppClass* iObject, R (C::*iMethod)() const)
03557     {
03558         try
03559         {
03560             return pyBuildSimpleObject((iObject->*iMethod)());
03561         }
03562         LASS_UTIL_PYOBJECT_CALL_CATCH_AND_RETURN
03563     }
03564 
03565     /** call getter function, for non-assignable, although not read-only members
03566      */
03567     template <typename C, typename R>
03568     static PyObject* get( CppClass* iObject, R (C::*iMethod)() )
03569     {
03570         try
03571         {
03572             return pyBuildSimpleObject((iObject->*iMethod)());
03573         }
03574         LASS_UTIL_PYOBJECT_CALL_CATCH_AND_RETURN
03575     }
03576 
03577 
03578     /** call explicit setter function like <tt>void Foo::setBar(const Bar& iBar)</tt>
03579      */
03580     template <typename P>
03581     static int set( PyObject* args, CppClass* iObject, void (CppClass::*iMethod)(P) )
03582     {
03583         typedef ArgumentTraits<P> TArg;
03584         typename TArg::TStorage p;
03585 
03586         if( pyGetSimpleObject( args, p ) != 0 )
03587         {
03588             return -1;
03589         }
03590 
03591         try
03592         {
03593             (iObject->*iMethod)(TArg::arg(p));
03594         }
03595         LASS_UTIL_PYOBJECT_CALL_CATCH_AND_RETURN_EX(-1)
03596         return 0;
03597     }
03598 
03599     /** call implicit setter function like <tt>Bar& Foo::bar()</tt>
03600      */
03601     template <typename P>
03602     static int set( PyObject* args, CppClass* iObject, P& (CppClass::*iMethod)() )
03603     {
03604         typedef ArgumentTraits<P> TArg;
03605         typename TArg::TStorage p;
03606 
03607         if( pyGetSimpleObject( args, p ) != 0 )
03608         {
03609             return -1;
03610         }
03611 
03612         try
03613         {
03614             (iObject->*iMethod)() = TArg::arg(p);
03615         }
03616         LASS_UTIL_PYOBJECT_CALL_CATCH_AND_RETURN_EX(-1)
03617         return 0;
03618     }
03619 };
03620 
03621 
03622 
03623 // --- constructors --------------------------------------------------------------------------------
03624 
03625 /** allocate a new object with default constructor.
03626  */
03627 template <class PyObjectClass>
03628 PyObject* construct( PyTypeObject* iSubtype, PyObject* args )
03629 {
03630     typedef ShadowTraits< PyObjectClass > TPyShadowTraits;
03631     typedef typename TPyShadowTraits::TCppClass TCppClass;
03632     
03633     if( decodeTuple(args) != 0 )
03634     {
03635         return 0;
03636     }
03637     
03638     try
03639     {
03640         PyObjectClass* result = TPyShadowTraits::pyObject( new TCppClass );
03641         // actually the iSubType should be used but appearently the tp_dict does not get properly initialized
03642         // so for now, old-style, consequence: no inheritance from extension classes
03643         impl::fixObjectType(result);
03644         result->ob_type = iSubtype;
03645         // do not track the object using GC
03646 //#pragma LASS_TODO("Check if we have created memory leak... yes we have :-/, read the comments here.")
03647         /* The reason why we can't use the GC mechanism of Python is that objects needs extra members for this and we don't 
03648            want to add them to PyObjectPlus.  So we do our own GC... tricky but one needs to live on the edge >:-D 
03649            In the future this should happen:
03650            - PyObjectPlus objects should be final... so no derivation and no GC problems.
03651            - PyObjectPlusSuperDeluxe will support everything.
03652            The shadowclasses can then be the 'deluxe' version 
03653         */
03654         result->ob_type->tp_flags &= (~Py_TPFLAGS_HAVE_GC);
03655         Py_INCREF(result->ob_type);
03656         return result;
03657     }
03658     LASS_UTIL_PYOBJECT_CALL_CATCH_AND_RETURN
03659 }
03660 
03661 /** allocate a new object with 1 arguments.
03662  */
03663 template <class PyObjectClass, typename P1>
03664 PyObject* construct( PyTypeObject* iSubtype, PyObject* args )
03665 {
03666     typedef ShadowTraits< PyObjectClass > TPyShadowTraits;
03667     typedef typename TPyShadowTraits::TCppClass TCppClass;
03668     typedef ArgumentTraits< P1 > TArg1; typedef typename TArg1::TStorage S1; S1 p1;
03669     
03670 
03671     if ( decodeTuple<S1>( args, p1 ) != 0 )
03672     {
03673         return 0;
03674     }
03675 
03676     try
03677     {
03678         PyObjectClass* result = TPyShadowTraits::pyObject( new TCppClass( TArg1::arg(p1) ) );
03679         impl::fixObjectType(result);
03680         result->ob_type = iSubtype;
03681         result->ob_type->tp_flags &= (~Py_TPFLAGS_HAVE_GC);
03682         Py_INCREF(result->ob_type);
03683         return result;
03684     }
03685     LASS_UTIL_PYOBJECT_CALL_CATCH_AND_RETURN
03686 }
03687 
03688 /** allocate a new object with 2 arguments.
03689  */
03690 template <class PyObjectClass, typename P1, typename P2>
03691 PyObject* construct( PyTypeObject* iSubtype, PyObject* args )
03692 {
03693     typedef ShadowTraits< PyObjectClass > TPyShadowTraits;
03694     typedef typename TPyShadowTraits::TCppClass TCppClass;
03695     typedef ArgumentTraits< P1 > TArg1; typedef typename TArg1::TStorage S1; S1 p1;
03696     typedef ArgumentTraits< P2 > TArg2; typedef typename TArg2::TStorage S2; S2 p2;
03697     
03698 
03699     if ( decodeTuple<S1, S2>( args, p1, p2 ) != 0 )
03700     {
03701         return 0;
03702     }
03703 
03704     try
03705     {
03706         PyObjectClass* result = TPyShadowTraits::pyObject( new TCppClass( TArg1::arg(p1), TArg2::arg(p2) ) );
03707         impl::fixObjectType(result);
03708         result->ob_type = iSubtype;
03709         result->ob_type->tp_flags &= (~Py_TPFLAGS_HAVE_GC);
03710         Py_INCREF(result->ob_type);
03711         return result;
03712     }
03713     LASS_UTIL_PYOBJECT_CALL_CATCH_AND_RETURN
03714 }
03715 
03716 /** allocate a new object with 3 arguments.
03717  */
03718 template <class PyObjectClass, typename P1, typename P2, typename P3>
03719 PyObject* construct( PyTypeObject* iSubtype, PyObject* args )
03720 {
03721     typedef ShadowTraits< PyObjectClass > TPyShadowTraits;
03722     typedef typename TPyShadowTraits::TCppClass TCppClass;
03723     typedef ArgumentTraits< P1 > TArg1; typedef typename TArg1::TStorage S1; S1 p1;
03724     typedef ArgumentTraits< P2 > TArg2; typedef typename TArg2::TStorage S2; S2 p2;
03725     typedef ArgumentTraits< P3 > TArg3; typedef typename TArg3::TStorage S3; S3 p3;
03726     
03727 
03728     if ( decodeTuple<S1, S2, S3>( args, p1, p2, p3 ) != 0 )
03729     {
03730         return 0;
03731     }
03732 
03733     try
03734     {
03735         PyObjectClass* result = TPyShadowTraits::pyObject( new TCppClass( TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3) ) );
03736         impl::fixObjectType(result);
03737         result->ob_type = iSubtype;
03738         result->ob_type->tp_flags &= (~Py_TPFLAGS_HAVE_GC);
03739         Py_INCREF(result->ob_type);
03740         return result;
03741     }
03742     LASS_UTIL_PYOBJECT_CALL_CATCH_AND_RETURN
03743 }
03744 
03745 /** allocate a new object with 4 arguments.
03746  */
03747 template <class PyObjectClass, typename P1, typename P2, typename P3, typename P4>
03748 PyObject* construct( PyTypeObject* iSubtype, PyObject* args )
03749 {
03750     typedef ShadowTraits< PyObjectClass > TPyShadowTraits;
03751     typedef typename TPyShadowTraits::TCppClass TCppClass;
03752     typedef ArgumentTraits< P1 > TArg1; typedef typename TArg1::TStorage S1; S1 p1;
03753     typedef ArgumentTraits< P2 > TArg2; typedef typename TArg2::TStorage S2; S2 p2;
03754     typedef ArgumentTraits< P3 > TArg3; typedef typename TArg3::TStorage S3; S3 p3;
03755     typedef ArgumentTraits< P4 > TArg4; typedef typename TArg4::TStorage S4; S4 p4;
03756     
03757 
03758     if ( decodeTuple<S1, S2, S3, S4>( args, p1, p2, p3, p4 ) != 0 )
03759     {
03760         return 0;
03761     }
03762 
03763     try
03764     {
03765         PyObjectClass* result = TPyShadowTraits::pyObject( new TCppClass( TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4) ) );
03766         impl::fixObjectType(result);
03767         result->ob_type = iSubtype;
03768         result->ob_type->tp_flags &= (~Py_TPFLAGS_HAVE_GC);
03769         Py_INCREF(result->ob_type);
03770         return result;
03771     }
03772     LASS_UTIL_PYOBJECT_CALL_CATCH_AND_RETURN
03773 }
03774 
03775 /** allocate a new object with 5 arguments.
03776  */
03777 template <class PyObjectClass, typename P1, typename P2, typename P3, typename P4, typename P5>
03778 PyObject* construct( PyTypeObject* iSubtype, PyObject* args )
03779 {
03780     typedef ShadowTraits< PyObjectClass > TPyShadowTraits;
03781     typedef typename TPyShadowTraits::TCppClass TCppClass;
03782     typedef ArgumentTraits< P1 > TArg1; typedef typename TArg1::TStorage S1; S1 p1;
03783     typedef ArgumentTraits< P2 > TArg2; typedef typename TArg2::TStorage S2; S2 p2;
03784     typedef ArgumentTraits< P3 > TArg3; typedef typename TArg3::TStorage S3; S3 p3;
03785     typedef ArgumentTraits< P4 > TArg4; typedef typename TArg4::TStorage S4; S4 p4;
03786     typedef ArgumentTraits< P5 > TArg5; typedef typename TArg5::TStorage S5; S5 p5;
03787     
03788 
03789     if ( decodeTuple<S1, S2, S3, S4, S5>( args, p1, p2, p3, p4, p5 ) != 0 )
03790     {
03791         return 0;
03792     }
03793 
03794     try
03795     {
03796         PyObjectClass* result = TPyShadowTraits::pyObject( new TCppClass( TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4), TArg5::arg(p5) ) );
03797         impl::fixObjectType(result);
03798         result->ob_type = iSubtype;
03799         result->ob_type->tp_flags &= (~Py_TPFLAGS_HAVE_GC);
03800         Py_INCREF(result->ob_type);
03801         return result;
03802     }
03803     LASS_UTIL_PYOBJECT_CALL_CATCH_AND_RETURN
03804 }
03805 
03806 /** allocate a new object with 6 arguments.
03807  */
03808 template <class PyObjectClass, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6>
03809 PyObject* construct( PyTypeObject* iSubtype, PyObject* args )
03810 {
03811     typedef ShadowTraits< PyObjectClass > TPyShadowTraits;
03812     typedef typename TPyShadowTraits::TCppClass TCppClass;
03813     typedef ArgumentTraits< P1 > TArg1; typedef typename TArg1::TStorage S1; S1 p1;
03814     typedef ArgumentTraits< P2 > TArg2; typedef typename TArg2::TStorage S2; S2 p2;
03815     typedef ArgumentTraits< P3 > TArg3; typedef typename TArg3::TStorage S3; S3 p3;
03816     typedef ArgumentTraits< P4 > TArg4; typedef typename TArg4::TStorage S4; S4 p4;
03817     typedef ArgumentTraits< P5 > TArg5; typedef typename TArg5::TStorage S5; S5 p5;
03818     typedef ArgumentTraits< P6 > TArg6; typedef typename TArg6::TStorage S6; S6 p6;
03819     
03820 
03821     if ( decodeTuple<S1, S2, S3, S4, S5, S6>( args, p1, p2, p3, p4, p5, p6 ) != 0 )
03822     {
03823         return 0;
03824     }
03825 
03826     try
03827     {
03828         PyObjectClass* result = TPyShadowTraits::pyObject( new TCppClass( TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4), TArg5::arg(p5), TArg6::arg(p6) ) );
03829         impl::fixObjectType(result);
03830         result->ob_type = iSubtype;
03831         result->ob_type->tp_flags &= (~Py_TPFLAGS_HAVE_GC);
03832         Py_INCREF(result->ob_type);
03833         return result;
03834     }
03835     LASS_UTIL_PYOBJECT_CALL_CATCH_AND_RETURN
03836 }
03837 
03838 /** allocate a new object with 7 arguments.
03839  */
03840 template <class PyObjectClass, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7>
03841 PyObject* construct( PyTypeObject* iSubtype, PyObject* args )
03842 {
03843     typedef ShadowTraits< PyObjectClass > TPyShadowTraits;
03844     typedef typename TPyShadowTraits::TCppClass TCppClass;
03845     typedef ArgumentTraits< P1 > TArg1; typedef typename TArg1::TStorage S1; S1 p1;
03846     typedef ArgumentTraits< P2 > TArg2; typedef typename TArg2::TStorage S2; S2 p2;
03847     typedef ArgumentTraits< P3 > TArg3; typedef typename TArg3::TStorage S3; S3 p3;
03848     typedef ArgumentTraits< P4 > TArg4; typedef typename TArg4::TStorage S4; S4 p4;
03849     typedef ArgumentTraits< P5 > TArg5; typedef typename TArg5::TStorage S5; S5 p5;
03850     typedef ArgumentTraits< P6 > TArg6; typedef typename TArg6::TStorage S6; S6 p6;
03851     typedef ArgumentTraits< P7 > TArg7; typedef typename TArg7::TStorage S7; S7 p7;
03852     
03853 
03854     if ( decodeTuple<S1, S2, S3, S4, S5, S6, S7>( args, p1, p2, p3, p4, p5, p6, p7 ) != 0 )
03855     {
03856         return 0;
03857     }
03858 
03859     try
03860     {
03861         PyObjectClass* result = TPyShadowTraits::pyObject( new TCppClass( TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4), TArg5::arg(p5), TArg6::arg(p6), TArg7::arg(p7) ) );
03862         impl::fixObjectType(result);
03863         result->ob_type = iSubtype;
03864         result->ob_type->tp_flags &= (~Py_TPFLAGS_HAVE_GC);
03865         Py_INCREF(result->ob_type);
03866         return result;
03867     }
03868     LASS_UTIL_PYOBJECT_CALL_CATCH_AND_RETURN
03869 }
03870 
03871 /** allocate a new object with 8 arguments.
03872  */
03873 template <class PyObjectClass, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8>
03874 PyObject* construct( PyTypeObject* iSubtype, PyObject* args )
03875 {
03876     typedef ShadowTraits< PyObjectClass > TPyShadowTraits;
03877     typedef typename TPyShadowTraits::TCppClass TCppClass;
03878     typedef ArgumentTraits< P1 > TArg1; typedef typename TArg1::TStorage S1; S1 p1;
03879     typedef ArgumentTraits< P2 > TArg2; typedef typename TArg2::TStorage S2; S2 p2;
03880     typedef ArgumentTraits< P3 > TArg3; typedef typename TArg3::TStorage S3; S3 p3;
03881     typedef ArgumentTraits< P4 > TArg4; typedef typename TArg4::TStorage S4; S4 p4;
03882     typedef ArgumentTraits< P5 > TArg5; typedef typename TArg5::TStorage S5; S5 p5;
03883     typedef ArgumentTraits< P6 > TArg6; typedef typename TArg6::TStorage S6; S6 p6;
03884     typedef ArgumentTraits< P7 > TArg7; typedef typename TArg7::TStorage S7; S7 p7;
03885     typedef ArgumentTraits< P8 > TArg8; typedef typename TArg8::TStorage S8; S8 p8;
03886     
03887 
03888     if ( decodeTuple<S1, S2, S3, S4, S5, S6, S7, S8>( args, p1, p2, p3, p4, p5, p6, p7, p8 ) != 0 )
03889     {
03890         return 0;
03891     }
03892 
03893     try
03894     {
03895         PyObjectClass* result = TPyShadowTraits::pyObject( new TCppClass( TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4), TArg5::arg(p5), TArg6::arg(p6), TArg7::arg(p7), TArg8::arg(p8) ) );
03896         impl::fixObjectType(result);
03897         result->ob_type = iSubtype;
03898         result->ob_type->tp_flags &= (~Py_TPFLAGS_HAVE_GC);
03899         Py_INCREF(result->ob_type);
03900         return result;
03901     }
03902     LASS_UTIL_PYOBJECT_CALL_CATCH_AND_RETURN
03903 }
03904 
03905 /** allocate a new object with 9 arguments.
03906  */
03907 template <class PyObjectClass, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9>
03908 PyObject* construct( PyTypeObject* iSubtype, PyObject* args )
03909 {
03910     typedef ShadowTraits< PyObjectClass > TPyShadowTraits;
03911     typedef typename TPyShadowTraits::TCppClass TCppClass;
03912     typedef ArgumentTraits< P1 > TArg1; typedef typename TArg1::TStorage S1; S1 p1;
03913     typedef ArgumentTraits< P2 > TArg2; typedef typename TArg2::TStorage S2; S2 p2;
03914     typedef ArgumentTraits< P3 > TArg3; typedef typename TArg3::TStorage S3; S3 p3;
03915     typedef ArgumentTraits< P4 > TArg4; typedef typename TArg4::TStorage S4; S4 p4;
03916     typedef ArgumentTraits< P5 > TArg5; typedef typename TArg5::TStorage S5; S5 p5;
03917     typedef ArgumentTraits< P6 > TArg6; typedef typename TArg6::TStorage S6; S6 p6;
03918     typedef ArgumentTraits< P7 > TArg7; typedef typename TArg7::TStorage S7; S7 p7;
03919     typedef ArgumentTraits< P8 > TArg8; typedef typename TArg8::TStorage S8; S8 p8;
03920     typedef ArgumentTraits< P9 > TArg9; typedef typename TArg9::TStorage S9; S9 p9;
03921     
03922 
03923     if ( decodeTuple<S1, S2, S3, S4, S5, S6, S7, S8, S9>( args, p1, p2, p3, p4, p5, p6, p7, p8, p9 ) != 0 )
03924     {
03925         return 0;
03926     }
03927 
03928     try
03929     {
03930         PyObjectClass* result = TPyShadowTraits::pyObject( new TCppClass( TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4), TArg5::arg(p5), TArg6::arg(p6), TArg7::arg(p7), TArg8::arg(p8), TArg9::arg(p9) ) );
03931         impl::fixObjectType(result);
03932         result->ob_type = iSubtype;
03933         result->ob_type->tp_flags &= (~Py_TPFLAGS_HAVE_GC);
03934         Py_INCREF(result->ob_type);
03935         return result;
03936     }
03937     LASS_UTIL_PYOBJECT_CALL_CATCH_AND_RETURN
03938 }
03939 
03940 /** allocate a new object with 10 arguments.
03941  */
03942 template <class PyObjectClass, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10>
03943 PyObject* construct( PyTypeObject* iSubtype, PyObject* args )
03944 {
03945     typedef ShadowTraits< PyObjectClass > TPyShadowTraits;
03946     typedef typename TPyShadowTraits::TCppClass TCppClass;
03947     typedef ArgumentTraits< P1 > TArg1; typedef typename TArg1::TStorage S1; S1 p1;
03948     typedef ArgumentTraits< P2 > TArg2; typedef typename TArg2::TStorage S2; S2 p2;
03949     typedef ArgumentTraits< P3 > TArg3; typedef typename TArg3::TStorage S3; S3 p3;
03950     typedef ArgumentTraits< P4 > TArg4; typedef typename TArg4::TStorage S4; S4 p4;
03951     typedef ArgumentTraits< P5 > TArg5; typedef typename TArg5::TStorage S5; S5 p5;
03952     typedef ArgumentTraits< P6 > TArg6; typedef typename TArg6::TStorage S6; S6 p6;
03953     typedef ArgumentTraits< P7 > TArg7; typedef typename TArg7::TStorage S7; S7 p7;
03954     typedef ArgumentTraits< P8 > TArg8; typedef typename TArg8::TStorage S8; S8 p8;
03955     typedef ArgumentTraits< P9 > TArg9; typedef typename TArg9::TStorage S9; S9 p9;
03956     typedef ArgumentTraits< P10 > TArg10; typedef typename TArg10::TStorage S10; S10 p10;
03957     
03958 
03959     if ( decodeTuple<S1, S2, S3, S4, S5, S6, S7, S8, S9, S10>( args, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10 ) != 0 )
03960     {
03961         return 0;
03962     }
03963 
03964     try
03965     {
03966         PyObjectClass* result = TPyShadowTraits::pyObject( new TCppClass( TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4), TArg5::arg(p5), TArg6::arg(p6), TArg7::arg(p7), TArg8::arg(p8), TArg9::arg(p9), TArg10::arg(p10) ) );
03967         impl::fixObjectType(result);
03968         result->ob_type = iSubtype;
03969         result->ob_type->tp_flags &= (~Py_TPFLAGS_HAVE_GC);
03970         Py_INCREF(result->ob_type);
03971         return result;
03972     }
03973     LASS_UTIL_PYOBJECT_CALL_CATCH_AND_RETURN
03974 }
03975 
03976 /** allocate a new object with 11 arguments.
03977  */
03978 template <class PyObjectClass, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10, typename P11>
03979 PyObject* construct( PyTypeObject* iSubtype, PyObject* args )
03980 {
03981     typedef ShadowTraits< PyObjectClass > TPyShadowTraits;
03982     typedef typename TPyShadowTraits::TCppClass TCppClass;
03983     typedef ArgumentTraits< P1 > TArg1; typedef typename TArg1::TStorage S1; S1 p1;
03984     typedef ArgumentTraits< P2 > TArg2; typedef typename TArg2::TStorage S2; S2 p2;
03985     typedef ArgumentTraits< P3 > TArg3; typedef typename TArg3::TStorage S3; S3 p3;
03986     typedef ArgumentTraits< P4 > TArg4; typedef typename TArg4::TStorage S4; S4 p4;
03987     typedef ArgumentTraits< P5 > TArg5; typedef typename TArg5::TStorage S5; S5 p5;
03988     typedef ArgumentTraits< P6 > TArg6; typedef typename TArg6::TStorage S6; S6 p6;
03989     typedef ArgumentTraits< P7 > TArg7; typedef typename TArg7::TStorage S7; S7 p7;
03990     typedef ArgumentTraits< P8 > TArg8; typedef typename TArg8::TStorage S8; S8 p8;
03991     typedef ArgumentTraits< P9 > TArg9; typedef typename TArg9::TStorage S9; S9 p9;
03992     typedef ArgumentTraits< P10 > TArg10; typedef typename TArg10::TStorage S10; S10 p10;
03993     typedef ArgumentTraits< P11 > TArg11; typedef typename TArg11::TStorage S11; S11 p11;
03994     
03995 
03996     if ( decodeTuple<S1, S2, S3, S4, S5, S6, S7, S8, S9, S10, S11>( args, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11 ) != 0 )
03997     {
03998         return 0;
03999     }
04000 
04001     try
04002     {
04003         PyObjectClass* result = TPyShadowTraits::pyObject( new TCppClass( TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4), TArg5::arg(p5), TArg6::arg(p6), TArg7::arg(p7), TArg8::arg(p8), TArg9::arg(p9), TArg10::arg(p10), TArg11::arg(p11) ) );
04004         impl::fixObjectType(result);
04005         result->ob_type = iSubtype;
04006         result->ob_type->tp_flags &= (~Py_TPFLAGS_HAVE_GC);
04007         Py_INCREF(result->ob_type);
04008         return result;
04009     }
04010     LASS_UTIL_PYOBJECT_CALL_CATCH_AND_RETURN
04011 }
04012 
04013 /** allocate a new object with 12 arguments.
04014  */
04015 template <class PyObjectClass, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10, typename P11, typename P12>
04016 PyObject* construct( PyTypeObject* iSubtype, PyObject* args )
04017 {
04018     typedef ShadowTraits< PyObjectClass > TPyShadowTraits;
04019     typedef typename TPyShadowTraits::TCppClass TCppClass;
04020     typedef ArgumentTraits< P1 > TArg1; typedef typename TArg1::TStorage S1; S1 p1;
04021     typedef ArgumentTraits< P2 > TArg2; typedef typename TArg2::TStorage S2; S2 p2;
04022     typedef ArgumentTraits< P3 > TArg3; typedef typename TArg3::TStorage S3; S3 p3;
04023     typedef ArgumentTraits< P4 > TArg4; typedef typename TArg4::TStorage S4; S4 p4;
04024     typedef ArgumentTraits< P5 > TArg5; typedef typename TArg5::TStorage S5; S5 p5;
04025     typedef ArgumentTraits< P6 > TArg6; typedef typename TArg6::TStorage S6; S6 p6;
04026     typedef ArgumentTraits< P7 > TArg7; typedef typename TArg7::TStorage S7; S7 p7;
04027     typedef ArgumentTraits< P8 > TArg8; typedef typename TArg8::TStorage S8; S8 p8;
04028     typedef ArgumentTraits< P9 > TArg9; typedef typename TArg9::TStorage S9; S9 p9;
04029     typedef ArgumentTraits< P10 > TArg10; typedef typename TArg10::TStorage S10; S10 p10;
04030     typedef ArgumentTraits< P11 > TArg11; typedef typename TArg11::TStorage S11; S11 p11;
04031     typedef ArgumentTraits< P12 > TArg12; typedef typename TArg12::TStorage S12; S12 p12;
04032     
04033 
04034     if ( decodeTuple<S1, S2, S3, S4, S5, S6, S7, S8, S9, S10, S11, S12>( args, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12 ) != 0 )
04035     {
04036         return 0;
04037     }
04038 
04039     try
04040     {
04041         PyObjectClass* result = TPyShadowTraits::pyObject( new TCppClass( TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4), TArg5::arg(p5), TArg6::arg(p6), TArg7::arg(p7), TArg8::arg(p8), TArg9::arg(p9), TArg10::arg(p10), TArg11::arg(p11), TArg12::arg(p12) ) );
04042         impl::fixObjectType(result);
04043         result->ob_type = iSubtype;
04044         result->ob_type->tp_flags &= (~Py_TPFLAGS_HAVE_GC);
04045         Py_INCREF(result->ob_type);
04046         return result;
04047     }
04048     LASS_UTIL_PYOBJECT_CALL_CATCH_AND_RETURN
04049 }
04050 
04051 /** allocate a new object with 13 arguments.
04052  */
04053 template <class PyObjectClass, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10, typename P11, typename P12, typename P13>
04054 PyObject* construct( PyTypeObject* iSubtype, PyObject* args )
04055 {
04056     typedef ShadowTraits< PyObjectClass > TPyShadowTraits;
04057     typedef typename TPyShadowTraits::TCppClass TCppClass;
04058     typedef ArgumentTraits< P1 > TArg1; typedef typename TArg1::TStorage S1; S1 p1;
04059     typedef ArgumentTraits< P2 > TArg2; typedef typename TArg2::TStorage S2; S2 p2;
04060     typedef ArgumentTraits< P3 > TArg3; typedef typename TArg3::TStorage S3; S3 p3;
04061     typedef ArgumentTraits< P4 > TArg4; typedef typename TArg4::TStorage S4; S4 p4;
04062     typedef ArgumentTraits< P5 > TArg5; typedef typename TArg5::TStorage S5; S5 p5;
04063     typedef ArgumentTraits< P6 > TArg6; typedef typename TArg6::TStorage S6; S6 p6;
04064     typedef ArgumentTraits< P7 > TArg7; typedef typename TArg7::TStorage S7; S7 p7;
04065     typedef ArgumentTraits< P8 > TArg8; typedef typename TArg8::TStorage S8; S8 p8;
04066     typedef ArgumentTraits< P9 > TArg9; typedef typename TArg9::TStorage S9; S9 p9;
04067     typedef ArgumentTraits< P10 > TArg10; typedef typename TArg10::TStorage S10; S10 p10;
04068     typedef ArgumentTraits< P11 > TArg11; typedef typename TArg11::TStorage S11; S11 p11;
04069     typedef ArgumentTraits< P12 > TArg12; typedef typename TArg12::TStorage S12; S12 p12;
04070     typedef ArgumentTraits< P13 > TArg13; typedef typename TArg13::TStorage S13; S13 p13;
04071     
04072 
04073     if ( decodeTuple<S1, S2, S3, S4, S5, S6, S7, S8, S9, S10, S11, S12, S13>( args, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13 ) != 0 )
04074     {
04075         return 0;
04076     }
04077 
04078     try
04079     {
04080         PyObjectClass* result = TPyShadowTraits::pyObject( new TCppClass( TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4), TArg5::arg(p5), TArg6::arg(p6), TArg7::arg(p7), TArg8::arg(p8), TArg9::arg(p9), TArg10::arg(p10), TArg11::arg(p11), TArg12::arg(p12), TArg13::arg(p13) ) );
04081         impl::fixObjectType(result);
04082         result->ob_type = iSubtype;
04083         result->ob_type->tp_flags &= (~Py_TPFLAGS_HAVE_GC);
04084         Py_INCREF(result->ob_type);
04085         return result;
04086     }
04087     LASS_UTIL_PYOBJECT_CALL_CATCH_AND_RETURN
04088 }
04089 
04090 /** allocate a new object with 14 arguments.
04091  */
04092 template <class PyObjectClass, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10, typename P11, typename P12, typename P13, typename P14>
04093 PyObject* construct( PyTypeObject* iSubtype, PyObject* args )
04094 {
04095     typedef ShadowTraits< PyObjectClass > TPyShadowTraits;
04096     typedef typename TPyShadowTraits::TCppClass TCppClass;
04097     typedef ArgumentTraits< P1 > TArg1; typedef typename TArg1::TStorage S1; S1 p1;
04098     typedef ArgumentTraits< P2 > TArg2; typedef typename TArg2::TStorage S2; S2 p2;
04099     typedef ArgumentTraits< P3 > TArg3; typedef typename TArg3::TStorage S3; S3 p3;
04100     typedef ArgumentTraits< P4 > TArg4; typedef typename TArg4::TStorage S4; S4 p4;
04101     typedef ArgumentTraits< P5 > TArg5; typedef typename TArg5::TStorage S5; S5 p5;
04102     typedef ArgumentTraits< P6 > TArg6; typedef typename TArg6::TStorage S6; S6 p6;
04103     typedef ArgumentTraits< P7 > TArg7; typedef typename TArg7::TStorage S7; S7 p7;
04104     typedef ArgumentTraits< P8 > TArg8; typedef typename TArg8::TStorage S8; S8 p8;
04105     typedef ArgumentTraits< P9 > TArg9; typedef typename TArg9::TStorage S9; S9 p9;
04106     typedef ArgumentTraits< P10 > TArg10; typedef typename TArg10::TStorage S10; S10 p10;
04107     typedef ArgumentTraits< P11 > TArg11; typedef typename TArg11::TStorage S11; S11 p11;
04108     typedef ArgumentTraits< P12 > TArg12; typedef typename TArg12::TStorage S12; S12 p12;
04109     typedef ArgumentTraits< P13 > TArg13; typedef typename TArg13::TStorage S13; S13 p13;
04110     typedef ArgumentTraits< P14 > TArg14; typedef typename TArg14::TStorage S14; S14 p14;
04111     
04112 
04113     if ( decodeTuple<S1, S2, S3, S4, S5, S6, S7, S8, S9, S10, S11, S12, S13, S14>( args, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14 ) != 0 )
04114     {
04115         return 0;
04116     }
04117 
04118     try
04119     {
04120         PyObjectClass* result = TPyShadowTraits::pyObject( new TCppClass( TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4), TArg5::arg(p5), TArg6::arg(p6), TArg7::arg(p7), TArg8::arg(p8), TArg9::arg(p9), TArg10::arg(p10), TArg11::arg(p11), TArg12::arg(p12), TArg13::arg(p13), TArg14::arg(p14) ) );
04121         impl::fixObjectType(result);
04122         result->ob_type = iSubtype;
04123         result->ob_type->tp_flags &= (~Py_TPFLAGS_HAVE_GC);
04124         Py_INCREF(result->ob_type);
04125         return result;
04126     }
04127     LASS_UTIL_PYOBJECT_CALL_CATCH_AND_RETURN
04128 }
04129 
04130 /** allocate a new object with 15 arguments.
04131  */
04132 template <class PyObjectClass, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10, typename P11, typename P12, typename P13, typename P14, typename P15>
04133 PyObject* construct( PyTypeObject* iSubtype, PyObject* args )
04134 {
04135     typedef ShadowTraits< PyObjectClass > TPyShadowTraits;
04136     typedef typename TPyShadowTraits::TCppClass TCppClass;
04137     typedef ArgumentTraits< P1 > TArg1; typedef typename TArg1::TStorage S1; S1 p1;
04138     typedef ArgumentTraits< P2 > TArg2; typedef typename TArg2::TStorage S2; S2 p2;
04139     typedef ArgumentTraits< P3 > TArg3; typedef typename TArg3::TStorage S3; S3 p3;
04140     typedef ArgumentTraits< P4 > TArg4; typedef typename TArg4::TStorage S4; S4 p4;
04141     typedef ArgumentTraits< P5 > TArg5; typedef typename TArg5::TStorage S5; S5 p5;
04142     typedef ArgumentTraits< P6 > TArg6; typedef typename TArg6::TStorage S6; S6 p6;
04143     typedef ArgumentTraits< P7 > TArg7; typedef typename TArg7::TStorage S7; S7 p7;
04144     typedef ArgumentTraits< P8 > TArg8; typedef typename TArg8::TStorage S8; S8 p8;
04145     typedef ArgumentTraits< P9 > TArg9; typedef typename TArg9::TStorage S9; S9 p9;
04146     typedef ArgumentTraits< P10 > TArg10; typedef typename TArg10::TStorage S10; S10 p10;
04147     typedef ArgumentTraits< P11 > TArg11; typedef typename TArg11::TStorage S11; S11 p11;
04148     typedef ArgumentTraits< P12 > TArg12; typedef typename TArg12::TStorage S12; S12 p12;
04149     typedef ArgumentTraits< P13 > TArg13; typedef typename TArg13::TStorage S13; S13 p13;
04150     typedef ArgumentTraits< P14 > TArg14; typedef typename TArg14::TStorage S14; S14 p14;
04151     typedef ArgumentTraits< P15 > TArg15; typedef typename TArg15::TStorage S15; S15 p15;
04152     
04153 
04154     if ( decodeTuple<S1, S2, S3, S4, S5, S6, S7, S8, S9, S10, S11, S12, S13, S14, S15>( args, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15 ) != 0 )
04155     {
04156         return 0;
04157     }
04158 
04159     try
04160     {
04161         PyObjectClass* result = TPyShadowTraits::pyObject( new TCppClass( TArg1::arg(p1), TArg2::arg(p2), TArg3::arg(p3), TArg4::arg(p4), TArg5::arg(p5), TArg6::arg(p6), TArg7::arg(p7), TArg8::arg(p8), TArg9::arg(p9), TArg10::arg(p10), TArg11::arg(p11), TArg12::arg(p12), TArg13::arg(p13), TArg14::arg(p14), TArg15::arg(p15) ) );
04162         impl::fixObjectType(result);
04163         result->ob_type = iSubtype;
04164         result->ob_type->tp_flags &= (~Py_TPFLAGS_HAVE_GC);
04165         Py_INCREF(result->ob_type);
04166         return result;
04167     }
04168     LASS_UTIL_PYOBJECT_CALL_CATCH_AND_RETURN
04169 }
04170 
04171 
04172 
04173 
04174 // --- explicit resolver ---------------------------------------------------------------------------
04175 
04176 // This explicit resolver construct is a wicked meta function that will call the write
04177 // template function based on template parameters in TypeListType.
04178 
04179 template <class CppClass, typename R, typename TypeListType> struct ExplicitResolver;
04180 template <class CppClass, typename R, typename P1, typename TypeListType> struct ExplicitResolver1;
04181 template <class CppClass, typename R, typename P1, typename P2, typename TypeListType> struct ExplicitResolver2;
04182 template <class CppClass, typename R, typename P1, typename P2, typename P3, typename TypeListType> struct ExplicitResolver3;
04183 template <class CppClass, typename R, typename P1, typename P2, typename P3, typename P4, typename TypeListType> struct ExplicitResolver4;
04184 template <class CppClass, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename TypeListType> struct ExplicitResolver5;
04185 template <class CppClass, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename TypeListType> struct ExplicitResolver6;
04186 template <class CppClass, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename TypeListType> struct ExplicitResolver7;
04187 template <class CppClass, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename TypeListType> struct ExplicitResolver8;
04188 template <class CppClass, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename TypeListType> struct ExplicitResolver9;
04189 template <class CppClass, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10, typename TypeListType> struct ExplicitResolver10;
04190 template <class CppClass, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10, typename P11, typename TypeListType> struct ExplicitResolver11;
04191 template <class CppClass, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10, typename P11, typename P12, typename TypeListType> struct ExplicitResolver12;
04192 template <class CppClass, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10, typename P11, typename P12, typename P13, typename TypeListType> struct ExplicitResolver13;
04193 template <class CppClass, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10, typename P11, typename P12, typename P13, typename P14, typename TypeListType> struct ExplicitResolver14;
04194 template <class CppClass, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10, typename P11, typename P12, typename P13, typename P14, typename P15, typename TypeListType> struct ExplicitResolver15;
04195 
04196 template <class CppClass, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10, typename P11, typename P12, typename P13, typename P14, typename P15, typename P16, typename TypeListType> struct ExplicitResolver16;
04197 
04198 
04199 template <class CppClass, typename R>
04200 struct ExplicitResolver<CppClass, R, lass::meta::NullType>
04201 {
04202     struct Impl
04203     {
04204         static PyObject* callFunction( PyObject* args, R (*iFunction)() )
04205         {
04206             return ::lass::python::impl::callFunction<R>( args, iFunction );
04207         }
04208         static PyObject* callMethod( PyObject* args, CppClass* iObject, R (CppClass::*iMethod)() )
04209         {
04210             return CallMethod<CppClass>::call( args, iObject, iMethod );
04211         }
04212         static PyObject* callMethod( PyObject* args, const CppClass* iObject, R (CppClass::*iMethod)() const )
04213         {
04214             return CallMethod<CppClass>::call( args, iObject, iMethod );
04215         }
04216         static PyObject* callConstructor( PyTypeObject* iSubtype, PyObject* args )
04217         {
04218             return construct<CppClass>( iSubtype, args );
04219         }
04220         static bool isConstMember( R (CppClass::*)() ) { return false; }
04221         static bool isConstMember( R (CppClass::*)() const ) { return true; }
04222     };
04223     typedef Impl TImpl;
04224 };
04225 
04226 template <class CppClass, typename R, typename P1>
04227 struct ExplicitResolver1<CppClass, R, P1, lass::meta::NullType>
04228 {
04229     struct Impl
04230     {
04231         static PyObject* callFunction( PyObject* args, R (*iFunction)(P1) )
04232         {
04233             return ::lass::python::impl::callFunction<R, P1>( args, iFunction );
04234         }
04235         static PyObject* callMethod( PyObject* args, CppClass* iObject, R (CppClass::*iMethod)(P1) )
04236         {
04237             return CallMethod<CppClass>::call( args, iObject, iMethod );
04238         }
04239         static PyObject* callMethod( PyObject* args, const CppClass* iObject, R (CppClass::*iMethod)(P1) const )
04240         {
04241             return CallMethod<CppClass>::call( args, iObject, iMethod );
04242         }
04243         static bool isConstMember( R (CppClass::*)(P1) ) { return false; }
04244         static bool isConstMember( R (CppClass::*)(P1) const ) { return true; }
04245         static PyObject* callFreeMethod( PyObject* args, CppClass* iObject, R (*iFreeMethod)(P1) )
04246         {
04247             return CallMethod<CppClass>::callFree( args, iObject, iFreeMethod );
04248         }
04249         static PyObject* callConstructor( PyTypeObject* iSubtype, PyObject* args )
04250         {
04251             return construct<CppClass, P1>( iSubtype, args );
04252         }
04253     };
04254     typedef Impl TImpl;
04255 };
04256 
04257 template <class CppClass, typename R, typename P1, typename P2>
04258 struct ExplicitResolver2<CppClass, R, P1, P2, lass::meta::NullType>
04259 {
04260     struct Impl
04261     {
04262         static PyObject* callFunction( PyObject* args, R (*iFunction)(P1, P2) )
04263         {
04264             return ::lass::python::impl::callFunction<R, P1, P2>( args, iFunction );
04265         }
04266         static PyObject* callMethod( PyObject* args, CppClass* iObject, R (CppClass::*iMethod)(P1, P2) )
04267         {
04268             return CallMethod<CppClass>::call( args, iObject, iMethod );
04269         }
04270         static PyObject* callMethod( PyObject* args, const CppClass* iObject, R (CppClass::*iMethod)(P1, P2) const )
04271         {
04272             return CallMethod<CppClass>::call( args, iObject, iMethod );
04273         }
04274         static bool isConstMember( R (CppClass::*)(P1, P2) ) { return false; }
04275         static bool isConstMember( R (CppClass::*)(P1, P2) const ) { return true; }
04276         static PyObject* callFreeMethod( PyObject* args, CppClass* iObject, R (*iFreeMethod)(P1, P2) )
04277         {
04278             return CallMethod<CppClass>::callFree( args, iObject, iFreeMethod );
04279         }
04280         static PyObject* callConstructor( PyTypeObject* iSubtype, PyObject* args )
04281         {
04282             return construct<CppClass, P1, P2>( iSubtype, args );
04283         }
04284     };
04285     typedef Impl TImpl;
04286 };
04287 
04288 template <class CppClass, typename R, typename P1, typename P2, typename P3>
04289 struct ExplicitResolver3<CppClass, R, P1, P2, P3, lass::meta::NullType>
04290 {
04291     struct Impl
04292     {
04293         static PyObject* callFunction( PyObject* args, R (*iFunction)(P1, P2, P3) )
04294         {
04295             return ::lass::python::impl::callFunction<R, P1, P2, P3>( args, iFunction );
04296         }
04297         static PyObject* callMethod( PyObject* args, CppClass* iObject, R (CppClass::*iMethod)(P1, P2, P3) )
04298         {
04299             return CallMethod<CppClass>::call( args, iObject, iMethod );
04300         }
04301         static PyObject* callMethod( PyObject* args, const CppClass* iObject, R (CppClass::*iMethod)(P1, P2, P3) const )
04302         {
04303             return CallMethod<CppClass>::call( args, iObject, iMethod );
04304         }
04305         static bool isConstMember( R (CppClass::*)(P1, P2, P3) ) { return false; }
04306         static bool isConstMember( R (CppClass::*)(P1, P2, P3) const ) { return true; }
04307         static PyObject* callFreeMethod( PyObject* args, CppClass* iObject, R (*iFreeMethod)(P1, P2, P3) )
04308         {
04309             return CallMethod<CppClass>::callFree( args, iObject, iFreeMethod );
04310         }
04311         static PyObject* callConstructor( PyTypeObject* iSubtype, PyObject* args )
04312         {
04313             return construct<CppClass, P1, P2, P3>( iSubtype, args );
04314         }
04315     };
04316     typedef Impl TImpl;
04317 };
04318 
04319 template <class CppClass, typename R, typename P1, typename P2, typename P3, typename P4>
04320 struct ExplicitResolver4<CppClass, R, P1, P2, P3, P4, lass::meta::NullType>
04321 {
04322     struct Impl
04323     {
04324         static PyObject* callFunction( PyObject* args, R (*iFunction)(P1, P2, P3, P4) )
04325         {
04326             return ::lass::python::impl::callFunction<R, P1, P2, P3, P4>( args, iFunction );
04327         }
04328         static PyObject* callMethod( PyObject* args, CppClass* iObject, R (CppClass::*iMethod)(P1, P2, P3, P4) )
04329         {
04330             return CallMethod<CppClass>::call( args, iObject, iMethod );
04331         }
04332         static PyObject* callMethod( PyObject* args, const CppClass* iObject, R (CppClass::*iMethod)(P1, P2, P3, P4) const )
04333         {
04334             return CallMethod<CppClass>::call( args, iObject, iMethod );
04335         }
04336         static bool isConstMember( R (CppClass::*)(P1, P2, P3, P4) ) { return false; }
04337         static bool isConstMember( R (CppClass::*)(P1, P2, P3, P4) const ) { return true; }
04338         static PyObject* callFreeMethod( PyObject* args, CppClass* iObject, R (*iFreeMethod)(P1, P2, P3, P4) )
04339         {
04340             return CallMethod<CppClass>::callFree( args, iObject, iFreeMethod );
04341         }
04342         static PyObject* callConstructor( PyTypeObject* iSubtype, PyObject* args )
04343         {
04344             return construct<CppClass, P1, P2, P3, P4>( iSubtype, args );
04345         }
04346     };
04347     typedef Impl TImpl;
04348 };
04349 
04350 template <class CppClass, typename R, typename P1, typename P2, typename P3, typename P4, typename P5>
04351 struct ExplicitResolver5<CppClass, R, P1, P2, P3, P4, P5, lass::meta::NullType>
04352 {
04353     struct Impl
04354     {
04355         static PyObject* callFunction( PyObject* args, R (*iFunction)(P1, P2, P3, P4, P5) )
04356         {
04357             return ::lass::python::impl::callFunction<R, P1, P2, P3, P4, P5>( args, iFunction );
04358         }
04359         static PyObject* callMethod( PyObject* args, CppClass* iObject, R (CppClass::*iMethod)(P1, P2, P3, P4, P5) )
04360         {
04361             return CallMethod<CppClass>::call( args, iObject, iMethod );
04362         }
04363         static PyObject* callMethod( PyObject* args, const CppClass* iObject, R (CppClass::*iMethod)(P1, P2, P3, P4, P5) const )
04364         {
04365             return CallMethod<CppClass>::call( args, iObject, iMethod );
04366         }
04367         static bool isConstMember( R (CppClass::*)(P1, P2, P3, P4, P5) ) { return false; }
04368         static bool isConstMember( R (CppClass::*)(P1, P2, P3, P4, P5) const ) { return true; }
04369         static PyObject* callFreeMethod( PyObject* args, CppClass* iObject, R (*iFreeMethod)(P1, P2, P3, P4, P5) )
04370         {
04371             return CallMethod<CppClass>::callFree( args, iObject, iFreeMethod );
04372         }
04373         static PyObject* callConstructor( PyTypeObject* iSubtype, PyObject* args )
04374         {
04375             return construct<CppClass, P1, P2, P3, P4, P5>( iSubtype, args );
04376         }
04377     };
04378     typedef Impl TImpl;
04379 };
04380 
04381 template <class CppClass, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6>
04382 struct ExplicitResolver6<CppClass, R, P1, P2, P3, P4, P5, P6, lass::meta::NullType>
04383 {
04384     struct Impl
04385     {
04386         static PyObject* callFunction( PyObject* args, R (*iFunction)(P1, P2, P3, P4, P5, P6) )
04387         {
04388             return ::lass::python::impl::callFunction<R, P1, P2, P3, P4, P5, P6>( args, iFunction );
04389         }
04390         static PyObject* callMethod( PyObject* args, CppClass* iObject, R (CppClass::*iMethod)(P1, P2, P3, P4, P5, P6) )
04391         {
04392             return CallMethod<CppClass>::call( args, iObject, iMethod );
04393         }
04394         static PyObject* callMethod( PyObject* args, const CppClass* iObject, R (CppClass::*iMethod)(P1, P2, P3, P4, P5, P6) const )
04395         {
04396             return CallMethod<CppClass>::call( args, iObject, iMethod );
04397         }
04398         static bool isConstMember( R (CppClass::*)(P1, P2, P3, P4, P5, P6) ) { return false; }
04399         static bool isConstMember( R (CppClass::*)(P1, P2, P3, P4, P5, P6) const ) { return true; }
04400         static PyObject* callFreeMethod( PyObject* args, CppClass* iObject, R (*iFreeMethod)(P1, P2, P3, P4, P5, P6) )
04401         {
04402             return CallMethod<CppClass>::callFree( args, iObject, iFreeMethod );
04403         }
04404         static PyObject* callConstructor( PyTypeObject* iSubtype, PyObject* args )
04405         {
04406             return construct<CppClass, P1, P2, P3, P4, P5, P6>( iSubtype, args );
04407         }
04408     };
04409     typedef Impl TImpl;
04410 };
04411 
04412 template <class CppClass, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7>
04413 struct ExplicitResolver7<CppClass, R, P1, P2, P3, P4, P5, P6, P7, lass::meta::NullType>
04414 {
04415     struct Impl
04416     {
04417         static PyObject* callFunction( PyObject* args, R (*iFunction)(P1, P2, P3, P4, P5, P6, P7) )
04418         {
04419             return ::lass::python::impl::callFunction<R, P1, P2, P3, P4, P5, P6, P7>( args, iFunction );
04420         }
04421         static PyObject* callMethod( PyObject* args, CppClass* iObject, R (CppClass::*iMethod)(P1, P2, P3, P4, P5, P6, P7) )
04422         {
04423             return CallMethod<CppClass>::call( args, iObject, iMethod );
04424         }
04425         static PyObject* callMethod( PyObject* args, const CppClass* iObject, R (CppClass::*iMethod)(P1, P2, P3, P4, P5, P6, P7) const )
04426         {
04427             return CallMethod<CppClass>::call( args, iObject, iMethod );
04428         }
04429         static bool isConstMember( R (CppClass::*)(P1, P2, P3, P4, P5, P6, P7) ) { return false; }
04430         static bool isConstMember( R (CppClass::*)(P1, P2, P3, P4, P5, P6, P7) const ) { return true; }
04431         static PyObject* callFreeMethod( PyObject* args, CppClass* iObject, R (*iFreeMethod)(P1, P2, P3, P4, P5, P6, P7) )
04432         {
04433             return CallMethod<CppClass>::callFree( args, iObject, iFreeMethod );
04434         }
04435         static PyObject* callConstructor( PyTypeObject* iSubtype, PyObject* args )
04436         {
04437             return construct<CppClass, P1, P2, P3, P4, P5, P6, P7>( iSubtype, args );
04438         }
04439     };
04440     typedef Impl TImpl;
04441 };
04442 
04443 template <class CppClass, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8>
04444 struct ExplicitResolver8<CppClass, R, P1, P2, P3, P4, P5, P6, P7, P8, lass::meta::NullType>
04445 {
04446     struct Impl
04447     {
04448         static PyObject* callFunction( PyObject* args, R (*iFunction)(P1, P2, P3, P4, P5, P6, P7, P8) )
04449         {
04450             return ::lass::python::impl::callFunction<R, P1, P2, P3, P4, P5, P6, P7, P8>( args, iFunction );
04451         }
04452         static PyObject* callMethod( PyObject* args, CppClass* iObject, R (CppClass::*iMethod)(P1, P2, P3, P4, P5, P6, P7, P8) )
04453         {
04454             return CallMethod<CppClass>::call( args, iObject, iMethod );
04455         }
04456         static PyObject* callMethod( PyObject* args, const CppClass* iObject, R (CppClass::*iMethod)(P1, P2, P3, P4, P5, P6, P7, P8) const )
04457         {
04458             return CallMethod<CppClass>::call( args, iObject, iMethod );
04459         }
04460         static bool isConstMember( R (CppClass::*)(P1, P2, P3, P4, P5, P6, P7, P8) ) { return false; }
04461         static bool isConstMember( R (CppClass::*)(P1, P2, P3, P4, P5, P6, P7, P8) const ) { return true; }
04462         static PyObject* callFreeMethod( PyObject* args, CppClass* iObject, R (*iFreeMethod)(P1, P2, P3, P4, P5, P6, P7, P8) )
04463         {
04464             return CallMethod<CppClass>::callFree( args, iObject, iFreeMethod );
04465         }
04466         static PyObject* callConstructor( PyTypeObject* iSubtype, PyObject* args )
04467         {
04468             return construct<CppClass, P1, P2, P3, P4, P5, P6, P7, P8>( iSubtype, args );
04469         }
04470     };
04471     typedef Impl TImpl;
04472 };
04473 
04474 template <class CppClass, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9>
04475 struct ExplicitResolver9<CppClass, R, P1, P2, P3, P4, P5, P6, P7, P8, P9, lass::meta::NullType>
04476 {
04477     struct Impl
04478     {
04479         static PyObject* callFunction( PyObject* args, R (*iFunction)(P1, P2, P3, P4, P5, P6, P7, P8, P9) )
04480         {
04481             return ::lass::python::impl::callFunction<R, P1, P2, P3, P4, P5, P6, P7, P8, P9>( args, iFunction );
04482         }
04483         static PyObject* callMethod( PyObject* args, CppClass* iObject, R (CppClass::*iMethod)(P1, P2, P3, P4, P5, P6, P7, P8, P9) )
04484         {
04485             return CallMethod<CppClass>::call( args, iObject, iMethod );
04486         }
04487         static PyObject* callMethod( PyObject* args, const CppClass* iObject, R (CppClass::*iMethod)(P1, P2, P3, P4, P5, P6, P7, P8, P9) const )
04488         {
04489             return CallMethod<CppClass>::call( args, iObject, iMethod );
04490         }
04491         static bool isConstMember( R (CppClass::*)(P1, P2, P3, P4, P5, P6, P7, P8, P9) ) { return false; }
04492         static bool isConstMember( R (CppClass::*)(P1, P2, P3, P4, P5, P6, P7, P8, P9) const ) { return true; }
04493         static PyObject* callFreeMethod( PyObject* args, CppClass* iObject, R (*iFreeMethod)(P1, P2, P3, P4, P5, P6, P7, P8, P9) )
04494         {
04495             return CallMethod<CppClass>::callFree( args, iObject, iFreeMethod );
04496         }
04497         static PyObject* callConstructor( PyTypeObject* iSubtype, PyObject* args )
04498         {
04499             return construct<CppClass, P1, P2, P3, P4, P5, P6, P7, P8, P9>( iSubtype, args );
04500         }
04501     };
04502     typedef Impl TImpl;
04503 };
04504 
04505 template <class CppClass, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10>
04506 struct ExplicitResolver10<CppClass, R, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, lass::meta::NullType>
04507 {
04508     struct Impl
04509     {
04510         static PyObject* callFunction( PyObject* args, R (*iFunction)(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10) )
04511         {
04512             return ::lass::python::impl::callFunction<R, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10>( args, iFunction );
04513         }
04514         static PyObject* callMethod( PyObject* args, CppClass* iObject, R (CppClass::*iMethod)(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10) )
04515         {
04516             return CallMethod<CppClass>::call( args, iObject, iMethod );
04517         }
04518         static PyObject* callMethod( PyObject* args, const CppClass* iObject, R (CppClass::*iMethod)(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10) const )
04519         {
04520             return CallMethod<CppClass>::call( args, iObject, iMethod );
04521         }
04522         static bool isConstMember( R (CppClass::*)(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10) ) { return false; }
04523         static bool isConstMember( R (CppClass::*)(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10) const ) { return true; }
04524         static PyObject* callFreeMethod( PyObject* args, CppClass* iObject, R (*iFreeMethod)(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10) )
04525         {
04526             return CallMethod<CppClass>::callFree( args, iObject, iFreeMethod );
04527         }
04528         static PyObject* callConstructor( PyTypeObject* iSubtype, PyObject* args )
04529         {
04530             return construct<CppClass, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10>( iSubtype, args );
04531         }
04532     };
04533     typedef Impl TImpl;
04534 };
04535 
04536 template <class CppClass, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10, typename P11>
04537 struct ExplicitResolver11<CppClass, R, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, lass::meta::NullType>
04538 {
04539     struct Impl
04540     {
04541         static PyObject* callFunction( PyObject* args, R (*iFunction)(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11) )
04542         {
04543             return ::lass::python::impl::callFunction<R, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11>( args, iFunction );
04544         }
04545         static PyObject* callMethod( PyObject* args, CppClass* iObject, R (CppClass::*iMethod)(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11) )
04546         {
04547             return CallMethod<CppClass>::call( args, iObject, iMethod );
04548         }
04549         static PyObject* callMethod( PyObject* args, const CppClass* iObject, R (CppClass::*iMethod)(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11) const )
04550         {
04551             return CallMethod<CppClass>::call( args, iObject, iMethod );
04552         }
04553         static bool isConstMember( R (CppClass::*)(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11) ) { return false; }
04554         static bool isConstMember( R (CppClass::*)(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11) const ) { return true; }
04555         static PyObject* callFreeMethod( PyObject* args, CppClass* iObject, R (*iFreeMethod)(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11) )
04556         {
04557             return CallMethod<CppClass>::callFree( args, iObject, iFreeMethod );
04558         }
04559         static PyObject* callConstructor( PyTypeObject* iSubtype, PyObject* args )
04560         {
04561             return construct<CppClass, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11>( iSubtype, args );
04562         }
04563     };
04564     typedef Impl TImpl;
04565 };
04566 
04567 template <class CppClass, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10, typename P11, typename P12>
04568 struct ExplicitResolver12<CppClass, R, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, lass::meta::NullType>
04569 {
04570     struct Impl
04571     {
04572         static PyObject* callFunction( PyObject* args, R (*iFunction)(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12) )
04573         {
04574             return ::lass::python::impl::callFunction<R, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12>( args, iFunction );
04575         }
04576         static PyObject* callMethod( PyObject* args, CppClass* iObject, R (CppClass::*iMethod)(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12) )
04577         {
04578             return CallMethod<CppClass>::call( args, iObject, iMethod );
04579         }
04580         static PyObject* callMethod( PyObject* args, const CppClass* iObject, R (CppClass::*iMethod)(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12) const )
04581         {
04582             return CallMethod<CppClass>::call( args, iObject, iMethod );
04583         }
04584         static bool isConstMember( R (CppClass::*)(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12) ) { return false; }
04585         static bool isConstMember( R (CppClass::*)(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12) const ) { return true; }
04586         static PyObject* callFreeMethod( PyObject* args, CppClass* iObject, R (*iFreeMethod)(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12) )
04587         {
04588             return CallMethod<CppClass>::callFree( args, iObject, iFreeMethod );
04589         }
04590         static PyObject* callConstructor( PyTypeObject* iSubtype, PyObject* args )
04591         {
04592             return construct<CppClass, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12>( iSubtype, args );
04593         }
04594     };
04595     typedef Impl TImpl;
04596 };
04597 
04598 template <class CppClass, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10, typename P11, typename P12, typename P13>
04599 struct ExplicitResolver13<CppClass, R, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, lass::meta::NullType>
04600 {
04601     struct Impl
04602     {
04603         static PyObject* callFunction( PyObject* args, R (*iFunction)(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13) )
04604         {
04605             return ::lass::python::impl::callFunction<R, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13>( args, iFunction );
04606         }
04607         static PyObject* callMethod( PyObject* args, CppClass* iObject, R (CppClass::*iMethod)(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13) )
04608         {
04609             return CallMethod<CppClass>::call( args, iObject, iMethod );
04610         }
04611         static PyObject* callMethod( PyObject* args, const CppClass* iObject, R (CppClass::*iMethod)(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13) const )
04612         {
04613             return CallMethod<CppClass>::call( args, iObject, iMethod );
04614         }
04615         static bool isConstMember( R (CppClass::*)(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13) ) { return false; }
04616         static bool isConstMember( R (CppClass::*)(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13) const ) { return true; }
04617         static PyObject* callFreeMethod( PyObject* args, CppClass* iObject, R (*iFreeMethod)(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13) )
04618         {
04619             return CallMethod<CppClass>::callFree( args, iObject, iFreeMethod );
04620         }
04621         static PyObject* callConstructor( PyTypeObject* iSubtype, PyObject* args )
04622         {
04623             return construct<CppClass, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13>( iSubtype, args );
04624         }
04625     };
04626     typedef Impl TImpl;
04627 };
04628 
04629 template <class CppClass, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10, typename P11, typename P12, typename P13, typename P14>
04630 struct ExplicitResolver14<CppClass, R, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, lass::meta::NullType>
04631 {
04632     struct Impl
04633     {
04634         static PyObject* callFunction( PyObject* args, R (*iFunction)(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14) )
04635         {
04636             return ::lass::python::impl::callFunction<R, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14>( args, iFunction );
04637         }
04638         static PyObject* callMethod( PyObject* args, CppClass* iObject, R (CppClass::*iMethod)(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14) )
04639         {
04640             return CallMethod<CppClass>::call( args, iObject, iMethod );
04641         }
04642         static PyObject* callMethod( PyObject* args, const CppClass* iObject, R (CppClass::*iMethod)(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14) const )
04643         {
04644             return CallMethod<CppClass>::call( args, iObject, iMethod );
04645         }
04646         static bool isConstMember( R (CppClass::*)(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14) ) { return false; }
04647         static bool isConstMember( R (CppClass::*)(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14) const ) { return true; }
04648         static PyObject* callFreeMethod( PyObject* args, CppClass* iObject, R (*iFreeMethod)(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14) )
04649         {
04650             return CallMethod<CppClass>::callFree( args, iObject, iFreeMethod );
04651         }
04652         static PyObject* callConstructor( PyTypeObject* iSubtype, PyObject* args )
04653         {
04654             return construct<CppClass, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14>( iSubtype, args );
04655         }
04656     };
04657     typedef Impl TImpl;
04658 };
04659 
04660 template <class CppClass, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10, typename P11, typename P12, typename P13, typename P14, typename P15>
04661 struct ExplicitResolver15<CppClass, R, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, lass::meta::NullType>
04662 {
04663     struct Impl
04664     {
04665         static PyObject* callFunction( PyObject* args, R (*iFunction)(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15) )
04666         {
04667             return ::lass::python::impl::callFunction<R, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15>( args, iFunction );
04668         }
04669         static PyObject* callMethod( PyObject* args, CppClass* iObject, R (CppClass::*iMethod)(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15) )
04670         {
04671             return CallMethod<CppClass>::call( args, iObject, iMethod );
04672         }
04673         static PyObject* callMethod( PyObject* args, const CppClass* iObject, R (CppClass::*iMethod)(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15) const )
04674         {
04675             return CallMethod<CppClass>::call( args, iObject, iMethod );
04676         }
04677         static bool isConstMember( R (CppClass::*)(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15) ) { return false; }
04678         static bool isConstMember( R (CppClass::*)(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15) const ) { return true; }
04679         static PyObject* callFreeMethod( PyObject* args, CppClass* iObject, R (*iFreeMethod)(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15) )
04680         {
04681             return CallMethod<CppClass>::callFree( args, iObject, iFreeMethod );
04682         }
04683         static PyObject* callConstructor( PyTypeObject* iSubtype, PyObject* args )
04684         {
04685             return construct<CppClass, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15>( iSubtype, args );
04686         }
04687     };
04688     typedef Impl TImpl;
04689 };
04690 
04691 
04692 template <class CppClass, typename R, typename Head, typename Tail>
04693 struct ExplicitResolver<CppClass, R, meta::TypeList<Head, Tail> >
04694 {
04695     typedef typename ExplicitResolver1<CppClass, R, Head, Tail>::TImpl TImpl;
04696 };
04697 
04698 template <class CppClass, typename R, typename P1, typename Head, typename Tail>
04699 struct ExplicitResolver1<CppClass, R, P1, meta::TypeList<Head, Tail> >
04700 {
04701     typedef typename ExplicitResolver2<CppClass, R, P1, Head, Tail>::TImpl TImpl;
04702 };
04703 
04704 template <class CppClass, typename R, typename P1, typename P2, typename Head, typename Tail>
04705 struct ExplicitResolver2<CppClass, R, P1, P2, meta::TypeList<Head, Tail> >
04706 {
04707     typedef typename ExplicitResolver3<CppClass, R, P1, P2, Head, Tail>::TImpl TImpl;
04708 };
04709 
04710 template <class CppClass, typename R, typename P1, typename P2, typename P3, typename Head, typename Tail>
04711 struct ExplicitResolver3<CppClass, R, P1, P2, P3, meta::TypeList<Head, Tail> >
04712 {
04713     typedef typename ExplicitResolver4<CppClass, R, P1, P2, P3, Head, Tail>::TImpl TImpl;
04714 };
04715 
04716 template <class CppClass, typename R, typename P1, typename P2, typename P3, typename P4, typename Head, typename Tail>
04717 struct ExplicitResolver4<CppClass, R, P1, P2, P3, P4, meta::TypeList<Head, Tail> >
04718 {
04719     typedef typename ExplicitResolver5<CppClass, R, P1, P2, P3, P4, Head, Tail>::TImpl TImpl;
04720 };
04721 
04722 template <class CppClass, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename Head, typename Tail>
04723 struct ExplicitResolver5<CppClass, R, P1, P2, P3, P4, P5, meta::TypeList<Head, Tail> >
04724 {
04725     typedef typename ExplicitResolver6<CppClass, R, P1, P2, P3, P4, P5, Head, Tail>::TImpl TImpl;
04726 };
04727 
04728 template <class CppClass, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename Head, typename Tail>
04729 struct ExplicitResolver6<CppClass, R, P1, P2, P3, P4, P5, P6, meta::TypeList<Head, Tail> >
04730 {
04731     typedef typename ExplicitResolver7<CppClass, R, P1, P2, P3, P4, P5, P6, Head, Tail>::TImpl TImpl;
04732 };
04733 
04734 template <class CppClass, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename Head, typename Tail>
04735 struct ExplicitResolver7<CppClass, R, P1, P2, P3, P4, P5, P6, P7, meta::TypeList<Head, Tail> >
04736 {
04737     typedef typename ExplicitResolver8<CppClass, R, P1, P2, P3, P4, P5, P6, P7, Head, Tail>::TImpl TImpl;
04738 };
04739 
04740 template <class CppClass, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename Head, typename Tail>
04741 struct ExplicitResolver8<CppClass, R, P1, P2, P3, P4, P5, P6, P7, P8, meta::TypeList<Head, Tail> >
04742 {
04743     typedef typename ExplicitResolver9<CppClass, R, P1, P2, P3, P4, P5, P6, P7, P8, Head, Tail>::TImpl TImpl;
04744 };
04745 
04746 template <class CppClass, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename Head, typename Tail>
04747 struct ExplicitResolver9<CppClass, R, P1, P2, P3, P4, P5, P6, P7, P8, P9, meta::TypeList<Head, Tail> >
04748 {
04749     typedef typename ExplicitResolver10<CppClass, R, P1, P2, P3, P4, P5, P6, P7, P8, P9, Head, Tail>::TImpl TImpl;
04750 };
04751 
04752 template <class CppClass, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10, typename Head, typename Tail>
04753 struct ExplicitResolver10<CppClass, R, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, meta::TypeList<Head, Tail> >
04754 {
04755     typedef typename ExplicitResolver11<CppClass, R, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, Head, Tail>::TImpl TImpl;
04756 };
04757 
04758 template <class CppClass, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10, typename P11, typename Head, typename Tail>
04759 struct ExplicitResolver11<CppClass, R, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, meta::TypeList<Head, Tail> >
04760 {
04761     typedef typename ExplicitResolver12<CppClass, R, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, Head, Tail>::TImpl TImpl;
04762 };
04763 
04764 template <class CppClass, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10, typename P11, typename P12, typename Head, typename Tail>
04765 struct ExplicitResolver12<CppClass, R, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, meta::TypeList<Head, Tail> >
04766 {
04767     typedef typename ExplicitResolver13<CppClass, R, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, Head, Tail>::TImpl TImpl;
04768 };
04769 
04770 template <class CppClass, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10, typename P11, typename P12, typename P13, typename Head, typename Tail>
04771 struct ExplicitResolver13<CppClass, R, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, meta::TypeList<Head, Tail> >
04772 {
04773     typedef typename ExplicitResolver14<CppClass, R, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, Head, Tail>::TImpl TImpl;
04774 };
04775 
04776 template <class CppClass, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10, typename P11, typename P12, typename P13, typename P14, typename Head, typename Tail>
04777 struct ExplicitResolver14<CppClass, R, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, meta::TypeList<Head, Tail> >
04778 {
04779     typedef typename ExplicitResolver15<CppClass, R, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, Head, Tail>::TImpl TImpl;
04780 };
04781 
04782 template <class CppClass, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10, typename P11, typename P12, typename P13, typename P14, typename P15, typename Head, typename Tail>
04783 struct ExplicitResolver15<CppClass, R, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, meta::TypeList<Head, Tail> >
04784 {
04785     typedef typename ExplicitResolver16<CppClass, R, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, Head, Tail>::TImpl TImpl;
04786 };
04787 
04788 
04789 
04790 }
04791 
04792 }
04793 
04794 }
04795 
04796 #if LASS_COMPILER_TYPE == LASS_COMPILER_TYPE_MSVC
04797 #   pragma warning(pop)
04798 #endif
04799 
04800 #endif
04801 
04802 // 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