Library of Assembled Shared Sources
pyobject_macros.h
Go to the documentation of this file.
1/*
2 * *** ATTENTION! DO NOT MODIFY THIS FILE DIRECTLY! ***
3 *
4 * It has automatically been generated from pyobject_macros.tmpl.h
5 * by param_expander.py on Tue Oct 7 01:22:05 2025.
6 */
7
8/** @file
9 * @author Bram de Greve (bram@cocamware.com)
10 * @author Tom De Muer (tom@cocamware.com)
11 *
12 * *** BEGIN LICENSE INFORMATION ***
13 *
14 * The contents of this file are subject to the Common Public Attribution License
15 * Version 1.0 (the "License"); you may not use this file except in compliance with
16 * the License. You may obtain a copy of the License at
17 * http://lass.sourceforge.net/cpal-license. The License is based on the
18 * Mozilla Public License Version 1.1 but Sections 14 and 15 have been added to cover
19 * use of software over a computer network and provide for limited attribution for
20 * the Original Developer. In addition, Exhibit A has been modified to be consistent
21 * with Exhibit B.
22 *
23 * Software distributed under the License is distributed on an "AS IS" basis, WITHOUT
24 * WARRANTY OF ANY KIND, either express or implied. See the License for the specific
25 * language governing rights and limitations under the License.
26 *
27 * The Original Code is LASS - Library of Assembled Shared Sources.
28 *
29 * The Initial Developer of the Original Code is Bram de Greve and Tom De Muer.
30 * The Original Developer is the Initial Developer.
31 *
32 * All portions of the code written by the Initial Developer are:
33 * Copyright (C) 2004-2025 the Initial Developer.
34 * All Rights Reserved.
35 *
36 * Contributor(s):
37 *
38 * Alternatively, the contents of this file may be used under the terms of the
39 * GNU General Public License Version 2 or later (the GPL), in which case the
40 * provisions of GPL are applicable instead of those above. If you wish to allow use
41 * of your version of this file only under the terms of the GPL and not to allow
42 * others to use your version of this file under the CPAL, indicate your decision by
43 * deleting the provisions above and replace them with the notice and other
44 * provisions required by the GPL License. If you do not delete the provisions above,
45 * a recipient may use your version of this file under either the CPAL or the GPL.
46 *
47 * *** END LICENSE INFORMATION ***
48 */
49
50// convention for names of macro arguments:
51//
52// i_foo: must be an identifier (bar is an identifier, spam::bar is not)
53// s_foo: must be a string literal ("bar" is a string literal, bar is not)
54// t_foo: must be an declared type and may be qualified (could be spam::Bar<Ham>)
55// o_foo: must be an existing object (could be spam::bar if spam::bar exists as object)
56// f_foo: must be a declared function (could be spam::bar if spam::bar(...) is declared as function)
57
58#ifndef LASS_GUARDIAN_OF_INCLUSION_UTIL_PYOBJECT_MACROS_H
59#define LASS_GUARDIAN_OF_INCLUSION_UTIL_PYOBJECT_MACROS_H
60
61#include "pyobject_call.inl"
62#include "module_definition.h"
63#include "../meta/is_member.h"
64#include "../meta/is_charptr.h"
65
66// --- modules -------------------------------------------------------------------------------------
67
68/** @addtogroup ModuleDefinition
69 * @name Module Declaration Macros
70 *
71 * These macros declare and define ModuleDefinition objects that represent Python modules.
72 * They create the fundamental module object that serves as the container for all exported
73 * functions, classes, and constants.
74 *
75 * @{
76 */
77
78/** @ingroup ModuleDefinition
79 * Declare and define a ModuleDefinition object representing a Python module.
80 *
81 * Creates a ModuleDefinition instance that can be used to build a Python module
82 * with the specified name and documentation.
83 *
84 * @param i_module Identifier of the module to be used in C++ (must be unscoped identifier for token concatenation)
85 * @param s_name Python module name (const char* string, will be copied and stored internally)
86 * @param s_doc Optional module documentation string (const char* string, will be copied and stored internally, or nullptr)
87 */
88#define PY_DECLARE_MODULE_NAME_DOC( i_module, s_name, s_doc ) \
89 ::lass::python::ModuleDefinition i_module( s_name, s_doc );
90
91/** @ingroup ModuleDefinition
92 * Declare a module with name only (no documentation).
93 * Convenience macro that wraps PY_DECLARE_MODULE_NAME_DOC() with s_doc = nullptr.
94 *
95 * @param i_module Identifier of the module to be used as C++ variable name (must be valid C++ identifier)
96 * @param s_name Python module name (const char* string, will be copied and stored internally)
97 */
98#define PY_DECLARE_MODULE_NAME( i_module, s_name ) \
99 PY_DECLARE_MODULE_NAME_DOC( i_module, s_name, 0)
100
101/** @ingroup ModuleDefinition
102 * Declare a module with documentation, using the identifier as the module name.
103 * Convenience macro that wraps PY_DECLARE_MODULE_NAME_DOC() with s_name derived from i_module.
104 *
105 * @param i_module Identifier of the module (also used as Python module name)
106 * @param s_doc Module documentation string (const char* string, will be copied and stored internally)
107 */
108#define PY_DECLARE_MODULE_DOC( i_module, s_doc ) \
109 PY_DECLARE_MODULE_NAME_DOC( i_module, LASS_STRINGIFY(i_module), s_doc)
110
111/** @ingroup ModuleDefinition
112 * Declare a module with minimal setup (name derived from identifier, no documentation).
113 * Convenience macro that wraps PY_DECLARE_MODULE_NAME_DOC() with defaults.
114 *
115 * @param i_module Identifier of the module (also used as Python module name)
116 */
117#define PY_DECLARE_MODULE( i_module ) \
118 PY_DECLARE_MODULE_NAME_DOC( i_module, LASS_STRINGIFY(i_module), 0)
119
120/** @} */
121
122/** @addtogroup ModuleDefinition
123 * @name Module Entrypoint and Injection Macros
124 *
125 * These macros handle module initialization, injection, and extension module creation.
126 * They manage the Python module lifecycle from creation to registration with the Python interpreter.
127 *
128 * If you're building a Python extension module (a .pyd or .so file), you will typically use
129 * the entrypoint macros to create the required `PyInit_*` function that Python calls:
130 * ```cpp
131 * // Declare module
132 * PY_DECLARE_MODULE_NAME_DOC(mymodule, "mymodule", "My example module")
133 *
134 * // Add functions and classes
135 * // ...
136 *
137 * // Create module entrypoint for Python extension
138 * PY_MODULE_ENTRYPOINT(mymodule)
139 * ```
140 *
141 * The injection macros are more low-level and can be used to create modules at runtime to be
142 * registered with an embedded Python interpreter.
143 *
144 * @{
145 */
146
147/** @ingroup ModuleDefinition
148 * Create a `PyInit_*` Python module initialization function with custom name.
149 *
150 * Generates the `PyInit_*` function required for Python extension modules.
151 * This function will be called by Python when the module is imported.
152 *
153 * ```cpp
154 * PY_DECLARE_MODULE_NAME_DOC(mymodule, "mymodule", "My example module")
155 * // ...
156 * PY_MODULE_ENTRYPOINT(mymodule)
157 * ```
158 *
159 * @param i_module Module identifier declared with PY_DECLARE_MODULE_*
160 * @param i_name Name for the initialization function (PyInit_<i_name> will be generated)
161 */
162#define PY_MODULE_ENTRYPOINT_NAME( i_module, i_name ) \
163 PyMODINIT_FUNC LASS_CONCATENATE(PyInit_, i_name)() { return i_module.inject(); }
164
165/** @ingroup ModuleDefinition
166 * Create a Python module initialization function using the module identifier as the function name.
167 * Convenience macro that wraps PY_MODULE_ENTRYPOINT_NAME() with i_name = i_module.
168 *
169 * @param i_module Module identifier (used for both module reference and function name)
170 */
171#define PY_MODULE_ENTRYPOINT( i_module ) PY_MODULE_ENTRYPOINT_NAME( i_module, i_module )
172
173/** @ingroup ModuleDefinition
174 * Inject a Python module so Python becomes aware of it.
175 *
176 * Creates the actual Python module object with all accumulated definitions
177 * (functions, classes, enums, constants). This should be done at runtime,
178 * typically in your main() function or during Python initialization.
179 *
180 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*
181 */
182#define PY_INJECT_MODULE( i_module )\
183 i_module.inject();
184
185/** @ingroup ModuleDefinition
186 * @deprecated Use PY_DECLARE_MODULE_NAME_DOC and PY_INJECT_MODULE instead
187 * Inject a module with name and documentation override.
188 */
189#define PY_INJECT_MODULE_EX( i_module, s_moduleName, s_doc ) \
190 i_module.setName(s_moduleName); \
191 i_module.setDoc(s_doc); \
192 i_module.inject();
193
194/** @ingroup ModuleDefinition
195 * @deprecated Use PY_DECLARE_MODULE_NAME and PY_INJECT_MODULE instead
196 * Inject a module with name override.
197 */
198#define PY_INJECT_MODULE_NAME( i_module, s_moduleName )\
199 i_module.setName(s_moduleName); \
200 i_module.inject();
201
202/** @ingroup ModuleDefinition
203 * @deprecated Use PY_DECLARE_MODULE_DOC and PY_INJECT_MODULE instead
204 * Inject a module with documentation override.
205 */
206#define PY_INJECT_MODULE_DOC( i_module, s_doc )\
207 i_module.setDoc(s_doc);\
208 i_module.inject();
209
210
211
212/** @ingroup Python
213 * Inject a python module so Python is aware of it and produce all necessary code so a
214 * module can be used as extension of Python. A limitation in comparison with embedded
215 * modules is that the name of the module cannot be changed anymore upon injection.
216 *
217 * @param i_module
218 * the identifier of a module declared by PY_DECLARE_MODULE
219 * @param f_injection
220 * the function that will inject all the classes for this module
221 * @param s_doc
222 * documentation of module as shown in Python (zero terminated C string)
223 */
224#define PY_EXTENSION_MODULE_EX( i_module, f_injection, s_doc ) \
225 extern "C" __declspec(dllexport)\
226 void LASS_CONCATENATE(init, i_module) () {\
227 PY_INJECT_MODULE_EX(i_module, const_cast<char*>( LASS_STRINGIFY(i_module) ), s_doc);\
228 f_injection ();\
229 }
230
231/** @ingroup ModuleDefinition
232 * Create an extension module with documentation.
233 * Convenience macro that wraps PY_EXTENSION_MODULE_EX() with s_doc parameter.
234 *
235 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
236 * @param f_injection Injection function to call during module creation
237 * @param s_doc Module documentation string (const char* string with static storage duration)
238 */
239#define PY_EXTENSION_MODULE_DOC( i_module, f_injection, s_doc )\
240 PY_EXTENSION_MODULE_EX( i_module, f_injection, s_doc)
241
242/** @ingroup ModuleDefinition
243 * Create an extension module (no documentation).
244 * Convenience macro that wraps PY_EXTENSION_MODULE_EX() with s_doc = nullptr.
245 *
246 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
247 * @param f_injection Injection function to call during module creation
248 */
249#define PY_EXTENSION_MODULE( i_module, f_injection )\
250 PY_EXTENSION_MODULE_EX( i_module, f_injection, 0)
251
252/** @} */
253
254// --- module variables ----------------------------------------------------------------------------
255
256/** @addtogroup ModuleDefinition
257 * @name Module Constants and Objects Macros
258 *
259 * These macros add constants, variables, and arbitrary Python objects to modules.
260 * They provide different approaches for exposing C++ values and objects to Python.
261 *
262 * @{
263 */
264
265/** @ingroup ModuleDefinition
266 * Add an integer constant to a Python module.
267 *
268 * The constant will be added to the module during module creation (at injection time).
269 * This is executed before main(), so the constant is available when the module is created.
270 *
271 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*
272 * @param s_name Name of constant as shown in the module (const char* string with static storage duration)
273 * @param s_value Integer value of the constant (long)
274 */
275#define PY_MODULE_INTEGER_CONSTANT( i_module, s_name, s_value )\
276 LASS_EXECUTE_BEFORE_MAIN_EX\
277 ( LASS_CONCATENATE( lassExecutePyModuleIntegerConstant_, i_module),\
278 i_module.addLong( s_value, s_name); )
279
280
281
282/** @ingroup ModuleDefinition
283 * Add a string constant to a Python module.
284 *
285 * The constant will be added to the module during module creation (at injection time).
286 * This is executed before main(), so the constant is available when the module is created.
287 *
288 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*
289 * @param s_name Name of constant as shown in the module (const char* string with static storage duration)
290 * @param s_value String value of the constant (const char* string with static storage duration)
291 */
292#define PY_MODULE_STRING_CONSTANT( i_module, s_name, s_value )\
293 LASS_EXECUTE_BEFORE_MAIN_EX\
294 ( LASS_CONCATENATE( lassExecutePyModuleIntegerConstant_, i_module),\
295 i_module.addString( s_value, s_name); )
296
297
298
299/** @ingroup ModuleDefinition
300 * Inject an arbitrary object into an already created module at runtime.
301 *
302 * This performs immediate injection into the module namespace, unlike the
303 * PY_MODULE_*_CONSTANT macros which defer injection until module creation.
304 * Must be called after the module has been injected with PY_INJECT_MODULE.
305 *
306 * @param o_object Object/variable to be injected (will be converted to Python object)
307 * @param i_module Module identifier of an already injected module
308 * @param s_objectName Name of object as shown in the module (const char* string with static storage duration)
309 */
310#define PY_INJECT_OBJECT_IN_MODULE_EX( o_object, i_module, s_objectName )\
311 {\
312 i_module.injectObject( o_object, s_objectName );\
313 }
314
315/** @ingroup ModuleDefinition
316 * Inject an object using its C++ identifier as the Python name.
317 * Convenience macro that wraps PY_INJECT_OBJECT_IN_MODULE_EX() with s_objectName derived from o_object.
318 *
319 * @param o_object Object/variable to be injected (name will be used as Python name)
320 * @param i_module Module identifier of an already injected module
321 */
322#define PY_INJECT_OBJECT_IN_MODULE( o_object, i_module )\
323 PY_INJECT_OBJECT_IN_MODULE_EX(o_object, i_module, LASS_STRINGIFY(o_object))
324
325
326
327/** @ingroup ModuleDefinition
328 * @deprecated Use PY_MODULE_INTEGER_CONSTANT instead for compile-time registration
329 * Inject an integer constant into an already created module at runtime.
330 *
331 * This performs immediate injection, unlike PY_MODULE_INTEGER_CONSTANT which
332 * registers the constant for inclusion during module creation.
333 *
334 * @param i_module Module identifier of an already injected module
335 * @param s_name Name of constant as shown in the module (const char* string with static storage duration)
336 * @param v_value Integer value of the constant (long)
337 */
338#define PY_MODULE_ADD_INTEGER_CONSTANT( i_module, s_name, v_value )\
339 {\
340 i_module.injectLong(s_name, v_value);\
341 }
342
343
344
345/** @ingroup ModuleDefinition
346 * @deprecated Use PY_MODULE_STRING_CONSTANT instead for compile-time registration
347 * Inject a string constant into an already created module at runtime.
348 *
349 * This performs immediate injection, unlike PY_MODULE_STRING_CONSTANT which
350 * registers the constant for inclusion during module creation.
351 *
352 * @param i_module Module identifier of an already injected module
353 * @param s_name Name of constant as shown in the module (const char* string with static storage duration)
354 * @param s_value String value of the constant (const char* string with static storage duration)
355 */
356#define PY_MODULE_ADD_STRING_CONSTANT( i_module, s_name, s_value )\
357 {\
358 i_module.injectString(s_name, s_value);\
359 }
360
361/** @} */
362
363// --- free module functions -----------------------------------------------------------------------
364
365/** @addtogroup ModuleDefinition
366 * @name Basic Function Export Macros
367 *
368 * These macros export C++ functions to Python with automatic type deduction and wrapper generation.
369 * Use these for simple function exports where overloading is not an issue and automatic type
370 * deduction is sufficient.
371 *
372 * @{
373 */
374
375/** @ingroup ModuleDefinition
376 * Export a C++ function to Python without automatic wrapper generation.
377 *
378 * Use this macro for backward compatibility when wrapper functions don't
379 * need to be automatically generated or you want specific Python behavior.
380 *
381 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*
382 * @param f_cppFunction C++ function to export (must already be a PyCFunction)
383 * @param s_functionName Python function name
384 * @param s_doc Function documentation string
385 *
386 * @deprecated Use PY_MODULE_FUNCTION_EX instead for automatic wrapper generation
387 */
388#define PY_MODULE_PY_FUNCTION_EX( i_module, f_cppFunction, s_functionName, s_doc )\
389 static PyCFunction LASS_CONCATENATE( pyOverloadChain_, i_dispatcher ) = 0;\
390 LASS_EXECUTE_BEFORE_MAIN_EX\
391 ( LASS_CONCATENATE_3( lassExecutePyModulePyFunction_, i_module, f_cppFunction ),\
392 i_module.addFunctionDispatcher( \
393 f_cppFunction, s_functionName, s_doc, \
394 LASS_CONCATENATE( pyOverloadChain_, i_dispatcher ) \
395 );\
396 )
397
398
399
400/** @ingroup ModuleDefinition
401 * Export a C++ free function to Python with full control over overloading.
402 *
403 * This is the most flexible function export macro, allowing manual dispatcher naming
404 * for creating overloaded Python functions. Multiple C++ functions can be exported
405 * with the same Python name to create overloaded functions.
406 *
407 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*
408 * @param f_cppFunction C++ function to export
409 * @param s_functionName Python function name (const char* string with static storage duration)
410 * @param s_doc Function documentation string (const char* string with static storage duration, or nullptr)
411 * @param i_dispatcher Unique name for the generated dispatcher function (must be unscoped identifier for token concatenation)
412 *
413 * Use this macro to export functions to Python. You can create overloaded Python functions
414 * by exporting multiple C++ functions with the same s_functionName.
415 *
416 * @note Overload resolution uses first-fit, not best-fit like C++. The first exported
417 * overload that matches the arguments will be called.
418 *
419 * @note The documentation of an overloaded Python function will be the s_doc of the
420 * first exported overload.
421 *
422 * @par Example:
423 * @code
424 * void barA(int a);
425 * void barB(const std::string& b);
426 *
427 * PY_MODULE_FUNCTION_EX(foo_module, barA, "bar", nullptr, foo_bar_a)
428 * PY_MODULE_FUNCTION_EX(foo_module, barB, "bar", nullptr, foo_bar_b)
429 * @endcode
430 */
431#define PY_MODULE_FUNCTION_EX( i_module, f_cppFunction, s_functionName, s_doc, i_dispatcher )\
432 static PyCFunction LASS_CONCATENATE( pyOverloadChain_, i_dispatcher ) = 0;\
433 extern "C" LASS_DLL_LOCAL PyObject* i_dispatcher( PyObject* iIgnore, PyObject* iArgs )\
434 {\
435 if (LASS_CONCATENATE( pyOverloadChain_, i_dispatcher ))\
436 {\
437 PyObject* result = LASS_CONCATENATE( pyOverloadChain_, i_dispatcher )(iIgnore, iArgs);\
438 if (!(PyErr_Occurred() && PyErr_ExceptionMatches(PyExc_TypeError)))\
439 {\
440 return result;\
441 }\
442 PyErr_Clear();\
443 Py_XDECREF(result);\
444 }\
445 return ::lass::python::impl::callFunction( iArgs, &f_cppFunction );\
446 }\
447 LASS_EXECUTE_BEFORE_MAIN_EX\
448 ( LASS_CONCATENATE_3( lassExecutePyModuleFunction_, i_module, i_dispatcher ), \
449 i_module.addFunctionDispatcher( \
450 i_dispatcher, s_functionName, s_doc, \
451 LASS_CONCATENATE( pyOverloadChain_, i_dispatcher ) \
452 );\
453 )
454
455/** @ingroup ModuleDefinition
456 * Export a C++ free function to Python with custom name and documentation.
457 * Convenience macro that wraps PY_MODULE_FUNCTION_EX() with auto-generated dispatcher name.
458 *
459 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*
460 * @param f_cppFunction C++ function to export
461 * @param s_name Python function name (const char* string with static storage duration)
462 * @param s_doc Function documentation string (const char* string with static storage duration, or nullptr)
463 */
464#define PY_MODULE_FUNCTION_NAME_DOC( i_module, f_cppFunction, s_name, s_doc )\
465 PY_MODULE_FUNCTION_EX( i_module, f_cppFunction, s_name, s_doc,\
466 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_function_, i_module)))
467
468/** @ingroup ModuleDefinition
469 * Export a C++ free function to Python with custom name (no documentation).
470 * Convenience macro that wraps PY_MODULE_FUNCTION_NAME_DOC() with s_doc = nullptr.
471 *
472 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*
473 * @param f_cppFunction C++ function to export
474 * @param s_name Python function name (const char* string with static storage duration)
475 */
476#define PY_MODULE_FUNCTION_NAME( i_module, f_cppFunction, s_name)\
477 PY_MODULE_FUNCTION_NAME_DOC( i_module, f_cppFunction, s_name, 0)
478
479/** @ingroup ModuleDefinition
480 * Export a C++ free function to Python using the C++ function name with documentation.
481 * Convenience macro that wraps PY_MODULE_FUNCTION_NAME_DOC() with s_name derived from f_cppFunction.
482 *
483 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*
484 * @param f_cppFunction C++ function to export (name will be used as Python name)
485 * @param s_doc Function documentation string (const char* string with static storage duration)
486 */
487#define PY_MODULE_FUNCTION_DOC( i_module, f_cppFunction, s_doc )\
488 PY_MODULE_FUNCTION_NAME_DOC( i_module, f_cppFunction, LASS_STRINGIFY(f_cppFunction), s_doc)
489
490/** @ingroup ModuleDefinition
491 * Export a C++ free function to Python using the C++ function name (no documentation).
492 * Convenience macro that wraps PY_MODULE_FUNCTION_NAME_DOC() with defaults.
493 *
494 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*
495 * @param f_cppFunction C++ function to export (name will be used as Python name)
496 */
497#define PY_MODULE_FUNCTION( i_module, f_cppFunction)\
498 PY_MODULE_FUNCTION_NAME_DOC( i_module, f_cppFunction, LASS_STRINGIFY(f_cppFunction), 0)
499
500/** @} */
501
502// --- casting free functions -----------------------------------------------------------
503
504/** @addtogroup ModuleDefinition
505 * @name Function Cast Export Macros (Deprecated)
506 *
507 * @deprecated These macros are deprecated. Instead of using casting macros, define explicit
508 * wrapper functions with the desired signatures and export those directly using the basic
509 * function export macros.
510 *
511 * These macros export C++ functions to Python with explicit type casting and support for
512 * default parameters. They create wrapper functions that handle type conversions and
513 * allow exporting functions with default parameters by omitting trailing parameters.
514 *
515 * @{
516 */
517
518/** @ingroup ModuleDefinition
519 * Exports a C++ free functions to Python with on the fly casting on return type and parameters, including omission of default parameters
520 *
521 * @param i_module
522 * the module object
523 * @param f_cppFunction
524 * the name of the function in C++
525 * @param t_return
526 * the return type of @a f_cppFunction
527 * @param t_params
528 * a lass::meta::TypeTuple of the parameter types of @a f_cppFunction
529 * @param s_functionName
530 * the name the method will have in Python
531 * @param s_doc
532 * documentation of function as shown in Python (zero terminated C string)
533 * @param i_dispatcher
534 * A unique name of the static C++ dispatcher function to be generated. This name will be
535 * used for the names of automatic generated variables and functions and should be unique
536 *
537 * You can use this macro instead of PY_MODULE_FUNCTION_EX if you want to use for instance the default parameters of the C++ definition of
538 * @a f_cppFunction. This macro can also help you to resolve ambiguities althought the PY_MODULE_QUALIFIED_EX is the preferred macro for
539 * doing that.
540 *
541 * @code
542 * void bar(int a, int b=555);
543 *
544 * PY_MODULE_FUNCTION_CAST_NAME_1(foo_module, bar, void, int, "bar" ) // export the function with as default input for b=555
545 * PY_MODULE_FUNCTION_CAST_NAME_2(foo_module, bar, void, int, int, "bar" )
546 * @endcode
547 */
548
549
550/** @ingroup ModuleDefinition
551 * @deprecated Define an explicit wrapper function instead of using casting macros
552 * Export a C++ function with explicit return type casting for 0-parameter functions with full control.
553 * This macro allows exporting functions with default parameters or when explicit type casting is needed.
554 *
555 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
556 * @param f_cppFunction C++ function to export (0 parameters)
557 * @param t_return Return type of the function (for explicit casting)
558 * @param s_functionName Python function name (const char* string with static storage duration)
559 * @param s_doc Function documentation string (const char* string with static storage duration)
560 * @param i_dispatcher Unique identifier for the function dispatcher
561 */
562#define PY_MODULE_FUNCTION_CAST_EX_0(i_module, f_cppFunction, t_return, s_functionName, s_doc, i_dispatcher) \
563 ::lass::python::OwnerCaster<t_return>::TCaster::TTarget LASS_CONCATENATE(i_dispatcher, _caster) ()\
564 {\
565 return f_cppFunction() ; \
566 }\
567 PY_MODULE_FUNCTION_EX( i_module, LASS_CONCATENATE(i_dispatcher, _caster), s_functionName, s_doc, i_dispatcher );
568
569
570
571/** @ingroup ModuleDefinition
572 * @deprecated Define an explicit wrapper function instead of using casting macros
573 * Export a C++ function with explicit type casting for 1-parameter functions with full control.
574 * This macro allows exporting functions with default parameters or when explicit type casting is needed.
575 *
576 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
577 * @param f_cppFunction C++ function to export (1 parameters)
578 * @param t_return Return type of the function (for explicit casting)
579 * @param t_P1 Parameter types for the function (for explicit casting)
580 * @param s_functionName Python function name (const char* string with static storage duration)
581 * @param s_doc Function documentation string (const char* string with static storage duration)
582 * @param i_dispatcher Unique identifier for the function dispatcher
583 */
584 #define PY_MODULE_FUNCTION_CAST_EX_1( i_module, f_cppFunction, t_return, t_P1, s_functionName, s_doc, i_dispatcher )\
585 ::lass::python::OwnerCaster< t_return >::TCaster::TTarget LASS_CONCATENATE(i_dispatcher, _caster) ( \
586 ::lass::python::OwnerCaster< t_P1 >::TCaster::TTarget iArg1 \
587 )\
588 {\
589 return f_cppFunction ( ::lass::python::OwnerCaster< t_P1 >::TCaster::cast(iArg1) );\
590 }\
591 PY_MODULE_FUNCTION_EX( i_module, LASS_CONCATENATE(i_dispatcher, _caster), s_functionName, s_doc, i_dispatcher );
592
593/** @ingroup ModuleDefinition
594 * @deprecated Define an explicit wrapper function instead of using casting macros
595 * Export a C++ function with explicit type casting for 2-parameter functions with full control.
596 * This macro allows exporting functions with default parameters or when explicit type casting is needed.
597 *
598 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
599 * @param f_cppFunction C++ function to export (2 parameters)
600 * @param t_return Return type of the function (for explicit casting)
601 * @param t_P1, t_P2 Parameter types for the function (for explicit casting)
602 * @param s_functionName Python function name (const char* string with static storage duration)
603 * @param s_doc Function documentation string (const char* string with static storage duration)
604 * @param i_dispatcher Unique identifier for the function dispatcher
605 */
606 #define PY_MODULE_FUNCTION_CAST_EX_2( i_module, f_cppFunction, t_return, t_P1, t_P2, s_functionName, s_doc, i_dispatcher )\
607 ::lass::python::OwnerCaster< t_return >::TCaster::TTarget LASS_CONCATENATE(i_dispatcher, _caster) ( \
608 ::lass::python::OwnerCaster< t_P1 >::TCaster::TTarget iArg1, ::lass::python::OwnerCaster< t_P2 >::TCaster::TTarget iArg2 \
609 )\
610 {\
611 return f_cppFunction ( ::lass::python::OwnerCaster< t_P1 >::TCaster::cast(iArg1), ::lass::python::OwnerCaster< t_P2 >::TCaster::cast(iArg2) );\
612 }\
613 PY_MODULE_FUNCTION_EX( i_module, LASS_CONCATENATE(i_dispatcher, _caster), s_functionName, s_doc, i_dispatcher );
614
615/** @ingroup ModuleDefinition
616 * @deprecated Define an explicit wrapper function instead of using casting macros
617 * Export a C++ function with explicit type casting for 3-parameter functions with full control.
618 * This macro allows exporting functions with default parameters or when explicit type casting is needed.
619 *
620 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
621 * @param f_cppFunction C++ function to export (3 parameters)
622 * @param t_return Return type of the function (for explicit casting)
623 * @param t_P1, t_P2, t_P3 Parameter types for the function (for explicit casting)
624 * @param s_functionName Python function name (const char* string with static storage duration)
625 * @param s_doc Function documentation string (const char* string with static storage duration)
626 * @param i_dispatcher Unique identifier for the function dispatcher
627 */
628 #define PY_MODULE_FUNCTION_CAST_EX_3( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, s_functionName, s_doc, i_dispatcher )\
629 ::lass::python::OwnerCaster< t_return >::TCaster::TTarget LASS_CONCATENATE(i_dispatcher, _caster) ( \
630 ::lass::python::OwnerCaster< t_P1 >::TCaster::TTarget iArg1, ::lass::python::OwnerCaster< t_P2 >::TCaster::TTarget iArg2, ::lass::python::OwnerCaster< t_P3 >::TCaster::TTarget iArg3 \
631 )\
632 {\
633 return f_cppFunction ( ::lass::python::OwnerCaster< t_P1 >::TCaster::cast(iArg1), ::lass::python::OwnerCaster< t_P2 >::TCaster::cast(iArg2), ::lass::python::OwnerCaster< t_P3 >::TCaster::cast(iArg3) );\
634 }\
635 PY_MODULE_FUNCTION_EX( i_module, LASS_CONCATENATE(i_dispatcher, _caster), s_functionName, s_doc, i_dispatcher );
636
637/** @ingroup ModuleDefinition
638 * @deprecated Define an explicit wrapper function instead of using casting macros
639 * Export a C++ function with explicit type casting for 4-parameter functions with full control.
640 * This macro allows exporting functions with default parameters or when explicit type casting is needed.
641 *
642 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
643 * @param f_cppFunction C++ function to export (4 parameters)
644 * @param t_return Return type of the function (for explicit casting)
645 * @param t_P1, t_P2, t_P3, t_P4 Parameter types for the function (for explicit casting)
646 * @param s_functionName Python function name (const char* string with static storage duration)
647 * @param s_doc Function documentation string (const char* string with static storage duration)
648 * @param i_dispatcher Unique identifier for the function dispatcher
649 */
650 #define PY_MODULE_FUNCTION_CAST_EX_4( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, s_functionName, s_doc, i_dispatcher )\
651 ::lass::python::OwnerCaster< t_return >::TCaster::TTarget LASS_CONCATENATE(i_dispatcher, _caster) ( \
652 ::lass::python::OwnerCaster< t_P1 >::TCaster::TTarget iArg1, ::lass::python::OwnerCaster< t_P2 >::TCaster::TTarget iArg2, ::lass::python::OwnerCaster< t_P3 >::TCaster::TTarget iArg3, ::lass::python::OwnerCaster< t_P4 >::TCaster::TTarget iArg4 \
653 )\
654 {\
655 return f_cppFunction ( ::lass::python::OwnerCaster< t_P1 >::TCaster::cast(iArg1), ::lass::python::OwnerCaster< t_P2 >::TCaster::cast(iArg2), ::lass::python::OwnerCaster< t_P3 >::TCaster::cast(iArg3), ::lass::python::OwnerCaster< t_P4 >::TCaster::cast(iArg4) );\
656 }\
657 PY_MODULE_FUNCTION_EX( i_module, LASS_CONCATENATE(i_dispatcher, _caster), s_functionName, s_doc, i_dispatcher );
658
659/** @ingroup ModuleDefinition
660 * @deprecated Define an explicit wrapper function instead of using casting macros
661 * Export a C++ function with explicit type casting for 5-parameter functions with full control.
662 * This macro allows exporting functions with default parameters or when explicit type casting is needed.
663 *
664 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
665 * @param f_cppFunction C++ function to export (5 parameters)
666 * @param t_return Return type of the function (for explicit casting)
667 * @param t_P1, t_P2, t_P3, t_P4, t_P5 Parameter types for the function (for explicit casting)
668 * @param s_functionName Python function name (const char* string with static storage duration)
669 * @param s_doc Function documentation string (const char* string with static storage duration)
670 * @param i_dispatcher Unique identifier for the function dispatcher
671 */
672 #define PY_MODULE_FUNCTION_CAST_EX_5( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, s_functionName, s_doc, i_dispatcher )\
673 ::lass::python::OwnerCaster< t_return >::TCaster::TTarget LASS_CONCATENATE(i_dispatcher, _caster) ( \
674 ::lass::python::OwnerCaster< t_P1 >::TCaster::TTarget iArg1, ::lass::python::OwnerCaster< t_P2 >::TCaster::TTarget iArg2, ::lass::python::OwnerCaster< t_P3 >::TCaster::TTarget iArg3, ::lass::python::OwnerCaster< t_P4 >::TCaster::TTarget iArg4, ::lass::python::OwnerCaster< t_P5 >::TCaster::TTarget iArg5 \
675 )\
676 {\
677 return f_cppFunction ( ::lass::python::OwnerCaster< t_P1 >::TCaster::cast(iArg1), ::lass::python::OwnerCaster< t_P2 >::TCaster::cast(iArg2), ::lass::python::OwnerCaster< t_P3 >::TCaster::cast(iArg3), ::lass::python::OwnerCaster< t_P4 >::TCaster::cast(iArg4), ::lass::python::OwnerCaster< t_P5 >::TCaster::cast(iArg5) );\
678 }\
679 PY_MODULE_FUNCTION_EX( i_module, LASS_CONCATENATE(i_dispatcher, _caster), s_functionName, s_doc, i_dispatcher );
680
681/** @ingroup ModuleDefinition
682 * @deprecated Define an explicit wrapper function instead of using casting macros
683 * Export a C++ function with explicit type casting for 6-parameter functions with full control.
684 * This macro allows exporting functions with default parameters or when explicit type casting is needed.
685 *
686 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
687 * @param f_cppFunction C++ function to export (6 parameters)
688 * @param t_return Return type of the function (for explicit casting)
689 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6 Parameter types for the function (for explicit casting)
690 * @param s_functionName Python function name (const char* string with static storage duration)
691 * @param s_doc Function documentation string (const char* string with static storage duration)
692 * @param i_dispatcher Unique identifier for the function dispatcher
693 */
694 #define PY_MODULE_FUNCTION_CAST_EX_6( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, s_functionName, s_doc, i_dispatcher )\
695 ::lass::python::OwnerCaster< t_return >::TCaster::TTarget LASS_CONCATENATE(i_dispatcher, _caster) ( \
696 ::lass::python::OwnerCaster< t_P1 >::TCaster::TTarget iArg1, ::lass::python::OwnerCaster< t_P2 >::TCaster::TTarget iArg2, ::lass::python::OwnerCaster< t_P3 >::TCaster::TTarget iArg3, ::lass::python::OwnerCaster< t_P4 >::TCaster::TTarget iArg4, ::lass::python::OwnerCaster< t_P5 >::TCaster::TTarget iArg5, ::lass::python::OwnerCaster< t_P6 >::TCaster::TTarget iArg6 \
697 )\
698 {\
699 return f_cppFunction ( ::lass::python::OwnerCaster< t_P1 >::TCaster::cast(iArg1), ::lass::python::OwnerCaster< t_P2 >::TCaster::cast(iArg2), ::lass::python::OwnerCaster< t_P3 >::TCaster::cast(iArg3), ::lass::python::OwnerCaster< t_P4 >::TCaster::cast(iArg4), ::lass::python::OwnerCaster< t_P5 >::TCaster::cast(iArg5), ::lass::python::OwnerCaster< t_P6 >::TCaster::cast(iArg6) );\
700 }\
701 PY_MODULE_FUNCTION_EX( i_module, LASS_CONCATENATE(i_dispatcher, _caster), s_functionName, s_doc, i_dispatcher );
702
703/** @ingroup ModuleDefinition
704 * @deprecated Define an explicit wrapper function instead of using casting macros
705 * Export a C++ function with explicit type casting for 7-parameter functions with full control.
706 * This macro allows exporting functions with default parameters or when explicit type casting is needed.
707 *
708 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
709 * @param f_cppFunction C++ function to export (7 parameters)
710 * @param t_return Return type of the function (for explicit casting)
711 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7 Parameter types for the function (for explicit casting)
712 * @param s_functionName Python function name (const char* string with static storage duration)
713 * @param s_doc Function documentation string (const char* string with static storage duration)
714 * @param i_dispatcher Unique identifier for the function dispatcher
715 */
716 #define PY_MODULE_FUNCTION_CAST_EX_7( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, s_functionName, s_doc, i_dispatcher )\
717 ::lass::python::OwnerCaster< t_return >::TCaster::TTarget LASS_CONCATENATE(i_dispatcher, _caster) ( \
718 ::lass::python::OwnerCaster< t_P1 >::TCaster::TTarget iArg1, ::lass::python::OwnerCaster< t_P2 >::TCaster::TTarget iArg2, ::lass::python::OwnerCaster< t_P3 >::TCaster::TTarget iArg3, ::lass::python::OwnerCaster< t_P4 >::TCaster::TTarget iArg4, ::lass::python::OwnerCaster< t_P5 >::TCaster::TTarget iArg5, ::lass::python::OwnerCaster< t_P6 >::TCaster::TTarget iArg6, ::lass::python::OwnerCaster< t_P7 >::TCaster::TTarget iArg7 \
719 )\
720 {\
721 return f_cppFunction ( ::lass::python::OwnerCaster< t_P1 >::TCaster::cast(iArg1), ::lass::python::OwnerCaster< t_P2 >::TCaster::cast(iArg2), ::lass::python::OwnerCaster< t_P3 >::TCaster::cast(iArg3), ::lass::python::OwnerCaster< t_P4 >::TCaster::cast(iArg4), ::lass::python::OwnerCaster< t_P5 >::TCaster::cast(iArg5), ::lass::python::OwnerCaster< t_P6 >::TCaster::cast(iArg6), ::lass::python::OwnerCaster< t_P7 >::TCaster::cast(iArg7) );\
722 }\
723 PY_MODULE_FUNCTION_EX( i_module, LASS_CONCATENATE(i_dispatcher, _caster), s_functionName, s_doc, i_dispatcher );
724
725/** @ingroup ModuleDefinition
726 * @deprecated Define an explicit wrapper function instead of using casting macros
727 * Export a C++ function with explicit type casting for 8-parameter functions with full control.
728 * This macro allows exporting functions with default parameters or when explicit type casting is needed.
729 *
730 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
731 * @param f_cppFunction C++ function to export (8 parameters)
732 * @param t_return Return type of the function (for explicit casting)
733 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8 Parameter types for the function (for explicit casting)
734 * @param s_functionName Python function name (const char* string with static storage duration)
735 * @param s_doc Function documentation string (const char* string with static storage duration)
736 * @param i_dispatcher Unique identifier for the function dispatcher
737 */
738 #define PY_MODULE_FUNCTION_CAST_EX_8( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, s_functionName, s_doc, i_dispatcher )\
739 ::lass::python::OwnerCaster< t_return >::TCaster::TTarget LASS_CONCATENATE(i_dispatcher, _caster) ( \
740 ::lass::python::OwnerCaster< t_P1 >::TCaster::TTarget iArg1, ::lass::python::OwnerCaster< t_P2 >::TCaster::TTarget iArg2, ::lass::python::OwnerCaster< t_P3 >::TCaster::TTarget iArg3, ::lass::python::OwnerCaster< t_P4 >::TCaster::TTarget iArg4, ::lass::python::OwnerCaster< t_P5 >::TCaster::TTarget iArg5, ::lass::python::OwnerCaster< t_P6 >::TCaster::TTarget iArg6, ::lass::python::OwnerCaster< t_P7 >::TCaster::TTarget iArg7, ::lass::python::OwnerCaster< t_P8 >::TCaster::TTarget iArg8 \
741 )\
742 {\
743 return f_cppFunction ( ::lass::python::OwnerCaster< t_P1 >::TCaster::cast(iArg1), ::lass::python::OwnerCaster< t_P2 >::TCaster::cast(iArg2), ::lass::python::OwnerCaster< t_P3 >::TCaster::cast(iArg3), ::lass::python::OwnerCaster< t_P4 >::TCaster::cast(iArg4), ::lass::python::OwnerCaster< t_P5 >::TCaster::cast(iArg5), ::lass::python::OwnerCaster< t_P6 >::TCaster::cast(iArg6), ::lass::python::OwnerCaster< t_P7 >::TCaster::cast(iArg7), ::lass::python::OwnerCaster< t_P8 >::TCaster::cast(iArg8) );\
744 }\
745 PY_MODULE_FUNCTION_EX( i_module, LASS_CONCATENATE(i_dispatcher, _caster), s_functionName, s_doc, i_dispatcher );
746
747/** @ingroup ModuleDefinition
748 * @deprecated Define an explicit wrapper function instead of using casting macros
749 * Export a C++ function with explicit type casting for 9-parameter functions with full control.
750 * This macro allows exporting functions with default parameters or when explicit type casting is needed.
751 *
752 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
753 * @param f_cppFunction C++ function to export (9 parameters)
754 * @param t_return Return type of the function (for explicit casting)
755 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9 Parameter types for the function (for explicit casting)
756 * @param s_functionName Python function name (const char* string with static storage duration)
757 * @param s_doc Function documentation string (const char* string with static storage duration)
758 * @param i_dispatcher Unique identifier for the function dispatcher
759 */
760 #define PY_MODULE_FUNCTION_CAST_EX_9( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, s_functionName, s_doc, i_dispatcher )\
761 ::lass::python::OwnerCaster< t_return >::TCaster::TTarget LASS_CONCATENATE(i_dispatcher, _caster) ( \
762 ::lass::python::OwnerCaster< t_P1 >::TCaster::TTarget iArg1, ::lass::python::OwnerCaster< t_P2 >::TCaster::TTarget iArg2, ::lass::python::OwnerCaster< t_P3 >::TCaster::TTarget iArg3, ::lass::python::OwnerCaster< t_P4 >::TCaster::TTarget iArg4, ::lass::python::OwnerCaster< t_P5 >::TCaster::TTarget iArg5, ::lass::python::OwnerCaster< t_P6 >::TCaster::TTarget iArg6, ::lass::python::OwnerCaster< t_P7 >::TCaster::TTarget iArg7, ::lass::python::OwnerCaster< t_P8 >::TCaster::TTarget iArg8, ::lass::python::OwnerCaster< t_P9 >::TCaster::TTarget iArg9 \
763 )\
764 {\
765 return f_cppFunction ( ::lass::python::OwnerCaster< t_P1 >::TCaster::cast(iArg1), ::lass::python::OwnerCaster< t_P2 >::TCaster::cast(iArg2), ::lass::python::OwnerCaster< t_P3 >::TCaster::cast(iArg3), ::lass::python::OwnerCaster< t_P4 >::TCaster::cast(iArg4), ::lass::python::OwnerCaster< t_P5 >::TCaster::cast(iArg5), ::lass::python::OwnerCaster< t_P6 >::TCaster::cast(iArg6), ::lass::python::OwnerCaster< t_P7 >::TCaster::cast(iArg7), ::lass::python::OwnerCaster< t_P8 >::TCaster::cast(iArg8), ::lass::python::OwnerCaster< t_P9 >::TCaster::cast(iArg9) );\
766 }\
767 PY_MODULE_FUNCTION_EX( i_module, LASS_CONCATENATE(i_dispatcher, _caster), s_functionName, s_doc, i_dispatcher );
768
769/** @ingroup ModuleDefinition
770 * @deprecated Define an explicit wrapper function instead of using casting macros
771 * Export a C++ function with explicit type casting for 10-parameter functions with full control.
772 * This macro allows exporting functions with default parameters or when explicit type casting is needed.
773 *
774 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
775 * @param f_cppFunction C++ function to export (10 parameters)
776 * @param t_return Return type of the function (for explicit casting)
777 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10 Parameter types for the function (for explicit casting)
778 * @param s_functionName Python function name (const char* string with static storage duration)
779 * @param s_doc Function documentation string (const char* string with static storage duration)
780 * @param i_dispatcher Unique identifier for the function dispatcher
781 */
782 #define PY_MODULE_FUNCTION_CAST_EX_10( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, s_functionName, s_doc, i_dispatcher )\
783 ::lass::python::OwnerCaster< t_return >::TCaster::TTarget LASS_CONCATENATE(i_dispatcher, _caster) ( \
784 ::lass::python::OwnerCaster< t_P1 >::TCaster::TTarget iArg1, ::lass::python::OwnerCaster< t_P2 >::TCaster::TTarget iArg2, ::lass::python::OwnerCaster< t_P3 >::TCaster::TTarget iArg3, ::lass::python::OwnerCaster< t_P4 >::TCaster::TTarget iArg4, ::lass::python::OwnerCaster< t_P5 >::TCaster::TTarget iArg5, ::lass::python::OwnerCaster< t_P6 >::TCaster::TTarget iArg6, ::lass::python::OwnerCaster< t_P7 >::TCaster::TTarget iArg7, ::lass::python::OwnerCaster< t_P8 >::TCaster::TTarget iArg8, ::lass::python::OwnerCaster< t_P9 >::TCaster::TTarget iArg9, ::lass::python::OwnerCaster< t_P10 >::TCaster::TTarget iArg10 \
785 )\
786 {\
787 return f_cppFunction ( ::lass::python::OwnerCaster< t_P1 >::TCaster::cast(iArg1), ::lass::python::OwnerCaster< t_P2 >::TCaster::cast(iArg2), ::lass::python::OwnerCaster< t_P3 >::TCaster::cast(iArg3), ::lass::python::OwnerCaster< t_P4 >::TCaster::cast(iArg4), ::lass::python::OwnerCaster< t_P5 >::TCaster::cast(iArg5), ::lass::python::OwnerCaster< t_P6 >::TCaster::cast(iArg6), ::lass::python::OwnerCaster< t_P7 >::TCaster::cast(iArg7), ::lass::python::OwnerCaster< t_P8 >::TCaster::cast(iArg8), ::lass::python::OwnerCaster< t_P9 >::TCaster::cast(iArg9), ::lass::python::OwnerCaster< t_P10 >::TCaster::cast(iArg10) );\
788 }\
789 PY_MODULE_FUNCTION_EX( i_module, LASS_CONCATENATE(i_dispatcher, _caster), s_functionName, s_doc, i_dispatcher );
790
791/** @ingroup ModuleDefinition
792 * @deprecated Define an explicit wrapper function instead of using casting macros
793 * Export a C++ function with explicit type casting for 11-parameter functions with full control.
794 * This macro allows exporting functions with default parameters or when explicit type casting is needed.
795 *
796 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
797 * @param f_cppFunction C++ function to export (11 parameters)
798 * @param t_return Return type of the function (for explicit casting)
799 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11 Parameter types for the function (for explicit casting)
800 * @param s_functionName Python function name (const char* string with static storage duration)
801 * @param s_doc Function documentation string (const char* string with static storage duration)
802 * @param i_dispatcher Unique identifier for the function dispatcher
803 */
804 #define PY_MODULE_FUNCTION_CAST_EX_11( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, s_functionName, s_doc, i_dispatcher )\
805 ::lass::python::OwnerCaster< t_return >::TCaster::TTarget LASS_CONCATENATE(i_dispatcher, _caster) ( \
806 ::lass::python::OwnerCaster< t_P1 >::TCaster::TTarget iArg1, ::lass::python::OwnerCaster< t_P2 >::TCaster::TTarget iArg2, ::lass::python::OwnerCaster< t_P3 >::TCaster::TTarget iArg3, ::lass::python::OwnerCaster< t_P4 >::TCaster::TTarget iArg4, ::lass::python::OwnerCaster< t_P5 >::TCaster::TTarget iArg5, ::lass::python::OwnerCaster< t_P6 >::TCaster::TTarget iArg6, ::lass::python::OwnerCaster< t_P7 >::TCaster::TTarget iArg7, ::lass::python::OwnerCaster< t_P8 >::TCaster::TTarget iArg8, ::lass::python::OwnerCaster< t_P9 >::TCaster::TTarget iArg9, ::lass::python::OwnerCaster< t_P10 >::TCaster::TTarget iArg10, ::lass::python::OwnerCaster< t_P11 >::TCaster::TTarget iArg11 \
807 )\
808 {\
809 return f_cppFunction ( ::lass::python::OwnerCaster< t_P1 >::TCaster::cast(iArg1), ::lass::python::OwnerCaster< t_P2 >::TCaster::cast(iArg2), ::lass::python::OwnerCaster< t_P3 >::TCaster::cast(iArg3), ::lass::python::OwnerCaster< t_P4 >::TCaster::cast(iArg4), ::lass::python::OwnerCaster< t_P5 >::TCaster::cast(iArg5), ::lass::python::OwnerCaster< t_P6 >::TCaster::cast(iArg6), ::lass::python::OwnerCaster< t_P7 >::TCaster::cast(iArg7), ::lass::python::OwnerCaster< t_P8 >::TCaster::cast(iArg8), ::lass::python::OwnerCaster< t_P9 >::TCaster::cast(iArg9), ::lass::python::OwnerCaster< t_P10 >::TCaster::cast(iArg10), ::lass::python::OwnerCaster< t_P11 >::TCaster::cast(iArg11) );\
810 }\
811 PY_MODULE_FUNCTION_EX( i_module, LASS_CONCATENATE(i_dispatcher, _caster), s_functionName, s_doc, i_dispatcher );
812
813/** @ingroup ModuleDefinition
814 * @deprecated Define an explicit wrapper function instead of using casting macros
815 * Export a C++ function with explicit type casting for 12-parameter functions with full control.
816 * This macro allows exporting functions with default parameters or when explicit type casting is needed.
817 *
818 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
819 * @param f_cppFunction C++ function to export (12 parameters)
820 * @param t_return Return type of the function (for explicit casting)
821 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12 Parameter types for the function (for explicit casting)
822 * @param s_functionName Python function name (const char* string with static storage duration)
823 * @param s_doc Function documentation string (const char* string with static storage duration)
824 * @param i_dispatcher Unique identifier for the function dispatcher
825 */
826 #define PY_MODULE_FUNCTION_CAST_EX_12( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, s_functionName, s_doc, i_dispatcher )\
827 ::lass::python::OwnerCaster< t_return >::TCaster::TTarget LASS_CONCATENATE(i_dispatcher, _caster) ( \
828 ::lass::python::OwnerCaster< t_P1 >::TCaster::TTarget iArg1, ::lass::python::OwnerCaster< t_P2 >::TCaster::TTarget iArg2, ::lass::python::OwnerCaster< t_P3 >::TCaster::TTarget iArg3, ::lass::python::OwnerCaster< t_P4 >::TCaster::TTarget iArg4, ::lass::python::OwnerCaster< t_P5 >::TCaster::TTarget iArg5, ::lass::python::OwnerCaster< t_P6 >::TCaster::TTarget iArg6, ::lass::python::OwnerCaster< t_P7 >::TCaster::TTarget iArg7, ::lass::python::OwnerCaster< t_P8 >::TCaster::TTarget iArg8, ::lass::python::OwnerCaster< t_P9 >::TCaster::TTarget iArg9, ::lass::python::OwnerCaster< t_P10 >::TCaster::TTarget iArg10, ::lass::python::OwnerCaster< t_P11 >::TCaster::TTarget iArg11, ::lass::python::OwnerCaster< t_P12 >::TCaster::TTarget iArg12 \
829 )\
830 {\
831 return f_cppFunction ( ::lass::python::OwnerCaster< t_P1 >::TCaster::cast(iArg1), ::lass::python::OwnerCaster< t_P2 >::TCaster::cast(iArg2), ::lass::python::OwnerCaster< t_P3 >::TCaster::cast(iArg3), ::lass::python::OwnerCaster< t_P4 >::TCaster::cast(iArg4), ::lass::python::OwnerCaster< t_P5 >::TCaster::cast(iArg5), ::lass::python::OwnerCaster< t_P6 >::TCaster::cast(iArg6), ::lass::python::OwnerCaster< t_P7 >::TCaster::cast(iArg7), ::lass::python::OwnerCaster< t_P8 >::TCaster::cast(iArg8), ::lass::python::OwnerCaster< t_P9 >::TCaster::cast(iArg9), ::lass::python::OwnerCaster< t_P10 >::TCaster::cast(iArg10), ::lass::python::OwnerCaster< t_P11 >::TCaster::cast(iArg11), ::lass::python::OwnerCaster< t_P12 >::TCaster::cast(iArg12) );\
832 }\
833 PY_MODULE_FUNCTION_EX( i_module, LASS_CONCATENATE(i_dispatcher, _caster), s_functionName, s_doc, i_dispatcher );
834
835/** @ingroup ModuleDefinition
836 * @deprecated Define an explicit wrapper function instead of using casting macros
837 * Export a C++ function with explicit type casting for 13-parameter functions with full control.
838 * This macro allows exporting functions with default parameters or when explicit type casting is needed.
839 *
840 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
841 * @param f_cppFunction C++ function to export (13 parameters)
842 * @param t_return Return type of the function (for explicit casting)
843 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13 Parameter types for the function (for explicit casting)
844 * @param s_functionName Python function name (const char* string with static storage duration)
845 * @param s_doc Function documentation string (const char* string with static storage duration)
846 * @param i_dispatcher Unique identifier for the function dispatcher
847 */
848 #define PY_MODULE_FUNCTION_CAST_EX_13( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, s_functionName, s_doc, i_dispatcher )\
849 ::lass::python::OwnerCaster< t_return >::TCaster::TTarget LASS_CONCATENATE(i_dispatcher, _caster) ( \
850 ::lass::python::OwnerCaster< t_P1 >::TCaster::TTarget iArg1, ::lass::python::OwnerCaster< t_P2 >::TCaster::TTarget iArg2, ::lass::python::OwnerCaster< t_P3 >::TCaster::TTarget iArg3, ::lass::python::OwnerCaster< t_P4 >::TCaster::TTarget iArg4, ::lass::python::OwnerCaster< t_P5 >::TCaster::TTarget iArg5, ::lass::python::OwnerCaster< t_P6 >::TCaster::TTarget iArg6, ::lass::python::OwnerCaster< t_P7 >::TCaster::TTarget iArg7, ::lass::python::OwnerCaster< t_P8 >::TCaster::TTarget iArg8, ::lass::python::OwnerCaster< t_P9 >::TCaster::TTarget iArg9, ::lass::python::OwnerCaster< t_P10 >::TCaster::TTarget iArg10, ::lass::python::OwnerCaster< t_P11 >::TCaster::TTarget iArg11, ::lass::python::OwnerCaster< t_P12 >::TCaster::TTarget iArg12, ::lass::python::OwnerCaster< t_P13 >::TCaster::TTarget iArg13 \
851 )\
852 {\
853 return f_cppFunction ( ::lass::python::OwnerCaster< t_P1 >::TCaster::cast(iArg1), ::lass::python::OwnerCaster< t_P2 >::TCaster::cast(iArg2), ::lass::python::OwnerCaster< t_P3 >::TCaster::cast(iArg3), ::lass::python::OwnerCaster< t_P4 >::TCaster::cast(iArg4), ::lass::python::OwnerCaster< t_P5 >::TCaster::cast(iArg5), ::lass::python::OwnerCaster< t_P6 >::TCaster::cast(iArg6), ::lass::python::OwnerCaster< t_P7 >::TCaster::cast(iArg7), ::lass::python::OwnerCaster< t_P8 >::TCaster::cast(iArg8), ::lass::python::OwnerCaster< t_P9 >::TCaster::cast(iArg9), ::lass::python::OwnerCaster< t_P10 >::TCaster::cast(iArg10), ::lass::python::OwnerCaster< t_P11 >::TCaster::cast(iArg11), ::lass::python::OwnerCaster< t_P12 >::TCaster::cast(iArg12), ::lass::python::OwnerCaster< t_P13 >::TCaster::cast(iArg13) );\
854 }\
855 PY_MODULE_FUNCTION_EX( i_module, LASS_CONCATENATE(i_dispatcher, _caster), s_functionName, s_doc, i_dispatcher );
856
857/** @ingroup ModuleDefinition
858 * @deprecated Define an explicit wrapper function instead of using casting macros
859 * Export a C++ function with explicit type casting for 14-parameter functions with full control.
860 * This macro allows exporting functions with default parameters or when explicit type casting is needed.
861 *
862 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
863 * @param f_cppFunction C++ function to export (14 parameters)
864 * @param t_return Return type of the function (for explicit casting)
865 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14 Parameter types for the function (for explicit casting)
866 * @param s_functionName Python function name (const char* string with static storage duration)
867 * @param s_doc Function documentation string (const char* string with static storage duration)
868 * @param i_dispatcher Unique identifier for the function dispatcher
869 */
870 #define PY_MODULE_FUNCTION_CAST_EX_14( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, s_functionName, s_doc, i_dispatcher )\
871 ::lass::python::OwnerCaster< t_return >::TCaster::TTarget LASS_CONCATENATE(i_dispatcher, _caster) ( \
872 ::lass::python::OwnerCaster< t_P1 >::TCaster::TTarget iArg1, ::lass::python::OwnerCaster< t_P2 >::TCaster::TTarget iArg2, ::lass::python::OwnerCaster< t_P3 >::TCaster::TTarget iArg3, ::lass::python::OwnerCaster< t_P4 >::TCaster::TTarget iArg4, ::lass::python::OwnerCaster< t_P5 >::TCaster::TTarget iArg5, ::lass::python::OwnerCaster< t_P6 >::TCaster::TTarget iArg6, ::lass::python::OwnerCaster< t_P7 >::TCaster::TTarget iArg7, ::lass::python::OwnerCaster< t_P8 >::TCaster::TTarget iArg8, ::lass::python::OwnerCaster< t_P9 >::TCaster::TTarget iArg9, ::lass::python::OwnerCaster< t_P10 >::TCaster::TTarget iArg10, ::lass::python::OwnerCaster< t_P11 >::TCaster::TTarget iArg11, ::lass::python::OwnerCaster< t_P12 >::TCaster::TTarget iArg12, ::lass::python::OwnerCaster< t_P13 >::TCaster::TTarget iArg13, ::lass::python::OwnerCaster< t_P14 >::TCaster::TTarget iArg14 \
873 )\
874 {\
875 return f_cppFunction ( ::lass::python::OwnerCaster< t_P1 >::TCaster::cast(iArg1), ::lass::python::OwnerCaster< t_P2 >::TCaster::cast(iArg2), ::lass::python::OwnerCaster< t_P3 >::TCaster::cast(iArg3), ::lass::python::OwnerCaster< t_P4 >::TCaster::cast(iArg4), ::lass::python::OwnerCaster< t_P5 >::TCaster::cast(iArg5), ::lass::python::OwnerCaster< t_P6 >::TCaster::cast(iArg6), ::lass::python::OwnerCaster< t_P7 >::TCaster::cast(iArg7), ::lass::python::OwnerCaster< t_P8 >::TCaster::cast(iArg8), ::lass::python::OwnerCaster< t_P9 >::TCaster::cast(iArg9), ::lass::python::OwnerCaster< t_P10 >::TCaster::cast(iArg10), ::lass::python::OwnerCaster< t_P11 >::TCaster::cast(iArg11), ::lass::python::OwnerCaster< t_P12 >::TCaster::cast(iArg12), ::lass::python::OwnerCaster< t_P13 >::TCaster::cast(iArg13), ::lass::python::OwnerCaster< t_P14 >::TCaster::cast(iArg14) );\
876 }\
877 PY_MODULE_FUNCTION_EX( i_module, LASS_CONCATENATE(i_dispatcher, _caster), s_functionName, s_doc, i_dispatcher );
878
879/** @ingroup ModuleDefinition
880 * @deprecated Define an explicit wrapper function instead of using casting macros
881 * Export a C++ function with explicit type casting for 15-parameter functions with full control.
882 * This macro allows exporting functions with default parameters or when explicit type casting is needed.
883 *
884 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
885 * @param f_cppFunction C++ function to export (15 parameters)
886 * @param t_return Return type of the function (for explicit casting)
887 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15 Parameter types for the function (for explicit casting)
888 * @param s_functionName Python function name (const char* string with static storage duration)
889 * @param s_doc Function documentation string (const char* string with static storage duration)
890 * @param i_dispatcher Unique identifier for the function dispatcher
891 */
892 #define PY_MODULE_FUNCTION_CAST_EX_15( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15, s_functionName, s_doc, i_dispatcher )\
893 ::lass::python::OwnerCaster< t_return >::TCaster::TTarget LASS_CONCATENATE(i_dispatcher, _caster) ( \
894 ::lass::python::OwnerCaster< t_P1 >::TCaster::TTarget iArg1, ::lass::python::OwnerCaster< t_P2 >::TCaster::TTarget iArg2, ::lass::python::OwnerCaster< t_P3 >::TCaster::TTarget iArg3, ::lass::python::OwnerCaster< t_P4 >::TCaster::TTarget iArg4, ::lass::python::OwnerCaster< t_P5 >::TCaster::TTarget iArg5, ::lass::python::OwnerCaster< t_P6 >::TCaster::TTarget iArg6, ::lass::python::OwnerCaster< t_P7 >::TCaster::TTarget iArg7, ::lass::python::OwnerCaster< t_P8 >::TCaster::TTarget iArg8, ::lass::python::OwnerCaster< t_P9 >::TCaster::TTarget iArg9, ::lass::python::OwnerCaster< t_P10 >::TCaster::TTarget iArg10, ::lass::python::OwnerCaster< t_P11 >::TCaster::TTarget iArg11, ::lass::python::OwnerCaster< t_P12 >::TCaster::TTarget iArg12, ::lass::python::OwnerCaster< t_P13 >::TCaster::TTarget iArg13, ::lass::python::OwnerCaster< t_P14 >::TCaster::TTarget iArg14, ::lass::python::OwnerCaster< t_P15 >::TCaster::TTarget iArg15 \
895 )\
896 {\
897 return f_cppFunction ( ::lass::python::OwnerCaster< t_P1 >::TCaster::cast(iArg1), ::lass::python::OwnerCaster< t_P2 >::TCaster::cast(iArg2), ::lass::python::OwnerCaster< t_P3 >::TCaster::cast(iArg3), ::lass::python::OwnerCaster< t_P4 >::TCaster::cast(iArg4), ::lass::python::OwnerCaster< t_P5 >::TCaster::cast(iArg5), ::lass::python::OwnerCaster< t_P6 >::TCaster::cast(iArg6), ::lass::python::OwnerCaster< t_P7 >::TCaster::cast(iArg7), ::lass::python::OwnerCaster< t_P8 >::TCaster::cast(iArg8), ::lass::python::OwnerCaster< t_P9 >::TCaster::cast(iArg9), ::lass::python::OwnerCaster< t_P10 >::TCaster::cast(iArg10), ::lass::python::OwnerCaster< t_P11 >::TCaster::cast(iArg11), ::lass::python::OwnerCaster< t_P12 >::TCaster::cast(iArg12), ::lass::python::OwnerCaster< t_P13 >::TCaster::cast(iArg13), ::lass::python::OwnerCaster< t_P14 >::TCaster::cast(iArg14), ::lass::python::OwnerCaster< t_P15 >::TCaster::cast(iArg15) );\
898 }\
899 PY_MODULE_FUNCTION_EX( i_module, LASS_CONCATENATE(i_dispatcher, _caster), s_functionName, s_doc, i_dispatcher );
900
901
902/** @ingroup ModuleDefinition
903 * @deprecated Define an explicit wrapper function instead of using casting macros
904 * Export a C++ function with explicit type casting for 0-parameter functions with custom name and documentation.
905 * Convenience macro that wraps PY_MODULE_FUNCTION_CAST_EX_0() with automatically generated dispatcher name.
906 *
907 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
908 * @param f_cppFunction C++ function to export (0 parameters)
909 * @param t_return Return type of the function (for explicit casting)
910 * @param t_params Parameter types as lass::meta::TypeTuple (for explicit casting - should be empty TypeTuple<>)
911 * @param s_functionName Python function name (const char* string with static storage duration)
912 * @param s_doc Function documentation string (const char* string with static storage duration)
913 */
914#define PY_MODULE_FUNCTION_CAST_NAME_DOC_0( i_module, f_cppFunction, t_return, t_params, s_functionName, s_doc )\
915 PY_MODULE_FUNCTION_CAST_EX_0(\
916 i_module, f_cppFunction, t_return, s_functionName, s_doc,\
917 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_function_, i_module)))
918
919/** @ingroup ModuleDefinition
920 * @deprecated Define an explicit wrapper function instead of using casting macros
921 * Export a C++ function with explicit type casting for 1-parameter functions with custom name and documentation.
922 * Convenience macro that wraps PY_MODULE_FUNCTION_CAST_EX_1() with automatically generated dispatcher name.
923 *
924 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
925 * @param f_cppFunction C++ function to export (1 parameters)
926 * @param t_return Return type of the function (for explicit casting)
927 * @param t_P1 Parameter types for the function (for explicit casting)
928 * @param s_functionName Python function name (const char* string with static storage duration)
929 * @param s_doc Function documentation string (const char* string with static storage duration)
930 */
931#define PY_MODULE_FUNCTION_CAST_NAME_DOC_1( i_module, f_cppFunction, t_return, t_P1, s_functionName, s_doc )\
932 PY_MODULE_FUNCTION_CAST_EX_1(\
933 i_module, f_cppFunction, t_return, t_P1, s_functionName, s_doc,\
934 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_function_, i_module)))
935
936/** @ingroup ModuleDefinition
937 * @deprecated Define an explicit wrapper function instead of using casting macros
938 * Export a C++ function with explicit type casting for 2-parameter functions with custom name and documentation.
939 * Convenience macro that wraps PY_MODULE_FUNCTION_CAST_EX_2() with automatically generated dispatcher name.
940 *
941 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
942 * @param f_cppFunction C++ function to export (2 parameters)
943 * @param t_return Return type of the function (for explicit casting)
944 * @param t_P1, t_P2 Parameter types for the function (for explicit casting)
945 * @param s_functionName Python function name (const char* string with static storage duration)
946 * @param s_doc Function documentation string (const char* string with static storage duration)
947 */
948#define PY_MODULE_FUNCTION_CAST_NAME_DOC_2( i_module, f_cppFunction, t_return, t_P1, t_P2, s_functionName, s_doc )\
949 PY_MODULE_FUNCTION_CAST_EX_2(\
950 i_module, f_cppFunction, t_return, t_P1, t_P2, s_functionName, s_doc,\
951 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_function_, i_module)))
952
953/** @ingroup ModuleDefinition
954 * @deprecated Define an explicit wrapper function instead of using casting macros
955 * Export a C++ function with explicit type casting for 3-parameter functions with custom name and documentation.
956 * Convenience macro that wraps PY_MODULE_FUNCTION_CAST_EX_3() with automatically generated dispatcher name.
957 *
958 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
959 * @param f_cppFunction C++ function to export (3 parameters)
960 * @param t_return Return type of the function (for explicit casting)
961 * @param t_P1, t_P2, t_P3 Parameter types for the function (for explicit casting)
962 * @param s_functionName Python function name (const char* string with static storage duration)
963 * @param s_doc Function documentation string (const char* string with static storage duration)
964 */
965#define PY_MODULE_FUNCTION_CAST_NAME_DOC_3( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, s_functionName, s_doc )\
966 PY_MODULE_FUNCTION_CAST_EX_3(\
967 i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, s_functionName, s_doc,\
968 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_function_, i_module)))
969
970/** @ingroup ModuleDefinition
971 * @deprecated Define an explicit wrapper function instead of using casting macros
972 * Export a C++ function with explicit type casting for 4-parameter functions with custom name and documentation.
973 * Convenience macro that wraps PY_MODULE_FUNCTION_CAST_EX_4() with automatically generated dispatcher name.
974 *
975 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
976 * @param f_cppFunction C++ function to export (4 parameters)
977 * @param t_return Return type of the function (for explicit casting)
978 * @param t_P1, t_P2, t_P3, t_P4 Parameter types for the function (for explicit casting)
979 * @param s_functionName Python function name (const char* string with static storage duration)
980 * @param s_doc Function documentation string (const char* string with static storage duration)
981 */
982#define PY_MODULE_FUNCTION_CAST_NAME_DOC_4( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, s_functionName, s_doc )\
983 PY_MODULE_FUNCTION_CAST_EX_4(\
984 i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, s_functionName, s_doc,\
985 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_function_, i_module)))
986
987/** @ingroup ModuleDefinition
988 * @deprecated Define an explicit wrapper function instead of using casting macros
989 * Export a C++ function with explicit type casting for 5-parameter functions with custom name and documentation.
990 * Convenience macro that wraps PY_MODULE_FUNCTION_CAST_EX_5() with automatically generated dispatcher name.
991 *
992 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
993 * @param f_cppFunction C++ function to export (5 parameters)
994 * @param t_return Return type of the function (for explicit casting)
995 * @param t_P1, t_P2, t_P3, t_P4, t_P5 Parameter types for the function (for explicit casting)
996 * @param s_functionName Python function name (const char* string with static storage duration)
997 * @param s_doc Function documentation string (const char* string with static storage duration)
998 */
999#define PY_MODULE_FUNCTION_CAST_NAME_DOC_5( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, s_functionName, s_doc )\
1000 PY_MODULE_FUNCTION_CAST_EX_5(\
1001 i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, s_functionName, s_doc,\
1002 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_function_, i_module)))
1003
1004/** @ingroup ModuleDefinition
1005 * @deprecated Define an explicit wrapper function instead of using casting macros
1006 * Export a C++ function with explicit type casting for 6-parameter functions with custom name and documentation.
1007 * Convenience macro that wraps PY_MODULE_FUNCTION_CAST_EX_6() with automatically generated dispatcher name.
1008 *
1009 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
1010 * @param f_cppFunction C++ function to export (6 parameters)
1011 * @param t_return Return type of the function (for explicit casting)
1012 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6 Parameter types for the function (for explicit casting)
1013 * @param s_functionName Python function name (const char* string with static storage duration)
1014 * @param s_doc Function documentation string (const char* string with static storage duration)
1015 */
1016#define PY_MODULE_FUNCTION_CAST_NAME_DOC_6( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, s_functionName, s_doc )\
1017 PY_MODULE_FUNCTION_CAST_EX_6(\
1018 i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, s_functionName, s_doc,\
1019 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_function_, i_module)))
1020
1021/** @ingroup ModuleDefinition
1022 * @deprecated Define an explicit wrapper function instead of using casting macros
1023 * Export a C++ function with explicit type casting for 7-parameter functions with custom name and documentation.
1024 * Convenience macro that wraps PY_MODULE_FUNCTION_CAST_EX_7() with automatically generated dispatcher name.
1025 *
1026 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
1027 * @param f_cppFunction C++ function to export (7 parameters)
1028 * @param t_return Return type of the function (for explicit casting)
1029 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7 Parameter types for the function (for explicit casting)
1030 * @param s_functionName Python function name (const char* string with static storage duration)
1031 * @param s_doc Function documentation string (const char* string with static storage duration)
1032 */
1033#define PY_MODULE_FUNCTION_CAST_NAME_DOC_7( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, s_functionName, s_doc )\
1034 PY_MODULE_FUNCTION_CAST_EX_7(\
1035 i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, s_functionName, s_doc,\
1036 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_function_, i_module)))
1037
1038/** @ingroup ModuleDefinition
1039 * @deprecated Define an explicit wrapper function instead of using casting macros
1040 * Export a C++ function with explicit type casting for 8-parameter functions with custom name and documentation.
1041 * Convenience macro that wraps PY_MODULE_FUNCTION_CAST_EX_8() with automatically generated dispatcher name.
1042 *
1043 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
1044 * @param f_cppFunction C++ function to export (8 parameters)
1045 * @param t_return Return type of the function (for explicit casting)
1046 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8 Parameter types for the function (for explicit casting)
1047 * @param s_functionName Python function name (const char* string with static storage duration)
1048 * @param s_doc Function documentation string (const char* string with static storage duration)
1049 */
1050#define PY_MODULE_FUNCTION_CAST_NAME_DOC_8( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, s_functionName, s_doc )\
1051 PY_MODULE_FUNCTION_CAST_EX_8(\
1052 i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, s_functionName, s_doc,\
1053 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_function_, i_module)))
1054
1055/** @ingroup ModuleDefinition
1056 * @deprecated Define an explicit wrapper function instead of using casting macros
1057 * Export a C++ function with explicit type casting for 9-parameter functions with custom name and documentation.
1058 * Convenience macro that wraps PY_MODULE_FUNCTION_CAST_EX_9() with automatically generated dispatcher name.
1059 *
1060 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
1061 * @param f_cppFunction C++ function to export (9 parameters)
1062 * @param t_return Return type of the function (for explicit casting)
1063 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9 Parameter types for the function (for explicit casting)
1064 * @param s_functionName Python function name (const char* string with static storage duration)
1065 * @param s_doc Function documentation string (const char* string with static storage duration)
1066 */
1067#define PY_MODULE_FUNCTION_CAST_NAME_DOC_9( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, s_functionName, s_doc )\
1068 PY_MODULE_FUNCTION_CAST_EX_9(\
1069 i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, s_functionName, s_doc,\
1070 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_function_, i_module)))
1071
1072/** @ingroup ModuleDefinition
1073 * @deprecated Define an explicit wrapper function instead of using casting macros
1074 * Export a C++ function with explicit type casting for 10-parameter functions with custom name and documentation.
1075 * Convenience macro that wraps PY_MODULE_FUNCTION_CAST_EX_10() with automatically generated dispatcher name.
1076 *
1077 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
1078 * @param f_cppFunction C++ function to export (10 parameters)
1079 * @param t_return Return type of the function (for explicit casting)
1080 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10 Parameter types for the function (for explicit casting)
1081 * @param s_functionName Python function name (const char* string with static storage duration)
1082 * @param s_doc Function documentation string (const char* string with static storage duration)
1083 */
1084#define PY_MODULE_FUNCTION_CAST_NAME_DOC_10( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, s_functionName, s_doc )\
1085 PY_MODULE_FUNCTION_CAST_EX_10(\
1086 i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, s_functionName, s_doc,\
1087 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_function_, i_module)))
1088
1089/** @ingroup ModuleDefinition
1090 * @deprecated Define an explicit wrapper function instead of using casting macros
1091 * Export a C++ function with explicit type casting for 11-parameter functions with custom name and documentation.
1092 * Convenience macro that wraps PY_MODULE_FUNCTION_CAST_EX_11() with automatically generated dispatcher name.
1093 *
1094 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
1095 * @param f_cppFunction C++ function to export (11 parameters)
1096 * @param t_return Return type of the function (for explicit casting)
1097 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11 Parameter types for the function (for explicit casting)
1098 * @param s_functionName Python function name (const char* string with static storage duration)
1099 * @param s_doc Function documentation string (const char* string with static storage duration)
1100 */
1101#define PY_MODULE_FUNCTION_CAST_NAME_DOC_11( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, s_functionName, s_doc )\
1102 PY_MODULE_FUNCTION_CAST_EX_11(\
1103 i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, s_functionName, s_doc,\
1104 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_function_, i_module)))
1105
1106/** @ingroup ModuleDefinition
1107 * @deprecated Define an explicit wrapper function instead of using casting macros
1108 * Export a C++ function with explicit type casting for 12-parameter functions with custom name and documentation.
1109 * Convenience macro that wraps PY_MODULE_FUNCTION_CAST_EX_12() with automatically generated dispatcher name.
1110 *
1111 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
1112 * @param f_cppFunction C++ function to export (12 parameters)
1113 * @param t_return Return type of the function (for explicit casting)
1114 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12 Parameter types for the function (for explicit casting)
1115 * @param s_functionName Python function name (const char* string with static storage duration)
1116 * @param s_doc Function documentation string (const char* string with static storage duration)
1117 */
1118#define PY_MODULE_FUNCTION_CAST_NAME_DOC_12( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, s_functionName, s_doc )\
1119 PY_MODULE_FUNCTION_CAST_EX_12(\
1120 i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, s_functionName, s_doc,\
1121 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_function_, i_module)))
1122
1123/** @ingroup ModuleDefinition
1124 * @deprecated Define an explicit wrapper function instead of using casting macros
1125 * Export a C++ function with explicit type casting for 13-parameter functions with custom name and documentation.
1126 * Convenience macro that wraps PY_MODULE_FUNCTION_CAST_EX_13() with automatically generated dispatcher name.
1127 *
1128 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
1129 * @param f_cppFunction C++ function to export (13 parameters)
1130 * @param t_return Return type of the function (for explicit casting)
1131 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13 Parameter types for the function (for explicit casting)
1132 * @param s_functionName Python function name (const char* string with static storage duration)
1133 * @param s_doc Function documentation string (const char* string with static storage duration)
1134 */
1135#define PY_MODULE_FUNCTION_CAST_NAME_DOC_13( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, s_functionName, s_doc )\
1136 PY_MODULE_FUNCTION_CAST_EX_13(\
1137 i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, s_functionName, s_doc,\
1138 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_function_, i_module)))
1139
1140/** @ingroup ModuleDefinition
1141 * @deprecated Define an explicit wrapper function instead of using casting macros
1142 * Export a C++ function with explicit type casting for 14-parameter functions with custom name and documentation.
1143 * Convenience macro that wraps PY_MODULE_FUNCTION_CAST_EX_14() with automatically generated dispatcher name.
1144 *
1145 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
1146 * @param f_cppFunction C++ function to export (14 parameters)
1147 * @param t_return Return type of the function (for explicit casting)
1148 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14 Parameter types for the function (for explicit casting)
1149 * @param s_functionName Python function name (const char* string with static storage duration)
1150 * @param s_doc Function documentation string (const char* string with static storage duration)
1151 */
1152#define PY_MODULE_FUNCTION_CAST_NAME_DOC_14( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, s_functionName, s_doc )\
1153 PY_MODULE_FUNCTION_CAST_EX_14(\
1154 i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, s_functionName, s_doc,\
1155 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_function_, i_module)))
1156
1157/** @ingroup ModuleDefinition
1158 * @deprecated Define an explicit wrapper function instead of using casting macros
1159 * Export a C++ function with explicit type casting for 15-parameter functions with custom name and documentation.
1160 * Convenience macro that wraps PY_MODULE_FUNCTION_CAST_EX_15() with automatically generated dispatcher name.
1161 *
1162 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
1163 * @param f_cppFunction C++ function to export (15 parameters)
1164 * @param t_return Return type of the function (for explicit casting)
1165 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15 Parameter types for the function (for explicit casting)
1166 * @param s_functionName Python function name (const char* string with static storage duration)
1167 * @param s_doc Function documentation string (const char* string with static storage duration)
1168 */
1169#define PY_MODULE_FUNCTION_CAST_NAME_DOC_15( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15, s_functionName, s_doc )\
1170 PY_MODULE_FUNCTION_CAST_EX_15(\
1171 i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15, s_functionName, s_doc,\
1172 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_function_, i_module)))
1173
1174
1175
1176/** @ingroup ModuleDefinition
1177 * @deprecated Define an explicit wrapper function instead of using casting macros
1178 * Export a C++ function with explicit type casting for 0-parameter functions with custom name (no documentation).
1179 * Convenience macro that wraps PY_MODULE_FUNCTION_CAST_NAME_DOC_0() with s_doc = nullptr.
1180 *
1181 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
1182 * @param f_cppFunction C++ function to export (0 parameters)
1183 * @param t_return Return type of the function (for explicit casting)
1184 * @param s_functionName Python function name (const char* string with static storage duration)
1185 */
1186#define PY_MODULE_FUNCTION_CAST_NAME_0( i_module, f_cppFunction, t_return, s_functionName )\
1187 PY_MODULE_FUNCTION_CAST_NAME_DOC_0(\
1188 i_module, f_cppFunction, t_return, s_functionName, 0 )
1189
1190/** @ingroup ModuleDefinition
1191 * @deprecated Define an explicit wrapper function instead of using casting macros
1192 * Export a C++ function with explicit type casting for 1-parameter functions with custom name (no documentation).
1193 * Convenience macro that wraps PY_MODULE_FUNCTION_CAST_NAME_DOC_1() with s_doc = nullptr.
1194 *
1195 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
1196 * @param f_cppFunction C++ function to export (1 parameters)
1197 * @param t_return Return type of the function (for explicit casting)
1198 * @param t_P1 Parameter types for the function (for explicit casting)
1199 * @param s_functionName Python function name (const char* string with static storage duration)
1200 */
1201#define PY_MODULE_FUNCTION_CAST_NAME_1( i_module, f_cppFunction, t_return, t_P1, s_functionName )\
1202 PY_MODULE_FUNCTION_CAST_NAME_DOC_1(\
1203 i_module, f_cppFunction, t_return, t_P1, s_functionName, 0 )
1204
1205/** @ingroup ModuleDefinition
1206 * @deprecated Define an explicit wrapper function instead of using casting macros
1207 * Export a C++ function with explicit type casting for 2-parameter functions with custom name (no documentation).
1208 * Convenience macro that wraps PY_MODULE_FUNCTION_CAST_NAME_DOC_2() with s_doc = nullptr.
1209 *
1210 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
1211 * @param f_cppFunction C++ function to export (2 parameters)
1212 * @param t_return Return type of the function (for explicit casting)
1213 * @param t_P1, t_P2 Parameter types for the function (for explicit casting)
1214 * @param s_functionName Python function name (const char* string with static storage duration)
1215 */
1216#define PY_MODULE_FUNCTION_CAST_NAME_2( i_module, f_cppFunction, t_return, t_P1, t_P2, s_functionName )\
1217 PY_MODULE_FUNCTION_CAST_NAME_DOC_2(\
1218 i_module, f_cppFunction, t_return, t_P1, t_P2, s_functionName, 0 )
1219
1220/** @ingroup ModuleDefinition
1221 * @deprecated Define an explicit wrapper function instead of using casting macros
1222 * Export a C++ function with explicit type casting for 3-parameter functions with custom name (no documentation).
1223 * Convenience macro that wraps PY_MODULE_FUNCTION_CAST_NAME_DOC_3() with s_doc = nullptr.
1224 *
1225 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
1226 * @param f_cppFunction C++ function to export (3 parameters)
1227 * @param t_return Return type of the function (for explicit casting)
1228 * @param t_P1, t_P2, t_P3 Parameter types for the function (for explicit casting)
1229 * @param s_functionName Python function name (const char* string with static storage duration)
1230 */
1231#define PY_MODULE_FUNCTION_CAST_NAME_3( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, s_functionName )\
1232 PY_MODULE_FUNCTION_CAST_NAME_DOC_3(\
1233 i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, s_functionName, 0 )
1234
1235/** @ingroup ModuleDefinition
1236 * @deprecated Define an explicit wrapper function instead of using casting macros
1237 * Export a C++ function with explicit type casting for 4-parameter functions with custom name (no documentation).
1238 * Convenience macro that wraps PY_MODULE_FUNCTION_CAST_NAME_DOC_4() with s_doc = nullptr.
1239 *
1240 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
1241 * @param f_cppFunction C++ function to export (4 parameters)
1242 * @param t_return Return type of the function (for explicit casting)
1243 * @param t_P1, t_P2, t_P3, t_P4 Parameter types for the function (for explicit casting)
1244 * @param s_functionName Python function name (const char* string with static storage duration)
1245 */
1246#define PY_MODULE_FUNCTION_CAST_NAME_4( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, s_functionName )\
1247 PY_MODULE_FUNCTION_CAST_NAME_DOC_4(\
1248 i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, s_functionName, 0 )
1249
1250/** @ingroup ModuleDefinition
1251 * @deprecated Define an explicit wrapper function instead of using casting macros
1252 * Export a C++ function with explicit type casting for 5-parameter functions with custom name (no documentation).
1253 * Convenience macro that wraps PY_MODULE_FUNCTION_CAST_NAME_DOC_5() with s_doc = nullptr.
1254 *
1255 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
1256 * @param f_cppFunction C++ function to export (5 parameters)
1257 * @param t_return Return type of the function (for explicit casting)
1258 * @param t_P1, t_P2, t_P3, t_P4, t_P5 Parameter types for the function (for explicit casting)
1259 * @param s_functionName Python function name (const char* string with static storage duration)
1260 */
1261#define PY_MODULE_FUNCTION_CAST_NAME_5( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, s_functionName )\
1262 PY_MODULE_FUNCTION_CAST_NAME_DOC_5(\
1263 i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, s_functionName, 0 )
1264
1265/** @ingroup ModuleDefinition
1266 * @deprecated Define an explicit wrapper function instead of using casting macros
1267 * Export a C++ function with explicit type casting for 6-parameter functions with custom name (no documentation).
1268 * Convenience macro that wraps PY_MODULE_FUNCTION_CAST_NAME_DOC_6() with s_doc = nullptr.
1269 *
1270 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
1271 * @param f_cppFunction C++ function to export (6 parameters)
1272 * @param t_return Return type of the function (for explicit casting)
1273 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6 Parameter types for the function (for explicit casting)
1274 * @param s_functionName Python function name (const char* string with static storage duration)
1275 */
1276#define PY_MODULE_FUNCTION_CAST_NAME_6( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, s_functionName )\
1277 PY_MODULE_FUNCTION_CAST_NAME_DOC_6(\
1278 i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, s_functionName, 0 )
1279
1280/** @ingroup ModuleDefinition
1281 * @deprecated Define an explicit wrapper function instead of using casting macros
1282 * Export a C++ function with explicit type casting for 7-parameter functions with custom name (no documentation).
1283 * Convenience macro that wraps PY_MODULE_FUNCTION_CAST_NAME_DOC_7() with s_doc = nullptr.
1284 *
1285 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
1286 * @param f_cppFunction C++ function to export (7 parameters)
1287 * @param t_return Return type of the function (for explicit casting)
1288 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7 Parameter types for the function (for explicit casting)
1289 * @param s_functionName Python function name (const char* string with static storage duration)
1290 */
1291#define PY_MODULE_FUNCTION_CAST_NAME_7( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, s_functionName )\
1292 PY_MODULE_FUNCTION_CAST_NAME_DOC_7(\
1293 i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, s_functionName, 0 )
1294
1295/** @ingroup ModuleDefinition
1296 * @deprecated Define an explicit wrapper function instead of using casting macros
1297 * Export a C++ function with explicit type casting for 8-parameter functions with custom name (no documentation).
1298 * Convenience macro that wraps PY_MODULE_FUNCTION_CAST_NAME_DOC_8() with s_doc = nullptr.
1299 *
1300 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
1301 * @param f_cppFunction C++ function to export (8 parameters)
1302 * @param t_return Return type of the function (for explicit casting)
1303 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8 Parameter types for the function (for explicit casting)
1304 * @param s_functionName Python function name (const char* string with static storage duration)
1305 */
1306#define PY_MODULE_FUNCTION_CAST_NAME_8( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, s_functionName )\
1307 PY_MODULE_FUNCTION_CAST_NAME_DOC_8(\
1308 i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, s_functionName, 0 )
1309
1310/** @ingroup ModuleDefinition
1311 * @deprecated Define an explicit wrapper function instead of using casting macros
1312 * Export a C++ function with explicit type casting for 9-parameter functions with custom name (no documentation).
1313 * Convenience macro that wraps PY_MODULE_FUNCTION_CAST_NAME_DOC_9() with s_doc = nullptr.
1314 *
1315 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
1316 * @param f_cppFunction C++ function to export (9 parameters)
1317 * @param t_return Return type of the function (for explicit casting)
1318 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9 Parameter types for the function (for explicit casting)
1319 * @param s_functionName Python function name (const char* string with static storage duration)
1320 */
1321#define PY_MODULE_FUNCTION_CAST_NAME_9( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, s_functionName )\
1322 PY_MODULE_FUNCTION_CAST_NAME_DOC_9(\
1323 i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, s_functionName, 0 )
1324
1325/** @ingroup ModuleDefinition
1326 * @deprecated Define an explicit wrapper function instead of using casting macros
1327 * Export a C++ function with explicit type casting for 10-parameter functions with custom name (no documentation).
1328 * Convenience macro that wraps PY_MODULE_FUNCTION_CAST_NAME_DOC_10() with s_doc = nullptr.
1329 *
1330 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
1331 * @param f_cppFunction C++ function to export (10 parameters)
1332 * @param t_return Return type of the function (for explicit casting)
1333 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10 Parameter types for the function (for explicit casting)
1334 * @param s_functionName Python function name (const char* string with static storage duration)
1335 */
1336#define PY_MODULE_FUNCTION_CAST_NAME_10( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, s_functionName )\
1337 PY_MODULE_FUNCTION_CAST_NAME_DOC_10(\
1338 i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, s_functionName, 0 )
1339
1340/** @ingroup ModuleDefinition
1341 * @deprecated Define an explicit wrapper function instead of using casting macros
1342 * Export a C++ function with explicit type casting for 11-parameter functions with custom name (no documentation).
1343 * Convenience macro that wraps PY_MODULE_FUNCTION_CAST_NAME_DOC_11() with s_doc = nullptr.
1344 *
1345 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
1346 * @param f_cppFunction C++ function to export (11 parameters)
1347 * @param t_return Return type of the function (for explicit casting)
1348 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11 Parameter types for the function (for explicit casting)
1349 * @param s_functionName Python function name (const char* string with static storage duration)
1350 */
1351#define PY_MODULE_FUNCTION_CAST_NAME_11( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, s_functionName )\
1352 PY_MODULE_FUNCTION_CAST_NAME_DOC_11(\
1353 i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, s_functionName, 0 )
1354
1355/** @ingroup ModuleDefinition
1356 * @deprecated Define an explicit wrapper function instead of using casting macros
1357 * Export a C++ function with explicit type casting for 12-parameter functions with custom name (no documentation).
1358 * Convenience macro that wraps PY_MODULE_FUNCTION_CAST_NAME_DOC_12() with s_doc = nullptr.
1359 *
1360 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
1361 * @param f_cppFunction C++ function to export (12 parameters)
1362 * @param t_return Return type of the function (for explicit casting)
1363 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12 Parameter types for the function (for explicit casting)
1364 * @param s_functionName Python function name (const char* string with static storage duration)
1365 */
1366#define PY_MODULE_FUNCTION_CAST_NAME_12( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, s_functionName )\
1367 PY_MODULE_FUNCTION_CAST_NAME_DOC_12(\
1368 i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, s_functionName, 0 )
1369
1370/** @ingroup ModuleDefinition
1371 * @deprecated Define an explicit wrapper function instead of using casting macros
1372 * Export a C++ function with explicit type casting for 13-parameter functions with custom name (no documentation).
1373 * Convenience macro that wraps PY_MODULE_FUNCTION_CAST_NAME_DOC_13() with s_doc = nullptr.
1374 *
1375 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
1376 * @param f_cppFunction C++ function to export (13 parameters)
1377 * @param t_return Return type of the function (for explicit casting)
1378 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13 Parameter types for the function (for explicit casting)
1379 * @param s_functionName Python function name (const char* string with static storage duration)
1380 */
1381#define PY_MODULE_FUNCTION_CAST_NAME_13( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, s_functionName )\
1382 PY_MODULE_FUNCTION_CAST_NAME_DOC_13(\
1383 i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, s_functionName, 0 )
1384
1385/** @ingroup ModuleDefinition
1386 * @deprecated Define an explicit wrapper function instead of using casting macros
1387 * Export a C++ function with explicit type casting for 14-parameter functions with custom name (no documentation).
1388 * Convenience macro that wraps PY_MODULE_FUNCTION_CAST_NAME_DOC_14() with s_doc = nullptr.
1389 *
1390 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
1391 * @param f_cppFunction C++ function to export (14 parameters)
1392 * @param t_return Return type of the function (for explicit casting)
1393 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14 Parameter types for the function (for explicit casting)
1394 * @param s_functionName Python function name (const char* string with static storage duration)
1395 */
1396#define PY_MODULE_FUNCTION_CAST_NAME_14( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, s_functionName )\
1397 PY_MODULE_FUNCTION_CAST_NAME_DOC_14(\
1398 i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, s_functionName, 0 )
1399
1400/** @ingroup ModuleDefinition
1401 * @deprecated Define an explicit wrapper function instead of using casting macros
1402 * Export a C++ function with explicit type casting for 15-parameter functions with custom name (no documentation).
1403 * Convenience macro that wraps PY_MODULE_FUNCTION_CAST_NAME_DOC_15() with s_doc = nullptr.
1404 *
1405 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
1406 * @param f_cppFunction C++ function to export (15 parameters)
1407 * @param t_return Return type of the function (for explicit casting)
1408 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15 Parameter types for the function (for explicit casting)
1409 * @param s_functionName Python function name (const char* string with static storage duration)
1410 */
1411#define PY_MODULE_FUNCTION_CAST_NAME_15( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15, s_functionName )\
1412 PY_MODULE_FUNCTION_CAST_NAME_DOC_15(\
1413 i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15, s_functionName, 0 )
1414
1415
1416/** @} */
1417
1418// --- explicit qualified free functions -----------------------------------------------------------
1419
1420/** @addtogroup ModuleDefinition
1421 * @name Type-Qualified Function Export Macros
1422 *
1423 * These macros export C++ functions to Python with explicit type qualification to resolve
1424 * function overload ambiguities. They provide fine-grained control over function signatures
1425 * and are essential when exporting overloaded functions that would otherwise be ambiguous.
1426 *
1427 * The macros are organized in layers:
1428 * - PY_MODULE_FUNCTION_QUALIFIED_EX(): Full control with custom dispatcher and meta::TypeTuple for parameters
1429 * - PY_MODULE_FUNCTION_QUALIFIED_EX_0() through PY_MODULE_FUNCTION_QUALIFIED_EX_15(): Full control with custom dispatcher, for 0-15 parameters
1430 * - PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC(): Automatic dispatcher with custom name and documentation, and meta::TypeTuple for parameters
1431 * - PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_0() through PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_15(): Automatic dispatcher with custom name, for 0-15 parameters
1432 * - PY_MODULE_FUNCTION_QUALIFIED_NAME(): Automatic dispatcher with custom name, no documentation, and meta::TypeTuple for parameters
1433 * - PY_MODULE_FUNCTION_QUALIFIED_NAME_0() through PY_MODULE_FUNCTION_QUALIFIED_NAME_15(): Automatic dispatcher with custom name, no documentation, for 0-15 parameters
1434 * - PY_MODULE_FUNCTION_QUALIFIED_DOC(): Automatic dispatcher with documentation, and meta::TypeTuple for parameters
1435 * - PY_MODULE_FUNCTION_QUALIFIED_DOC_0() through PY_MODULE_FUNCTION_QUALIFIED_DOC_15(): Automatic dispatcher with documentation, for 0-15 parameters
1436 * - PY_MODULE_FUNCTION_QUALIFIED(): Automatic dispatcher, no documentation, and meta::TypeTuple for parameters
1437 * - PY_MODULE_FUNCTION_QUALIFIED_0() through PY_MODULE_FUNCTION_QUALIFIED_15(): Automatic dispatcher, no documentation, for 0-15 parameters
1438 *
1439 * @{
1440 */
1441
1442
1443/** @ingroup ModuleDefinition
1444 * Export a C++ free function to Python with explicit type qualification to resolve ambiguities.
1445 *
1446 * Use this macro instead of PY_MODULE_FUNCTION_EX when there are overloaded C++ functions
1447 * that would create ambiguity. By explicitly specifying return type and parameter types,
1448 * you can disambiguate which overload to export.
1449 *
1450 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*
1451 * @param f_cppFunction C++ function to export (can be overloaded)
1452 * @param t_return Return type of the function (for disambiguation)
1453 * @param t_params Parameter types as lass::meta::TypeTuple (for disambiguation)
1454 * @param s_functionName Python function name (const char* string with static storage duration)
1455 * @param s_doc Function documentation string (const char* string with static storage duration, or nullptr)
1456 * @param i_dispatcher Unique name for the generated dispatcher function (must be unscoped identifier for token concatenation)
1457 *
1458 * This macro helps resolve function overload ambiguities by explicitly specifying
1459 * the function signature to export.
1460 *
1461 * @par Example:
1462 * @code
1463 * void bar(int a);
1464 * void bar(const std::string& b);
1465 *
1466 * PY_MODULE_FUNCTION_QUALIFIED_EX(foo_module, bar, void, meta::TypeTuple<int>, "bar", nullptr, foo_bar_a)
1467 * PY_MODULE_FUNCTION_QUALIFIED_EX(foo_module, bar, void, meta::TypeTuple<const std::string&>, "bar", nullptr, foo_bar_b)
1468 * @endcode
1469 */
1470
1471#define PY_MODULE_FUNCTION_QUALIFIED_EX(i_module, f_cppFunction, t_return, t_params, s_functionName, s_doc, i_dispatcher)\
1472 static PyCFunction LASS_CONCATENATE( pyOverloadChain_, i_dispatcher ) = 0;\
1473 extern "C" LASS_DLL_LOCAL PyObject* i_dispatcher( PyObject* iIgnore, PyObject* iArgs )\
1474 {\
1475 if (LASS_CONCATENATE( pyOverloadChain_, i_dispatcher ))\
1476 {\
1477 PyObject* result = LASS_CONCATENATE( pyOverloadChain_, i_dispatcher )(iIgnore, iArgs);\
1478 if (!(PyErr_Occurred() && PyErr_ExceptionMatches(PyExc_TypeError)))\
1479 {\
1480 return result;\
1481 }\
1482 PyErr_Clear();\
1483 Py_XDECREF(result);\
1484 }\
1485 return ::lass::python::impl::ExplicitResolver\
1486 <\
1487 lass::meta::NullType,\
1488 t_return,\
1489 t_params\
1490 >\
1491 ::callFunction(iArgs, &f_cppFunction);\
1492 }\
1493 LASS_EXECUTE_BEFORE_MAIN_EX\
1494 ( LASS_CONCATENATE_3( lassExecutePyModuleFunction_, i_module, i_dispatcher ),\
1495 i_module.addFunctionDispatcher( \
1496 i_dispatcher, s_functionName, s_doc, \
1497 LASS_CONCATENATE( pyOverloadChain_, i_dispatcher ) \
1498 );\
1499 )
1500
1501/** @ingroup ModuleDefinition
1502 * Export a C++ function with type qualification for 0-parameter functions with full control.
1503 * Convenience macro that wraps PY_MODULE_FUNCTION_QUALIFIED_EX() for functions with 0 parameters.
1504 *
1505 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
1506 * @param f_cppFunction C++ function to export (0 parameters, can be overloaded)
1507 * @param t_return Return type of the function (for disambiguation)
1508 * @param s_functionName Python function name (const char* string with static storage duration)
1509 * @param s_doc Function documentation string (const char* string with static storage duration)
1510 * @param i_dispatcher Unique identifier for the function dispatcher
1511 */
1512#define PY_MODULE_FUNCTION_QUALIFIED_EX_0( i_module, f_cppFunction, t_return, s_functionName, s_doc, i_dispatcher )\
1513 PY_MODULE_FUNCTION_QUALIFIED_EX(\
1514 i_module, f_cppFunction, t_return, ::lass::meta::TypeTuple<>, s_functionName, s_doc, i_dispatcher )
1515
1516/** @ingroup ModuleDefinition
1517 * Export a C++ function with type qualification for 1-parameter functions with full control.
1518 * Convenience macro that wraps PY_MODULE_FUNCTION_QUALIFIED_EX() for functions with exactly 1 parameters.
1519 *
1520 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
1521 * @param f_cppFunction C++ function to export (1 parameters, can be overloaded)
1522 * @param t_return Return type of the function (for disambiguation)
1523 * @param t_P1 Parameter types for the function (for disambiguation)
1524 * @param s_functionName Python function name (const char* string with static storage duration)
1525 * @param s_doc Function documentation string (const char* string with static storage duration)
1526 * @param i_dispatcher Unique identifier for the function dispatcher
1527 */
1528#define PY_MODULE_FUNCTION_QUALIFIED_EX_1( i_module, f_cppFunction, t_return, t_P1, s_functionName, s_doc, i_dispatcher )\
1529 typedef ::lass::meta::TypeTuple< t_P1 > \
1530 LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams));\
1531 PY_MODULE_FUNCTION_QUALIFIED_EX(\
1532 i_module, f_cppFunction, t_return,\
1533 LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams)),\
1534 s_functionName, s_doc, i_dispatcher )
1535
1536/** @ingroup ModuleDefinition
1537 * Export a C++ function with type qualification for 2-parameter functions with full control.
1538 * Convenience macro that wraps PY_MODULE_FUNCTION_QUALIFIED_EX() for functions with exactly 2 parameters.
1539 *
1540 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
1541 * @param f_cppFunction C++ function to export (2 parameters, can be overloaded)
1542 * @param t_return Return type of the function (for disambiguation)
1543 * @param t_P1, t_P2 Parameter types for the function (for disambiguation)
1544 * @param s_functionName Python function name (const char* string with static storage duration)
1545 * @param s_doc Function documentation string (const char* string with static storage duration)
1546 * @param i_dispatcher Unique identifier for the function dispatcher
1547 */
1548#define PY_MODULE_FUNCTION_QUALIFIED_EX_2( i_module, f_cppFunction, t_return, t_P1, t_P2, s_functionName, s_doc, i_dispatcher )\
1549 typedef ::lass::meta::TypeTuple< t_P1, t_P2 > \
1550 LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams));\
1551 PY_MODULE_FUNCTION_QUALIFIED_EX(\
1552 i_module, f_cppFunction, t_return,\
1553 LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams)),\
1554 s_functionName, s_doc, i_dispatcher )
1555
1556/** @ingroup ModuleDefinition
1557 * Export a C++ function with type qualification for 3-parameter functions with full control.
1558 * Convenience macro that wraps PY_MODULE_FUNCTION_QUALIFIED_EX() for functions with exactly 3 parameters.
1559 *
1560 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
1561 * @param f_cppFunction C++ function to export (3 parameters, can be overloaded)
1562 * @param t_return Return type of the function (for disambiguation)
1563 * @param t_P1, t_P2, t_P3 Parameter types for the function (for disambiguation)
1564 * @param s_functionName Python function name (const char* string with static storage duration)
1565 * @param s_doc Function documentation string (const char* string with static storage duration)
1566 * @param i_dispatcher Unique identifier for the function dispatcher
1567 */
1568#define PY_MODULE_FUNCTION_QUALIFIED_EX_3( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, s_functionName, s_doc, i_dispatcher )\
1569 typedef ::lass::meta::TypeTuple< t_P1, t_P2, t_P3 > \
1570 LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams));\
1571 PY_MODULE_FUNCTION_QUALIFIED_EX(\
1572 i_module, f_cppFunction, t_return,\
1573 LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams)),\
1574 s_functionName, s_doc, i_dispatcher )
1575
1576/** @ingroup ModuleDefinition
1577 * Export a C++ function with type qualification for 4-parameter functions with full control.
1578 * Convenience macro that wraps PY_MODULE_FUNCTION_QUALIFIED_EX() for functions with exactly 4 parameters.
1579 *
1580 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
1581 * @param f_cppFunction C++ function to export (4 parameters, can be overloaded)
1582 * @param t_return Return type of the function (for disambiguation)
1583 * @param t_P1, t_P2, t_P3, t_P4 Parameter types for the function (for disambiguation)
1584 * @param s_functionName Python function name (const char* string with static storage duration)
1585 * @param s_doc Function documentation string (const char* string with static storage duration)
1586 * @param i_dispatcher Unique identifier for the function dispatcher
1587 */
1588#define PY_MODULE_FUNCTION_QUALIFIED_EX_4( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, s_functionName, s_doc, i_dispatcher )\
1589 typedef ::lass::meta::TypeTuple< t_P1, t_P2, t_P3, t_P4 > \
1590 LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams));\
1591 PY_MODULE_FUNCTION_QUALIFIED_EX(\
1592 i_module, f_cppFunction, t_return,\
1593 LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams)),\
1594 s_functionName, s_doc, i_dispatcher )
1595
1596/** @ingroup ModuleDefinition
1597 * Export a C++ function with type qualification for 5-parameter functions with full control.
1598 * Convenience macro that wraps PY_MODULE_FUNCTION_QUALIFIED_EX() for functions with exactly 5 parameters.
1599 *
1600 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
1601 * @param f_cppFunction C++ function to export (5 parameters, can be overloaded)
1602 * @param t_return Return type of the function (for disambiguation)
1603 * @param t_P1, t_P2, t_P3, t_P4, t_P5 Parameter types for the function (for disambiguation)
1604 * @param s_functionName Python function name (const char* string with static storage duration)
1605 * @param s_doc Function documentation string (const char* string with static storage duration)
1606 * @param i_dispatcher Unique identifier for the function dispatcher
1607 */
1608#define PY_MODULE_FUNCTION_QUALIFIED_EX_5( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, s_functionName, s_doc, i_dispatcher )\
1609 typedef ::lass::meta::TypeTuple< t_P1, t_P2, t_P3, t_P4, t_P5 > \
1610 LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams));\
1611 PY_MODULE_FUNCTION_QUALIFIED_EX(\
1612 i_module, f_cppFunction, t_return,\
1613 LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams)),\
1614 s_functionName, s_doc, i_dispatcher )
1615
1616/** @ingroup ModuleDefinition
1617 * Export a C++ function with type qualification for 6-parameter functions with full control.
1618 * Convenience macro that wraps PY_MODULE_FUNCTION_QUALIFIED_EX() for functions with exactly 6 parameters.
1619 *
1620 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
1621 * @param f_cppFunction C++ function to export (6 parameters, can be overloaded)
1622 * @param t_return Return type of the function (for disambiguation)
1623 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6 Parameter types for the function (for disambiguation)
1624 * @param s_functionName Python function name (const char* string with static storage duration)
1625 * @param s_doc Function documentation string (const char* string with static storage duration)
1626 * @param i_dispatcher Unique identifier for the function dispatcher
1627 */
1628#define PY_MODULE_FUNCTION_QUALIFIED_EX_6( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, s_functionName, s_doc, i_dispatcher )\
1629 typedef ::lass::meta::TypeTuple< t_P1, t_P2, t_P3, t_P4, t_P5, t_P6 > \
1630 LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams));\
1631 PY_MODULE_FUNCTION_QUALIFIED_EX(\
1632 i_module, f_cppFunction, t_return,\
1633 LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams)),\
1634 s_functionName, s_doc, i_dispatcher )
1635
1636/** @ingroup ModuleDefinition
1637 * Export a C++ function with type qualification for 7-parameter functions with full control.
1638 * Convenience macro that wraps PY_MODULE_FUNCTION_QUALIFIED_EX() for functions with exactly 7 parameters.
1639 *
1640 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
1641 * @param f_cppFunction C++ function to export (7 parameters, can be overloaded)
1642 * @param t_return Return type of the function (for disambiguation)
1643 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7 Parameter types for the function (for disambiguation)
1644 * @param s_functionName Python function name (const char* string with static storage duration)
1645 * @param s_doc Function documentation string (const char* string with static storage duration)
1646 * @param i_dispatcher Unique identifier for the function dispatcher
1647 */
1648#define PY_MODULE_FUNCTION_QUALIFIED_EX_7( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, s_functionName, s_doc, i_dispatcher )\
1649 typedef ::lass::meta::TypeTuple< t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7 > \
1650 LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams));\
1651 PY_MODULE_FUNCTION_QUALIFIED_EX(\
1652 i_module, f_cppFunction, t_return,\
1653 LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams)),\
1654 s_functionName, s_doc, i_dispatcher )
1655
1656/** @ingroup ModuleDefinition
1657 * Export a C++ function with type qualification for 8-parameter functions with full control.
1658 * Convenience macro that wraps PY_MODULE_FUNCTION_QUALIFIED_EX() for functions with exactly 8 parameters.
1659 *
1660 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
1661 * @param f_cppFunction C++ function to export (8 parameters, can be overloaded)
1662 * @param t_return Return type of the function (for disambiguation)
1663 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8 Parameter types for the function (for disambiguation)
1664 * @param s_functionName Python function name (const char* string with static storage duration)
1665 * @param s_doc Function documentation string (const char* string with static storage duration)
1666 * @param i_dispatcher Unique identifier for the function dispatcher
1667 */
1668#define PY_MODULE_FUNCTION_QUALIFIED_EX_8( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, s_functionName, s_doc, i_dispatcher )\
1669 typedef ::lass::meta::TypeTuple< t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8 > \
1670 LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams));\
1671 PY_MODULE_FUNCTION_QUALIFIED_EX(\
1672 i_module, f_cppFunction, t_return,\
1673 LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams)),\
1674 s_functionName, s_doc, i_dispatcher )
1675
1676/** @ingroup ModuleDefinition
1677 * Export a C++ function with type qualification for 9-parameter functions with full control.
1678 * Convenience macro that wraps PY_MODULE_FUNCTION_QUALIFIED_EX() for functions with exactly 9 parameters.
1679 *
1680 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
1681 * @param f_cppFunction C++ function to export (9 parameters, can be overloaded)
1682 * @param t_return Return type of the function (for disambiguation)
1683 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9 Parameter types for the function (for disambiguation)
1684 * @param s_functionName Python function name (const char* string with static storage duration)
1685 * @param s_doc Function documentation string (const char* string with static storage duration)
1686 * @param i_dispatcher Unique identifier for the function dispatcher
1687 */
1688#define PY_MODULE_FUNCTION_QUALIFIED_EX_9( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, s_functionName, s_doc, i_dispatcher )\
1689 typedef ::lass::meta::TypeTuple< t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9 > \
1690 LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams));\
1691 PY_MODULE_FUNCTION_QUALIFIED_EX(\
1692 i_module, f_cppFunction, t_return,\
1693 LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams)),\
1694 s_functionName, s_doc, i_dispatcher )
1695
1696/** @ingroup ModuleDefinition
1697 * Export a C++ function with type qualification for 10-parameter functions with full control.
1698 * Convenience macro that wraps PY_MODULE_FUNCTION_QUALIFIED_EX() for functions with exactly 10 parameters.
1699 *
1700 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
1701 * @param f_cppFunction C++ function to export (10 parameters, can be overloaded)
1702 * @param t_return Return type of the function (for disambiguation)
1703 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10 Parameter types for the function (for disambiguation)
1704 * @param s_functionName Python function name (const char* string with static storage duration)
1705 * @param s_doc Function documentation string (const char* string with static storage duration)
1706 * @param i_dispatcher Unique identifier for the function dispatcher
1707 */
1708#define PY_MODULE_FUNCTION_QUALIFIED_EX_10( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, s_functionName, s_doc, i_dispatcher )\
1709 typedef ::lass::meta::TypeTuple< t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10 > \
1710 LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams));\
1711 PY_MODULE_FUNCTION_QUALIFIED_EX(\
1712 i_module, f_cppFunction, t_return,\
1713 LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams)),\
1714 s_functionName, s_doc, i_dispatcher )
1715
1716/** @ingroup ModuleDefinition
1717 * Export a C++ function with type qualification for 11-parameter functions with full control.
1718 * Convenience macro that wraps PY_MODULE_FUNCTION_QUALIFIED_EX() for functions with exactly 11 parameters.
1719 *
1720 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
1721 * @param f_cppFunction C++ function to export (11 parameters, can be overloaded)
1722 * @param t_return Return type of the function (for disambiguation)
1723 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11 Parameter types for the function (for disambiguation)
1724 * @param s_functionName Python function name (const char* string with static storage duration)
1725 * @param s_doc Function documentation string (const char* string with static storage duration)
1726 * @param i_dispatcher Unique identifier for the function dispatcher
1727 */
1728#define PY_MODULE_FUNCTION_QUALIFIED_EX_11( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, s_functionName, s_doc, i_dispatcher )\
1729 typedef ::lass::meta::TypeTuple< t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11 > \
1730 LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams));\
1731 PY_MODULE_FUNCTION_QUALIFIED_EX(\
1732 i_module, f_cppFunction, t_return,\
1733 LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams)),\
1734 s_functionName, s_doc, i_dispatcher )
1735
1736/** @ingroup ModuleDefinition
1737 * Export a C++ function with type qualification for 12-parameter functions with full control.
1738 * Convenience macro that wraps PY_MODULE_FUNCTION_QUALIFIED_EX() for functions with exactly 12 parameters.
1739 *
1740 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
1741 * @param f_cppFunction C++ function to export (12 parameters, can be overloaded)
1742 * @param t_return Return type of the function (for disambiguation)
1743 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12 Parameter types for the function (for disambiguation)
1744 * @param s_functionName Python function name (const char* string with static storage duration)
1745 * @param s_doc Function documentation string (const char* string with static storage duration)
1746 * @param i_dispatcher Unique identifier for the function dispatcher
1747 */
1748#define PY_MODULE_FUNCTION_QUALIFIED_EX_12( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, s_functionName, s_doc, i_dispatcher )\
1749 typedef ::lass::meta::TypeTuple< t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12 > \
1750 LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams));\
1751 PY_MODULE_FUNCTION_QUALIFIED_EX(\
1752 i_module, f_cppFunction, t_return,\
1753 LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams)),\
1754 s_functionName, s_doc, i_dispatcher )
1755
1756/** @ingroup ModuleDefinition
1757 * Export a C++ function with type qualification for 13-parameter functions with full control.
1758 * Convenience macro that wraps PY_MODULE_FUNCTION_QUALIFIED_EX() for functions with exactly 13 parameters.
1759 *
1760 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
1761 * @param f_cppFunction C++ function to export (13 parameters, can be overloaded)
1762 * @param t_return Return type of the function (for disambiguation)
1763 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13 Parameter types for the function (for disambiguation)
1764 * @param s_functionName Python function name (const char* string with static storage duration)
1765 * @param s_doc Function documentation string (const char* string with static storage duration)
1766 * @param i_dispatcher Unique identifier for the function dispatcher
1767 */
1768#define PY_MODULE_FUNCTION_QUALIFIED_EX_13( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, s_functionName, s_doc, i_dispatcher )\
1769 typedef ::lass::meta::TypeTuple< t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13 > \
1770 LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams));\
1771 PY_MODULE_FUNCTION_QUALIFIED_EX(\
1772 i_module, f_cppFunction, t_return,\
1773 LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams)),\
1774 s_functionName, s_doc, i_dispatcher )
1775
1776/** @ingroup ModuleDefinition
1777 * Export a C++ function with type qualification for 14-parameter functions with full control.
1778 * Convenience macro that wraps PY_MODULE_FUNCTION_QUALIFIED_EX() for functions with exactly 14 parameters.
1779 *
1780 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
1781 * @param f_cppFunction C++ function to export (14 parameters, can be overloaded)
1782 * @param t_return Return type of the function (for disambiguation)
1783 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14 Parameter types for the function (for disambiguation)
1784 * @param s_functionName Python function name (const char* string with static storage duration)
1785 * @param s_doc Function documentation string (const char* string with static storage duration)
1786 * @param i_dispatcher Unique identifier for the function dispatcher
1787 */
1788#define PY_MODULE_FUNCTION_QUALIFIED_EX_14( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, s_functionName, s_doc, i_dispatcher )\
1789 typedef ::lass::meta::TypeTuple< t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14 > \
1790 LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams));\
1791 PY_MODULE_FUNCTION_QUALIFIED_EX(\
1792 i_module, f_cppFunction, t_return,\
1793 LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams)),\
1794 s_functionName, s_doc, i_dispatcher )
1795
1796/** @ingroup ModuleDefinition
1797 * Export a C++ function with type qualification for 15-parameter functions with full control.
1798 * Convenience macro that wraps PY_MODULE_FUNCTION_QUALIFIED_EX() for functions with exactly 15 parameters.
1799 *
1800 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
1801 * @param f_cppFunction C++ function to export (15 parameters, can be overloaded)
1802 * @param t_return Return type of the function (for disambiguation)
1803 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15 Parameter types for the function (for disambiguation)
1804 * @param s_functionName Python function name (const char* string with static storage duration)
1805 * @param s_doc Function documentation string (const char* string with static storage duration)
1806 * @param i_dispatcher Unique identifier for the function dispatcher
1807 */
1808#define PY_MODULE_FUNCTION_QUALIFIED_EX_15( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15, s_functionName, s_doc, i_dispatcher )\
1809 typedef ::lass::meta::TypeTuple< t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15 > \
1810 LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams));\
1811 PY_MODULE_FUNCTION_QUALIFIED_EX(\
1812 i_module, f_cppFunction, t_return,\
1813 LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams)),\
1814 s_functionName, s_doc, i_dispatcher )
1815
1816
1817/** @ingroup ModuleDefinition
1818 * Export a C++ function with type qualification and custom name with documentation.
1819 * Convenience macro that wraps PY_MODULE_FUNCTION_QUALIFIED_EX() with automatically generated dispatcher name.
1820 *
1821 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
1822 * @param f_cppFunction C++ function to export (can be overloaded)
1823 * @param t_return Return type of the function (for disambiguation)
1824 * @param t_params Parameter types as lass::meta::TypeTuple (for disambiguation)
1825 * @param s_functionName Python function name (const char* string with static storage duration)
1826 * @param s_doc Function documentation string (const char* string with static storage duration)
1827 */
1828#define PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC( i_module, f_cppFunction, t_return, t_params, s_functionName, s_doc )\
1829 PY_MODULE_FUNCTION_QUALIFIED_EX(\
1830 i_module, f_cppFunction, t_return, t_params, s_functionName, s_doc,\
1831 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_function_, i_module)))
1832
1833
1834/** @ingroup ModuleDefinition
1835 * Export a C++ function with type qualification for 0-parameter functions with custom name and documentation.
1836 * Convenience macro that wraps PY_MODULE_FUNCTION_QUALIFIED_EX_0() with automatically generated dispatcher name.
1837 *
1838 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
1839 * @param f_cppFunction C++ function to export (0 parameters, can be overloaded)
1840 * @param t_return Return type of the function (for disambiguation)
1841 * @param t_params Parameter types as lass::meta::TypeTuple (for disambiguation - should be empty TypeTuple<>)
1842 * @param s_functionName Python function name (const char* string with static storage duration)
1843 * @param s_doc Function documentation string (const char* string with static storage duration)
1844 */
1845#define PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_0( i_module, f_cppFunction, t_return, t_params, s_functionName, s_doc )\
1846 PY_MODULE_FUNCTION_QUALIFIED_EX_0(\
1847 i_module, f_cppFunction, t_return, s_functionName, s_doc,\
1848 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_function_, i_module)))
1849
1850/** @ingroup ModuleDefinition
1851 * Export a C++ function with type qualification for 1-parameter functions with custom name and documentation.
1852 * Convenience macro that wraps PY_MODULE_FUNCTION_QUALIFIED_EX_1() with automatically generated dispatcher name.
1853 *
1854 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
1855 * @param f_cppFunction C++ function to export (1 parameters, can be overloaded)
1856 * @param t_return Return type of the function (for disambiguation)
1857 * @param t_P1 Parameter types for the function (for disambiguation)
1858 * @param s_functionName Python function name (const char* string with static storage duration)
1859 * @param s_doc Function documentation string (const char* string with static storage duration)
1860 */
1861#define PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_1( i_module, f_cppFunction, t_return, t_P1, s_functionName, s_doc )\
1862 PY_MODULE_FUNCTION_QUALIFIED_EX_1(\
1863 i_module, f_cppFunction, t_return, t_P1, s_functionName, s_doc,\
1864 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_function_, i_module)))
1865
1866/** @ingroup ModuleDefinition
1867 * Export a C++ function with type qualification for 2-parameter functions with custom name and documentation.
1868 * Convenience macro that wraps PY_MODULE_FUNCTION_QUALIFIED_EX_2() with automatically generated dispatcher name.
1869 *
1870 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
1871 * @param f_cppFunction C++ function to export (2 parameters, can be overloaded)
1872 * @param t_return Return type of the function (for disambiguation)
1873 * @param t_P1, t_P2 Parameter types for the function (for disambiguation)
1874 * @param s_functionName Python function name (const char* string with static storage duration)
1875 * @param s_doc Function documentation string (const char* string with static storage duration)
1876 */
1877#define PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_2( i_module, f_cppFunction, t_return, t_P1, t_P2, s_functionName, s_doc )\
1878 PY_MODULE_FUNCTION_QUALIFIED_EX_2(\
1879 i_module, f_cppFunction, t_return, t_P1, t_P2, s_functionName, s_doc,\
1880 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_function_, i_module)))
1881
1882/** @ingroup ModuleDefinition
1883 * Export a C++ function with type qualification for 3-parameter functions with custom name and documentation.
1884 * Convenience macro that wraps PY_MODULE_FUNCTION_QUALIFIED_EX_3() with automatically generated dispatcher name.
1885 *
1886 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
1887 * @param f_cppFunction C++ function to export (3 parameters, can be overloaded)
1888 * @param t_return Return type of the function (for disambiguation)
1889 * @param t_P1, t_P2, t_P3 Parameter types for the function (for disambiguation)
1890 * @param s_functionName Python function name (const char* string with static storage duration)
1891 * @param s_doc Function documentation string (const char* string with static storage duration)
1892 */
1893#define PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_3( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, s_functionName, s_doc )\
1894 PY_MODULE_FUNCTION_QUALIFIED_EX_3(\
1895 i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, s_functionName, s_doc,\
1896 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_function_, i_module)))
1897
1898/** @ingroup ModuleDefinition
1899 * Export a C++ function with type qualification for 4-parameter functions with custom name and documentation.
1900 * Convenience macro that wraps PY_MODULE_FUNCTION_QUALIFIED_EX_4() with automatically generated dispatcher name.
1901 *
1902 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
1903 * @param f_cppFunction C++ function to export (4 parameters, can be overloaded)
1904 * @param t_return Return type of the function (for disambiguation)
1905 * @param t_P1, t_P2, t_P3, t_P4 Parameter types for the function (for disambiguation)
1906 * @param s_functionName Python function name (const char* string with static storage duration)
1907 * @param s_doc Function documentation string (const char* string with static storage duration)
1908 */
1909#define PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_4( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, s_functionName, s_doc )\
1910 PY_MODULE_FUNCTION_QUALIFIED_EX_4(\
1911 i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, s_functionName, s_doc,\
1912 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_function_, i_module)))
1913
1914/** @ingroup ModuleDefinition
1915 * Export a C++ function with type qualification for 5-parameter functions with custom name and documentation.
1916 * Convenience macro that wraps PY_MODULE_FUNCTION_QUALIFIED_EX_5() with automatically generated dispatcher name.
1917 *
1918 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
1919 * @param f_cppFunction C++ function to export (5 parameters, can be overloaded)
1920 * @param t_return Return type of the function (for disambiguation)
1921 * @param t_P1, t_P2, t_P3, t_P4, t_P5 Parameter types for the function (for disambiguation)
1922 * @param s_functionName Python function name (const char* string with static storage duration)
1923 * @param s_doc Function documentation string (const char* string with static storage duration)
1924 */
1925#define PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_5( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, s_functionName, s_doc )\
1926 PY_MODULE_FUNCTION_QUALIFIED_EX_5(\
1927 i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, s_functionName, s_doc,\
1928 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_function_, i_module)))
1929
1930/** @ingroup ModuleDefinition
1931 * Export a C++ function with type qualification for 6-parameter functions with custom name and documentation.
1932 * Convenience macro that wraps PY_MODULE_FUNCTION_QUALIFIED_EX_6() with automatically generated dispatcher name.
1933 *
1934 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
1935 * @param f_cppFunction C++ function to export (6 parameters, can be overloaded)
1936 * @param t_return Return type of the function (for disambiguation)
1937 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6 Parameter types for the function (for disambiguation)
1938 * @param s_functionName Python function name (const char* string with static storage duration)
1939 * @param s_doc Function documentation string (const char* string with static storage duration)
1940 */
1941#define PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_6( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, s_functionName, s_doc )\
1942 PY_MODULE_FUNCTION_QUALIFIED_EX_6(\
1943 i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, s_functionName, s_doc,\
1944 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_function_, i_module)))
1945
1946/** @ingroup ModuleDefinition
1947 * Export a C++ function with type qualification for 7-parameter functions with custom name and documentation.
1948 * Convenience macro that wraps PY_MODULE_FUNCTION_QUALIFIED_EX_7() with automatically generated dispatcher name.
1949 *
1950 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
1951 * @param f_cppFunction C++ function to export (7 parameters, can be overloaded)
1952 * @param t_return Return type of the function (for disambiguation)
1953 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7 Parameter types for the function (for disambiguation)
1954 * @param s_functionName Python function name (const char* string with static storage duration)
1955 * @param s_doc Function documentation string (const char* string with static storage duration)
1956 */
1957#define PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_7( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, s_functionName, s_doc )\
1958 PY_MODULE_FUNCTION_QUALIFIED_EX_7(\
1959 i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, s_functionName, s_doc,\
1960 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_function_, i_module)))
1961
1962/** @ingroup ModuleDefinition
1963 * Export a C++ function with type qualification for 8-parameter functions with custom name and documentation.
1964 * Convenience macro that wraps PY_MODULE_FUNCTION_QUALIFIED_EX_8() with automatically generated dispatcher name.
1965 *
1966 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
1967 * @param f_cppFunction C++ function to export (8 parameters, can be overloaded)
1968 * @param t_return Return type of the function (for disambiguation)
1969 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8 Parameter types for the function (for disambiguation)
1970 * @param s_functionName Python function name (const char* string with static storage duration)
1971 * @param s_doc Function documentation string (const char* string with static storage duration)
1972 */
1973#define PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_8( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, s_functionName, s_doc )\
1974 PY_MODULE_FUNCTION_QUALIFIED_EX_8(\
1975 i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, s_functionName, s_doc,\
1976 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_function_, i_module)))
1977
1978/** @ingroup ModuleDefinition
1979 * Export a C++ function with type qualification for 9-parameter functions with custom name and documentation.
1980 * Convenience macro that wraps PY_MODULE_FUNCTION_QUALIFIED_EX_9() with automatically generated dispatcher name.
1981 *
1982 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
1983 * @param f_cppFunction C++ function to export (9 parameters, can be overloaded)
1984 * @param t_return Return type of the function (for disambiguation)
1985 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9 Parameter types for the function (for disambiguation)
1986 * @param s_functionName Python function name (const char* string with static storage duration)
1987 * @param s_doc Function documentation string (const char* string with static storage duration)
1988 */
1989#define PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_9( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, s_functionName, s_doc )\
1990 PY_MODULE_FUNCTION_QUALIFIED_EX_9(\
1991 i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, s_functionName, s_doc,\
1992 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_function_, i_module)))
1993
1994/** @ingroup ModuleDefinition
1995 * Export a C++ function with type qualification for 10-parameter functions with custom name and documentation.
1996 * Convenience macro that wraps PY_MODULE_FUNCTION_QUALIFIED_EX_10() with automatically generated dispatcher name.
1997 *
1998 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
1999 * @param f_cppFunction C++ function to export (10 parameters, can be overloaded)
2000 * @param t_return Return type of the function (for disambiguation)
2001 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10 Parameter types for the function (for disambiguation)
2002 * @param s_functionName Python function name (const char* string with static storage duration)
2003 * @param s_doc Function documentation string (const char* string with static storage duration)
2004 */
2005#define PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_10( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, s_functionName, s_doc )\
2006 PY_MODULE_FUNCTION_QUALIFIED_EX_10(\
2007 i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, s_functionName, s_doc,\
2008 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_function_, i_module)))
2009
2010/** @ingroup ModuleDefinition
2011 * Export a C++ function with type qualification for 11-parameter functions with custom name and documentation.
2012 * Convenience macro that wraps PY_MODULE_FUNCTION_QUALIFIED_EX_11() with automatically generated dispatcher name.
2013 *
2014 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
2015 * @param f_cppFunction C++ function to export (11 parameters, can be overloaded)
2016 * @param t_return Return type of the function (for disambiguation)
2017 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11 Parameter types for the function (for disambiguation)
2018 * @param s_functionName Python function name (const char* string with static storage duration)
2019 * @param s_doc Function documentation string (const char* string with static storage duration)
2020 */
2021#define PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_11( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, s_functionName, s_doc )\
2022 PY_MODULE_FUNCTION_QUALIFIED_EX_11(\
2023 i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, s_functionName, s_doc,\
2024 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_function_, i_module)))
2025
2026/** @ingroup ModuleDefinition
2027 * Export a C++ function with type qualification for 12-parameter functions with custom name and documentation.
2028 * Convenience macro that wraps PY_MODULE_FUNCTION_QUALIFIED_EX_12() with automatically generated dispatcher name.
2029 *
2030 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
2031 * @param f_cppFunction C++ function to export (12 parameters, can be overloaded)
2032 * @param t_return Return type of the function (for disambiguation)
2033 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12 Parameter types for the function (for disambiguation)
2034 * @param s_functionName Python function name (const char* string with static storage duration)
2035 * @param s_doc Function documentation string (const char* string with static storage duration)
2036 */
2037#define PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_12( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, s_functionName, s_doc )\
2038 PY_MODULE_FUNCTION_QUALIFIED_EX_12(\
2039 i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, s_functionName, s_doc,\
2040 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_function_, i_module)))
2041
2042/** @ingroup ModuleDefinition
2043 * Export a C++ function with type qualification for 13-parameter functions with custom name and documentation.
2044 * Convenience macro that wraps PY_MODULE_FUNCTION_QUALIFIED_EX_13() with automatically generated dispatcher name.
2045 *
2046 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
2047 * @param f_cppFunction C++ function to export (13 parameters, can be overloaded)
2048 * @param t_return Return type of the function (for disambiguation)
2049 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13 Parameter types for the function (for disambiguation)
2050 * @param s_functionName Python function name (const char* string with static storage duration)
2051 * @param s_doc Function documentation string (const char* string with static storage duration)
2052 */
2053#define PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_13( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, s_functionName, s_doc )\
2054 PY_MODULE_FUNCTION_QUALIFIED_EX_13(\
2055 i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, s_functionName, s_doc,\
2056 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_function_, i_module)))
2057
2058/** @ingroup ModuleDefinition
2059 * Export a C++ function with type qualification for 14-parameter functions with custom name and documentation.
2060 * Convenience macro that wraps PY_MODULE_FUNCTION_QUALIFIED_EX_14() with automatically generated dispatcher name.
2061 *
2062 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
2063 * @param f_cppFunction C++ function to export (14 parameters, can be overloaded)
2064 * @param t_return Return type of the function (for disambiguation)
2065 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14 Parameter types for the function (for disambiguation)
2066 * @param s_functionName Python function name (const char* string with static storage duration)
2067 * @param s_doc Function documentation string (const char* string with static storage duration)
2068 */
2069#define PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_14( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, s_functionName, s_doc )\
2070 PY_MODULE_FUNCTION_QUALIFIED_EX_14(\
2071 i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, s_functionName, s_doc,\
2072 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_function_, i_module)))
2073
2074/** @ingroup ModuleDefinition
2075 * Export a C++ function with type qualification for 15-parameter functions with custom name and documentation.
2076 * Convenience macro that wraps PY_MODULE_FUNCTION_QUALIFIED_EX_15() with automatically generated dispatcher name.
2077 *
2078 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
2079 * @param f_cppFunction C++ function to export (15 parameters, can be overloaded)
2080 * @param t_return Return type of the function (for disambiguation)
2081 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15 Parameter types for the function (for disambiguation)
2082 * @param s_functionName Python function name (const char* string with static storage duration)
2083 * @param s_doc Function documentation string (const char* string with static storage duration)
2084 */
2085#define PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_15( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15, s_functionName, s_doc )\
2086 PY_MODULE_FUNCTION_QUALIFIED_EX_15(\
2087 i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15, s_functionName, s_doc,\
2088 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_function_, i_module)))
2089
2090
2091/** @ingroup ModuleDefinition
2092 * Export a C++ function with type qualification and custom name (no documentation).
2093 * Convenience macro that wraps PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC() with s_doc = nullptr.
2094 *
2095 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*
2096 * @param f_cppFunction C++ function to export (can be overloaded)
2097 * @param t_return Return type of the function (for disambiguation)
2098 * @param t_params Parameter types as lass::meta::TypeTuple (for disambiguation)
2099 * @param s_functionName Python function name (const char* string with static storage duration)
2100 */
2101#define PY_MODULE_FUNCTION_QUALIFIED_NAME( i_module, f_cppFunction, t_return, t_params, s_functionName )\
2102 PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC(\
2103 i_module, f_cppFunction, t_return, t_params, s_functionName, 0 )
2104
2105/** @ingroup ModuleDefinition
2106 * Export a C++ function with type qualification for 0-parameter functions and custom name (no documentation).
2107 * Convenience macro that wraps PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_0() with s_doc = nullptr.
2108 *
2109 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*
2110 * @param f_cppFunction C++ function to export (0 parameters, can be overloaded)
2111 * @param t_return Return type of the function (for disambiguation)
2112 * @param s_functionName Python function name (const char* string with static storage duration)
2113 */
2114#define PY_MODULE_FUNCTION_QUALIFIED_NAME_0( i_module, f_cppFunction, t_return, s_functionName )\
2115 PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_0(\
2116 i_module, f_cppFunction, t_return, s_functionName, 0 )
2117
2118/** @ingroup ModuleDefinition
2119 * Export a C++ function with type qualification for 1-parameter functions with custom name (no documentation).
2120 * Convenience macro that wraps PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_1() with s_doc = nullptr.
2121 *
2122 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
2123 * @param f_cppFunction C++ function to export (1 parameters, can be overloaded)
2124 * @param t_return Return type of the function (for disambiguation)
2125 * @param t_P1 Parameter types for the function (for disambiguation)
2126 * @param s_functionName Python function name (const char* string with static storage duration)
2127 */
2128#define PY_MODULE_FUNCTION_QUALIFIED_NAME_1( i_module, f_cppFunction, t_return, t_P1, s_functionName )\
2129 PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_1(\
2130 i_module, f_cppFunction, t_return, t_P1, s_functionName, 0 )
2131
2132/** @ingroup ModuleDefinition
2133 * Export a C++ function with type qualification for 2-parameter functions with custom name (no documentation).
2134 * Convenience macro that wraps PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_2() with s_doc = nullptr.
2135 *
2136 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
2137 * @param f_cppFunction C++ function to export (2 parameters, can be overloaded)
2138 * @param t_return Return type of the function (for disambiguation)
2139 * @param t_P1, t_P2 Parameter types for the function (for disambiguation)
2140 * @param s_functionName Python function name (const char* string with static storage duration)
2141 */
2142#define PY_MODULE_FUNCTION_QUALIFIED_NAME_2( i_module, f_cppFunction, t_return, t_P1, t_P2, s_functionName )\
2143 PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_2(\
2144 i_module, f_cppFunction, t_return, t_P1, t_P2, s_functionName, 0 )
2145
2146/** @ingroup ModuleDefinition
2147 * Export a C++ function with type qualification for 3-parameter functions with custom name (no documentation).
2148 * Convenience macro that wraps PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_3() with s_doc = nullptr.
2149 *
2150 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
2151 * @param f_cppFunction C++ function to export (3 parameters, can be overloaded)
2152 * @param t_return Return type of the function (for disambiguation)
2153 * @param t_P1, t_P2, t_P3 Parameter types for the function (for disambiguation)
2154 * @param s_functionName Python function name (const char* string with static storage duration)
2155 */
2156#define PY_MODULE_FUNCTION_QUALIFIED_NAME_3( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, s_functionName )\
2157 PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_3(\
2158 i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, s_functionName, 0 )
2159
2160/** @ingroup ModuleDefinition
2161 * Export a C++ function with type qualification for 4-parameter functions with custom name (no documentation).
2162 * Convenience macro that wraps PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_4() with s_doc = nullptr.
2163 *
2164 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
2165 * @param f_cppFunction C++ function to export (4 parameters, can be overloaded)
2166 * @param t_return Return type of the function (for disambiguation)
2167 * @param t_P1, t_P2, t_P3, t_P4 Parameter types for the function (for disambiguation)
2168 * @param s_functionName Python function name (const char* string with static storage duration)
2169 */
2170#define PY_MODULE_FUNCTION_QUALIFIED_NAME_4( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, s_functionName )\
2171 PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_4(\
2172 i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, s_functionName, 0 )
2173
2174/** @ingroup ModuleDefinition
2175 * Export a C++ function with type qualification for 5-parameter functions with custom name (no documentation).
2176 * Convenience macro that wraps PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_5() with s_doc = nullptr.
2177 *
2178 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
2179 * @param f_cppFunction C++ function to export (5 parameters, can be overloaded)
2180 * @param t_return Return type of the function (for disambiguation)
2181 * @param t_P1, t_P2, t_P3, t_P4, t_P5 Parameter types for the function (for disambiguation)
2182 * @param s_functionName Python function name (const char* string with static storage duration)
2183 */
2184#define PY_MODULE_FUNCTION_QUALIFIED_NAME_5( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, s_functionName )\
2185 PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_5(\
2186 i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, s_functionName, 0 )
2187
2188/** @ingroup ModuleDefinition
2189 * Export a C++ function with type qualification for 6-parameter functions with custom name (no documentation).
2190 * Convenience macro that wraps PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_6() with s_doc = nullptr.
2191 *
2192 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
2193 * @param f_cppFunction C++ function to export (6 parameters, can be overloaded)
2194 * @param t_return Return type of the function (for disambiguation)
2195 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6 Parameter types for the function (for disambiguation)
2196 * @param s_functionName Python function name (const char* string with static storage duration)
2197 */
2198#define PY_MODULE_FUNCTION_QUALIFIED_NAME_6( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, s_functionName )\
2199 PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_6(\
2200 i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, s_functionName, 0 )
2201
2202/** @ingroup ModuleDefinition
2203 * Export a C++ function with type qualification for 7-parameter functions with custom name (no documentation).
2204 * Convenience macro that wraps PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_7() with s_doc = nullptr.
2205 *
2206 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
2207 * @param f_cppFunction C++ function to export (7 parameters, can be overloaded)
2208 * @param t_return Return type of the function (for disambiguation)
2209 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7 Parameter types for the function (for disambiguation)
2210 * @param s_functionName Python function name (const char* string with static storage duration)
2211 */
2212#define PY_MODULE_FUNCTION_QUALIFIED_NAME_7( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, s_functionName )\
2213 PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_7(\
2214 i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, s_functionName, 0 )
2215
2216/** @ingroup ModuleDefinition
2217 * Export a C++ function with type qualification for 8-parameter functions with custom name (no documentation).
2218 * Convenience macro that wraps PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_8() with s_doc = nullptr.
2219 *
2220 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
2221 * @param f_cppFunction C++ function to export (8 parameters, can be overloaded)
2222 * @param t_return Return type of the function (for disambiguation)
2223 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8 Parameter types for the function (for disambiguation)
2224 * @param s_functionName Python function name (const char* string with static storage duration)
2225 */
2226#define PY_MODULE_FUNCTION_QUALIFIED_NAME_8( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, s_functionName )\
2227 PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_8(\
2228 i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, s_functionName, 0 )
2229
2230/** @ingroup ModuleDefinition
2231 * Export a C++ function with type qualification for 9-parameter functions with custom name (no documentation).
2232 * Convenience macro that wraps PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_9() with s_doc = nullptr.
2233 *
2234 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
2235 * @param f_cppFunction C++ function to export (9 parameters, can be overloaded)
2236 * @param t_return Return type of the function (for disambiguation)
2237 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9 Parameter types for the function (for disambiguation)
2238 * @param s_functionName Python function name (const char* string with static storage duration)
2239 */
2240#define PY_MODULE_FUNCTION_QUALIFIED_NAME_9( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, s_functionName )\
2241 PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_9(\
2242 i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, s_functionName, 0 )
2243
2244/** @ingroup ModuleDefinition
2245 * Export a C++ function with type qualification for 10-parameter functions with custom name (no documentation).
2246 * Convenience macro that wraps PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_10() with s_doc = nullptr.
2247 *
2248 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
2249 * @param f_cppFunction C++ function to export (10 parameters, can be overloaded)
2250 * @param t_return Return type of the function (for disambiguation)
2251 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10 Parameter types for the function (for disambiguation)
2252 * @param s_functionName Python function name (const char* string with static storage duration)
2253 */
2254#define PY_MODULE_FUNCTION_QUALIFIED_NAME_10( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, s_functionName )\
2255 PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_10(\
2256 i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, s_functionName, 0 )
2257
2258/** @ingroup ModuleDefinition
2259 * Export a C++ function with type qualification for 11-parameter functions with custom name (no documentation).
2260 * Convenience macro that wraps PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_11() with s_doc = nullptr.
2261 *
2262 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
2263 * @param f_cppFunction C++ function to export (11 parameters, can be overloaded)
2264 * @param t_return Return type of the function (for disambiguation)
2265 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11 Parameter types for the function (for disambiguation)
2266 * @param s_functionName Python function name (const char* string with static storage duration)
2267 */
2268#define PY_MODULE_FUNCTION_QUALIFIED_NAME_11( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, s_functionName )\
2269 PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_11(\
2270 i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, s_functionName, 0 )
2271
2272/** @ingroup ModuleDefinition
2273 * Export a C++ function with type qualification for 12-parameter functions with custom name (no documentation).
2274 * Convenience macro that wraps PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_12() with s_doc = nullptr.
2275 *
2276 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
2277 * @param f_cppFunction C++ function to export (12 parameters, can be overloaded)
2278 * @param t_return Return type of the function (for disambiguation)
2279 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12 Parameter types for the function (for disambiguation)
2280 * @param s_functionName Python function name (const char* string with static storage duration)
2281 */
2282#define PY_MODULE_FUNCTION_QUALIFIED_NAME_12( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, s_functionName )\
2283 PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_12(\
2284 i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, s_functionName, 0 )
2285
2286/** @ingroup ModuleDefinition
2287 * Export a C++ function with type qualification for 13-parameter functions with custom name (no documentation).
2288 * Convenience macro that wraps PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_13() with s_doc = nullptr.
2289 *
2290 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
2291 * @param f_cppFunction C++ function to export (13 parameters, can be overloaded)
2292 * @param t_return Return type of the function (for disambiguation)
2293 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13 Parameter types for the function (for disambiguation)
2294 * @param s_functionName Python function name (const char* string with static storage duration)
2295 */
2296#define PY_MODULE_FUNCTION_QUALIFIED_NAME_13( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, s_functionName )\
2297 PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_13(\
2298 i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, s_functionName, 0 )
2299
2300/** @ingroup ModuleDefinition
2301 * Export a C++ function with type qualification for 14-parameter functions with custom name (no documentation).
2302 * Convenience macro that wraps PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_14() with s_doc = nullptr.
2303 *
2304 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
2305 * @param f_cppFunction C++ function to export (14 parameters, can be overloaded)
2306 * @param t_return Return type of the function (for disambiguation)
2307 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14 Parameter types for the function (for disambiguation)
2308 * @param s_functionName Python function name (const char* string with static storage duration)
2309 */
2310#define PY_MODULE_FUNCTION_QUALIFIED_NAME_14( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, s_functionName )\
2311 PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_14(\
2312 i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, s_functionName, 0 )
2313
2314/** @ingroup ModuleDefinition
2315 * Export a C++ function with type qualification for 15-parameter functions with custom name (no documentation).
2316 * Convenience macro that wraps PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_15() with s_doc = nullptr.
2317 *
2318 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
2319 * @param f_cppFunction C++ function to export (15 parameters, can be overloaded)
2320 * @param t_return Return type of the function (for disambiguation)
2321 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15 Parameter types for the function (for disambiguation)
2322 * @param s_functionName Python function name (const char* string with static storage duration)
2323 */
2324#define PY_MODULE_FUNCTION_QUALIFIED_NAME_15( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15, s_functionName )\
2325 PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_15(\
2326 i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15, s_functionName, 0 )
2327
2328
2329/** @ingroup ModuleDefinition
2330 * Export a C++ function with type qualification using the C++ function name with documentation.
2331 * Convenience macro that wraps PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC() with s_functionName derived from f_cppFunction.
2332 *
2333 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*
2334 * @param f_cppFunction C++ function to export (can be overloaded, name will be used as Python name)
2335 * @param t_return Return type of the function (for disambiguation)
2336 * @param t_params Parameter types as lass::meta::TypeTuple (for disambiguation)
2337 * @param s_doc Function documentation string (const char* string with static storage duration)
2338 */
2339#define PY_MODULE_FUNCTION_QUALIFIED_DOC( i_module, f_cppFunction, t_return, t_params, s_doc )\
2340 PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC( \
2341 i_module, f_cppFunction, t_return, t_params, LASS_STRINGIFY(f_cppFunction), s_doc)
2342
2343/** @ingroup ModuleDefinition
2344 * Export a C++ function with type qualification for 0-parameter functions using the C++ function name with documentation.
2345 * Convenience macro that wraps PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_0() with s_functionName derived from f_cppFunction.
2346 *
2347 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*
2348 * @param f_cppFunction C++ function to export (0 parameters, name will be used as Python name)
2349 * @param t_return Return type of the function (for disambiguation)
2350 * @param s_doc Function documentation string (const char* string with static storage duration)
2351 */
2352#define PY_MODULE_FUNCTION_QUALIFIED_DOC_0( i_module, f_cppFunction, t_return, s_doc )\
2353 PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_0( \
2354 i_module, f_cppFunction, t_return, LASS_STRINGIFY(f_cppFunction), s_doc)
2355
2356/** @ingroup ModuleDefinition
2357 * Export a C++ function with type qualification for 1-parameter functions using the C++ function name with documentation.
2358 * Convenience macro that wraps PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_1() with s_functionName derived from f_cppFunction.
2359 *
2360 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
2361 * @param f_cppFunction C++ function to export (1 parameters, name will be used as Python name)
2362 * @param t_return Return type of the function (for disambiguation)
2363 * @param t_P1 Parameter types for the function (for disambiguation)
2364 * @param s_doc Function documentation string (const char* string with static storage duration)
2365 */
2366#define PY_MODULE_FUNCTION_QUALIFIED_DOC_1( i_module, f_cppFunction, t_return, t_P1, s_doc )\
2367 PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_1( \
2368 i_module, f_cppFunction, t_return, t_P1, LASS_STRINGIFY(f_cppFunction), s_doc)
2369
2370/** @ingroup ModuleDefinition
2371 * Export a C++ function with type qualification for 2-parameter functions using the C++ function name with documentation.
2372 * Convenience macro that wraps PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_2() with s_functionName derived from f_cppFunction.
2373 *
2374 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
2375 * @param f_cppFunction C++ function to export (2 parameters, name will be used as Python name)
2376 * @param t_return Return type of the function (for disambiguation)
2377 * @param t_P1, t_P2 Parameter types for the function (for disambiguation)
2378 * @param s_doc Function documentation string (const char* string with static storage duration)
2379 */
2380#define PY_MODULE_FUNCTION_QUALIFIED_DOC_2( i_module, f_cppFunction, t_return, t_P1, t_P2, s_doc )\
2381 PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_2( \
2382 i_module, f_cppFunction, t_return, t_P1, t_P2, LASS_STRINGIFY(f_cppFunction), s_doc)
2383
2384/** @ingroup ModuleDefinition
2385 * Export a C++ function with type qualification for 3-parameter functions using the C++ function name with documentation.
2386 * Convenience macro that wraps PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_3() with s_functionName derived from f_cppFunction.
2387 *
2388 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
2389 * @param f_cppFunction C++ function to export (3 parameters, name will be used as Python name)
2390 * @param t_return Return type of the function (for disambiguation)
2391 * @param t_P1, t_P2, t_P3 Parameter types for the function (for disambiguation)
2392 * @param s_doc Function documentation string (const char* string with static storage duration)
2393 */
2394#define PY_MODULE_FUNCTION_QUALIFIED_DOC_3( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, s_doc )\
2395 PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_3( \
2396 i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, LASS_STRINGIFY(f_cppFunction), s_doc)
2397
2398/** @ingroup ModuleDefinition
2399 * Export a C++ function with type qualification for 4-parameter functions using the C++ function name with documentation.
2400 * Convenience macro that wraps PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_4() with s_functionName derived from f_cppFunction.
2401 *
2402 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
2403 * @param f_cppFunction C++ function to export (4 parameters, name will be used as Python name)
2404 * @param t_return Return type of the function (for disambiguation)
2405 * @param t_P1, t_P2, t_P3, t_P4 Parameter types for the function (for disambiguation)
2406 * @param s_doc Function documentation string (const char* string with static storage duration)
2407 */
2408#define PY_MODULE_FUNCTION_QUALIFIED_DOC_4( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, s_doc )\
2409 PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_4( \
2410 i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, LASS_STRINGIFY(f_cppFunction), s_doc)
2411
2412/** @ingroup ModuleDefinition
2413 * Export a C++ function with type qualification for 5-parameter functions using the C++ function name with documentation.
2414 * Convenience macro that wraps PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_5() with s_functionName derived from f_cppFunction.
2415 *
2416 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
2417 * @param f_cppFunction C++ function to export (5 parameters, name will be used as Python name)
2418 * @param t_return Return type of the function (for disambiguation)
2419 * @param t_P1, t_P2, t_P3, t_P4, t_P5 Parameter types for the function (for disambiguation)
2420 * @param s_doc Function documentation string (const char* string with static storage duration)
2421 */
2422#define PY_MODULE_FUNCTION_QUALIFIED_DOC_5( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, s_doc )\
2423 PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_5( \
2424 i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, LASS_STRINGIFY(f_cppFunction), s_doc)
2425
2426/** @ingroup ModuleDefinition
2427 * Export a C++ function with type qualification for 6-parameter functions using the C++ function name with documentation.
2428 * Convenience macro that wraps PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_6() with s_functionName derived from f_cppFunction.
2429 *
2430 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
2431 * @param f_cppFunction C++ function to export (6 parameters, name will be used as Python name)
2432 * @param t_return Return type of the function (for disambiguation)
2433 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6 Parameter types for the function (for disambiguation)
2434 * @param s_doc Function documentation string (const char* string with static storage duration)
2435 */
2436#define PY_MODULE_FUNCTION_QUALIFIED_DOC_6( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, s_doc )\
2437 PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_6( \
2438 i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, LASS_STRINGIFY(f_cppFunction), s_doc)
2439
2440/** @ingroup ModuleDefinition
2441 * Export a C++ function with type qualification for 7-parameter functions using the C++ function name with documentation.
2442 * Convenience macro that wraps PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_7() with s_functionName derived from f_cppFunction.
2443 *
2444 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
2445 * @param f_cppFunction C++ function to export (7 parameters, name will be used as Python name)
2446 * @param t_return Return type of the function (for disambiguation)
2447 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7 Parameter types for the function (for disambiguation)
2448 * @param s_doc Function documentation string (const char* string with static storage duration)
2449 */
2450#define PY_MODULE_FUNCTION_QUALIFIED_DOC_7( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, s_doc )\
2451 PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_7( \
2452 i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, LASS_STRINGIFY(f_cppFunction), s_doc)
2453
2454/** @ingroup ModuleDefinition
2455 * Export a C++ function with type qualification for 8-parameter functions using the C++ function name with documentation.
2456 * Convenience macro that wraps PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_8() with s_functionName derived from f_cppFunction.
2457 *
2458 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
2459 * @param f_cppFunction C++ function to export (8 parameters, name will be used as Python name)
2460 * @param t_return Return type of the function (for disambiguation)
2461 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8 Parameter types for the function (for disambiguation)
2462 * @param s_doc Function documentation string (const char* string with static storage duration)
2463 */
2464#define PY_MODULE_FUNCTION_QUALIFIED_DOC_8( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, s_doc )\
2465 PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_8( \
2466 i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, LASS_STRINGIFY(f_cppFunction), s_doc)
2467
2468/** @ingroup ModuleDefinition
2469 * Export a C++ function with type qualification for 9-parameter functions using the C++ function name with documentation.
2470 * Convenience macro that wraps PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_9() with s_functionName derived from f_cppFunction.
2471 *
2472 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
2473 * @param f_cppFunction C++ function to export (9 parameters, name will be used as Python name)
2474 * @param t_return Return type of the function (for disambiguation)
2475 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9 Parameter types for the function (for disambiguation)
2476 * @param s_doc Function documentation string (const char* string with static storage duration)
2477 */
2478#define PY_MODULE_FUNCTION_QUALIFIED_DOC_9( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, s_doc )\
2479 PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_9( \
2480 i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, LASS_STRINGIFY(f_cppFunction), s_doc)
2481
2482/** @ingroup ModuleDefinition
2483 * Export a C++ function with type qualification for 10-parameter functions using the C++ function name with documentation.
2484 * Convenience macro that wraps PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_10() with s_functionName derived from f_cppFunction.
2485 *
2486 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
2487 * @param f_cppFunction C++ function to export (10 parameters, name will be used as Python name)
2488 * @param t_return Return type of the function (for disambiguation)
2489 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10 Parameter types for the function (for disambiguation)
2490 * @param s_doc Function documentation string (const char* string with static storage duration)
2491 */
2492#define PY_MODULE_FUNCTION_QUALIFIED_DOC_10( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, s_doc )\
2493 PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_10( \
2494 i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, LASS_STRINGIFY(f_cppFunction), s_doc)
2495
2496/** @ingroup ModuleDefinition
2497 * Export a C++ function with type qualification for 11-parameter functions using the C++ function name with documentation.
2498 * Convenience macro that wraps PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_11() with s_functionName derived from f_cppFunction.
2499 *
2500 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
2501 * @param f_cppFunction C++ function to export (11 parameters, name will be used as Python name)
2502 * @param t_return Return type of the function (for disambiguation)
2503 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11 Parameter types for the function (for disambiguation)
2504 * @param s_doc Function documentation string (const char* string with static storage duration)
2505 */
2506#define PY_MODULE_FUNCTION_QUALIFIED_DOC_11( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, s_doc )\
2507 PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_11( \
2508 i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, LASS_STRINGIFY(f_cppFunction), s_doc)
2509
2510/** @ingroup ModuleDefinition
2511 * Export a C++ function with type qualification for 12-parameter functions using the C++ function name with documentation.
2512 * Convenience macro that wraps PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_12() with s_functionName derived from f_cppFunction.
2513 *
2514 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
2515 * @param f_cppFunction C++ function to export (12 parameters, name will be used as Python name)
2516 * @param t_return Return type of the function (for disambiguation)
2517 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12 Parameter types for the function (for disambiguation)
2518 * @param s_doc Function documentation string (const char* string with static storage duration)
2519 */
2520#define PY_MODULE_FUNCTION_QUALIFIED_DOC_12( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, s_doc )\
2521 PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_12( \
2522 i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, LASS_STRINGIFY(f_cppFunction), s_doc)
2523
2524/** @ingroup ModuleDefinition
2525 * Export a C++ function with type qualification for 13-parameter functions using the C++ function name with documentation.
2526 * Convenience macro that wraps PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_13() with s_functionName derived from f_cppFunction.
2527 *
2528 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
2529 * @param f_cppFunction C++ function to export (13 parameters, name will be used as Python name)
2530 * @param t_return Return type of the function (for disambiguation)
2531 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13 Parameter types for the function (for disambiguation)
2532 * @param s_doc Function documentation string (const char* string with static storage duration)
2533 */
2534#define PY_MODULE_FUNCTION_QUALIFIED_DOC_13( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, s_doc )\
2535 PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_13( \
2536 i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, LASS_STRINGIFY(f_cppFunction), s_doc)
2537
2538/** @ingroup ModuleDefinition
2539 * Export a C++ function with type qualification for 14-parameter functions using the C++ function name with documentation.
2540 * Convenience macro that wraps PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_14() with s_functionName derived from f_cppFunction.
2541 *
2542 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
2543 * @param f_cppFunction C++ function to export (14 parameters, name will be used as Python name)
2544 * @param t_return Return type of the function (for disambiguation)
2545 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14 Parameter types for the function (for disambiguation)
2546 * @param s_doc Function documentation string (const char* string with static storage duration)
2547 */
2548#define PY_MODULE_FUNCTION_QUALIFIED_DOC_14( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, s_doc )\
2549 PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_14( \
2550 i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, LASS_STRINGIFY(f_cppFunction), s_doc)
2551
2552/** @ingroup ModuleDefinition
2553 * Export a C++ function with type qualification for 15-parameter functions using the C++ function name with documentation.
2554 * Convenience macro that wraps PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_15() with s_functionName derived from f_cppFunction.
2555 *
2556 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*()
2557 * @param f_cppFunction C++ function to export (15 parameters, name will be used as Python name)
2558 * @param t_return Return type of the function (for disambiguation)
2559 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15 Parameter types for the function (for disambiguation)
2560 * @param s_doc Function documentation string (const char* string with static storage duration)
2561 */
2562#define PY_MODULE_FUNCTION_QUALIFIED_DOC_15( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15, s_doc )\
2563 PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC_15( \
2564 i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15, LASS_STRINGIFY(f_cppFunction), s_doc)
2565
2566
2567/** @ingroup ModuleDefinition
2568 * Export a C++ function with type qualification using the C++ function name (no documentation).
2569 * Convenience macro that wraps PY_MODULE_FUNCTION_QUALIFIED_NAME_DOC() with defaults.
2570 *
2571 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*
2572 * @param f_cppFunction C++ function to export (can be overloaded, name will be used as Python name)
2573 * @param t_return Return type of the function (for disambiguation)
2574 * @param t_params Parameter types as lass::meta::TypeTuple (for disambiguation)
2575 */
2576#define PY_MODULE_FUNCTION_QUALIFIED( i_module, f_cppFunction, t_return, t_params )\
2577 PY_MODULE_FUNCTION_QUALIFIED_DOC( i_module, f_cppFunction, t_return, t_params, 0 )
2578
2579/** @ingroup ModuleDefinition
2580 * Export a C++ function with type qualification for 0-parameter functions using the C++ function name (no documentation).
2581 * Convenience macro that wraps PY_MODULE_FUNCTION_QUALIFIED_DOC_0() with s_doc = nullptr.
2582 *
2583 * @param i_module Module identifier declared by PY_DECLARE_MODULE_*
2584 * @param f_cppFunction C++ function to export (0 parameters, name will be used as Python name)
2585 * @param t_return Return type of the function (for disambiguation)
2586 */
2587#define PY_MODULE_FUNCTION_QUALIFIED_0( i_module, f_cppFunction, t_return )\
2588 PY_MODULE_FUNCTION_QUALIFIED_DOC_0( i_module, f_cppFunction, t_return, 0 )
2589
2590/** @ingroup ModuleDefinition
2591 * Export a C++ function with type qualification for 1-parameter functions using the C++ function name (no documentation).
2592 * Convenience macro that wraps PY_MODULE_FUNCTION_QUALIFIED_DOC_1() with s_doc = nullptr.
2593 */
2594#define PY_MODULE_FUNCTION_QUALIFIED_1( i_module, f_cppFunction, t_return, t_P1 )\
2595 PY_MODULE_FUNCTION_QUALIFIED_DOC_1( i_module, f_cppFunction, t_return, t_P1, 0 )
2596
2597/** @ingroup ModuleDefinition
2598 * Export a C++ function with type qualification for 2-parameter functions using the C++ function name (no documentation).
2599 * Convenience macro that wraps PY_MODULE_FUNCTION_QUALIFIED_DOC_2() with s_doc = nullptr.
2600 */
2601#define PY_MODULE_FUNCTION_QUALIFIED_2( i_module, f_cppFunction, t_return, t_P1, t_P2 )\
2602 PY_MODULE_FUNCTION_QUALIFIED_DOC_2( i_module, f_cppFunction, t_return, t_P1, t_P2, 0 )
2603
2604/** @ingroup ModuleDefinition
2605 * Export a C++ function with type qualification for 3-parameter functions using the C++ function name (no documentation).
2606 * Convenience macro that wraps PY_MODULE_FUNCTION_QUALIFIED_DOC_3() with s_doc = nullptr.
2607 */
2608#define PY_MODULE_FUNCTION_QUALIFIED_3( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3 )\
2609 PY_MODULE_FUNCTION_QUALIFIED_DOC_3( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, 0 )
2610
2611/** @ingroup ModuleDefinition
2612 * Export a C++ function with type qualification for 4-parameter functions using the C++ function name (no documentation).
2613 * Convenience macro that wraps PY_MODULE_FUNCTION_QUALIFIED_DOC_4() with s_doc = nullptr.
2614 */
2615#define PY_MODULE_FUNCTION_QUALIFIED_4( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4 )\
2616 PY_MODULE_FUNCTION_QUALIFIED_DOC_4( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, 0 )
2617
2618/** @ingroup ModuleDefinition
2619 * Export a C++ function with type qualification for 5-parameter functions using the C++ function name (no documentation).
2620 * Convenience macro that wraps PY_MODULE_FUNCTION_QUALIFIED_DOC_5() with s_doc = nullptr.
2621 */
2622#define PY_MODULE_FUNCTION_QUALIFIED_5( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5 )\
2623 PY_MODULE_FUNCTION_QUALIFIED_DOC_5( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, 0 )
2624
2625/** @ingroup ModuleDefinition
2626 * Export a C++ function with type qualification for 6-parameter functions using the C++ function name (no documentation).
2627 * Convenience macro that wraps PY_MODULE_FUNCTION_QUALIFIED_DOC_6() with s_doc = nullptr.
2628 */
2629#define PY_MODULE_FUNCTION_QUALIFIED_6( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6 )\
2630 PY_MODULE_FUNCTION_QUALIFIED_DOC_6( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, 0 )
2631
2632/** @ingroup ModuleDefinition
2633 * Export a C++ function with type qualification for 7-parameter functions using the C++ function name (no documentation).
2634 * Convenience macro that wraps PY_MODULE_FUNCTION_QUALIFIED_DOC_7() with s_doc = nullptr.
2635 */
2636#define PY_MODULE_FUNCTION_QUALIFIED_7( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7 )\
2637 PY_MODULE_FUNCTION_QUALIFIED_DOC_7( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, 0 )
2638
2639/** @ingroup ModuleDefinition
2640 * Export a C++ function with type qualification for 8-parameter functions using the C++ function name (no documentation).
2641 * Convenience macro that wraps PY_MODULE_FUNCTION_QUALIFIED_DOC_8() with s_doc = nullptr.
2642 */
2643#define PY_MODULE_FUNCTION_QUALIFIED_8( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8 )\
2644 PY_MODULE_FUNCTION_QUALIFIED_DOC_8( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, 0 )
2645
2646/** @ingroup ModuleDefinition
2647 * Export a C++ function with type qualification for 9-parameter functions using the C++ function name (no documentation).
2648 * Convenience macro that wraps PY_MODULE_FUNCTION_QUALIFIED_DOC_9() with s_doc = nullptr.
2649 */
2650#define PY_MODULE_FUNCTION_QUALIFIED_9( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9 )\
2651 PY_MODULE_FUNCTION_QUALIFIED_DOC_9( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, 0 )
2652
2653/** @ingroup ModuleDefinition
2654 * Export a C++ function with type qualification for 10-parameter functions using the C++ function name (no documentation).
2655 * Convenience macro that wraps PY_MODULE_FUNCTION_QUALIFIED_DOC_10() with s_doc = nullptr.
2656 */
2657#define PY_MODULE_FUNCTION_QUALIFIED_10( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10 )\
2658 PY_MODULE_FUNCTION_QUALIFIED_DOC_10( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, 0 )
2659
2660/** @ingroup ModuleDefinition
2661 * Export a C++ function with type qualification for 11-parameter functions using the C++ function name (no documentation).
2662 * Convenience macro that wraps PY_MODULE_FUNCTION_QUALIFIED_DOC_11() with s_doc = nullptr.
2663 */
2664#define PY_MODULE_FUNCTION_QUALIFIED_11( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11 )\
2665 PY_MODULE_FUNCTION_QUALIFIED_DOC_11( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, 0 )
2666
2667/** @ingroup ModuleDefinition
2668 * Export a C++ function with type qualification for 12-parameter functions using the C++ function name (no documentation).
2669 * Convenience macro that wraps PY_MODULE_FUNCTION_QUALIFIED_DOC_12() with s_doc = nullptr.
2670 */
2671#define PY_MODULE_FUNCTION_QUALIFIED_12( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12 )\
2672 PY_MODULE_FUNCTION_QUALIFIED_DOC_12( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, 0 )
2673
2674/** @ingroup ModuleDefinition
2675 * Export a C++ function with type qualification for 13-parameter functions using the C++ function name (no documentation).
2676 * Convenience macro that wraps PY_MODULE_FUNCTION_QUALIFIED_DOC_13() with s_doc = nullptr.
2677 */
2678#define PY_MODULE_FUNCTION_QUALIFIED_13( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13 )\
2679 PY_MODULE_FUNCTION_QUALIFIED_DOC_13( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, 0 )
2680
2681/** @ingroup ModuleDefinition
2682 * Export a C++ function with type qualification for 14-parameter functions using the C++ function name (no documentation).
2683 * Convenience macro that wraps PY_MODULE_FUNCTION_QUALIFIED_DOC_14() with s_doc = nullptr.
2684 */
2685#define PY_MODULE_FUNCTION_QUALIFIED_14( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14 )\
2686 PY_MODULE_FUNCTION_QUALIFIED_DOC_14( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, 0 )
2687
2688/** @ingroup ModuleDefinition
2689 * Export a C++ function with type qualification for 15-parameter functions using the C++ function name (no documentation).
2690 * Convenience macro that wraps PY_MODULE_FUNCTION_QUALIFIED_DOC_15() with s_doc = nullptr.
2691 */
2692#define PY_MODULE_FUNCTION_QUALIFIED_15( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15 )\
2693 PY_MODULE_FUNCTION_QUALIFIED_DOC_15( i_module, f_cppFunction, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15, 0 )
2694
2695
2696/** @} */
2697
2698
2699
2700// --- classes -------------------------------------------------------------------------------------
2701
2702/** @addtogroup ClassDefinition
2703 * @name Class Declaration & Setup
2704 *
2705 * Macros to declare and configure Python classes from C++ types.
2706 *
2707 * These macros create the internal class definition objects that aggregate all the information
2708 * needed to generate a Python type. Every C++ class that needs to be exposed to Python
2709 * must be declared using one of these macros.
2710 *
2711 * LASS supports two approaches for exporting C++ classes to Python:
2712 *
2713 * 1. **Native Python classes**: C++ classes that directly inherit from PyObjectPlus
2714 * and are designed to be Python-aware from the start.
2715 *
2716 * 2. **Shadow classes**: Wrapper classes created for existing native C++ types
2717 * using the shadow system (see PY_SHADOW_CLASS macros). The shadow class inherits from
2718 * PyObjectPlus and wraps the original C++ type.
2719 *
2720 * In both cases, the class parameter in these declaration macros refers to the
2721 * Python binding class (either PyObjectPlus-derived or shadow wrapper), never
2722 * the underlying native C++ type being shadowed.
2723 *
2724 * All Python classes must use the PY_HEADER macro in their declaration and be declared
2725 * in source files only, never in headers, to avoid multiple definition errors.
2726 *
2727 * **Native Python Class Usage:**
2728 * ```cpp
2729 * // In header file (MyClass.h):
2730 * class MyClass: public PyObjectPlus
2731 * {
2732 * PY_HEADER(PyObjectPlus)
2733 * public:
2734 * MyClass();
2735 * void someMethod();
2736 * };
2737 *
2738 * // In source file (MyClass.cpp):
2739 * PY_DECLARE_CLASS_NAME_DOC(MyClass, "MyClass", "A sample class")
2740 * // ... add methods, constructors, properties etc.
2741 * ```
2742 *
2743 * **Shadow Class Usage:**
2744 * ```cpp
2745 * // Existing non-Python-aware C++ class:
2746 * class LegacyClass
2747 * {
2748 * public:
2749 * void doSomething();
2750 * };
2751 *
2752 * // Shadow wrapper class:
2753 * PY_SHADOW_CLASS(LASS_DLL_EXPORT, PyShadowLegacyClass, LegacyClass)
2754 *
2755 * // Declaration (note: we declare the shadow class, not LegacyClass):
2756 * PY_DECLARE_CLASS_NAME_DOC(PyShadowLegacyClass, "LegacyClass", "Legacy class wrapper")
2757 * ```
2758 *
2759 * @{
2760 */
2761
2762/** Declare a Python class with full control over name and documentation.
2763 *
2764 * This is the primary class declaration macro that creates the internal ClassDefinition
2765 * object for a C++ class. All other class declaration macros ultimately call this one.
2766 * The class definition collects constructors, methods, properties, and other elements
2767 * that will be added later using PY_CLASS_* macros.
2768 *
2769 * @param t_cppClass Python binding class type. This must be either:
2770 * - A class directly inheriting from PyObjectPlus, or
2771 * - A shadow class created with PY_SHADOW_CLASS macros.
2772 * Never pass the underlying native C++ shadowed type.
2773 * @param s_className Python class name as string literal
2774 * @param s_doc Class documentation string (or nullptr for no doc)
2775 *
2776 * @remark This macro must be used exactly once per class and only in source files, never in headers!
2777 *
2778 * **Native Python Class Example:**
2779 * ```cpp
2780 * PY_DECLARE_CLASS_NAME_DOC(MyClass, "MyClass", "A sample native Python class")
2781 * ```
2782 *
2783 * **Shadow Class Example:**
2784 * ```cpp
2785 * PY_DECLARE_CLASS_NAME_DOC(PyShadowLegacy, "LegacyClass", "Wrapper for LegacyClass")
2786 * ```
2787 *
2788 * @ingroup ClassDefinition
2789 */
2790#define PY_DECLARE_CLASS_NAME_DOC( t_cppClass, s_className, s_doc ) \
2791 ::lass::python::impl::ClassDefinition t_cppClass ::_lassPyClassDef( \
2792 s_className, s_doc, sizeof(t_cppClass), \
2793 ::lass::python::impl::richCompareDispatcher< t_cppClass >,\
2794 & t_cppClass ::_lassPyParentType::_lassPyClassDef, \
2795 & t_cppClass ::_lassPyClassRegisterHook);
2796
2797/** Declare a Python class with custom name but no documentation.
2798 *
2799 * Convenience wrapper around PY_DECLARE_CLASS_NAME_DOC that omits the documentation string.
2800 * Use this when you want to control the Python class name but don't need documentation.
2801 *
2802 * @param t_cppClass Python binding class type (PyObjectPlus-derived or shadow class)
2803 * @param s_className Python class name as string literal
2804 *
2805 * **Example:**
2806 * ```cpp
2807 * PY_DECLARE_CLASS_NAME(MyClass, "MyClass")
2808 * ```
2809 *
2810 * @ingroup ClassDefinition
2811 */
2812#define PY_DECLARE_CLASS_NAME( t_cppClass, s_className )\
2813 PY_DECLARE_CLASS_NAME_DOC( t_cppClass, s_className, 0 )
2814
2815/** Declare a Python class with automatic name and custom documentation.
2816 *
2817 * Convenience wrapper that uses the C++ class name as the Python class name
2818 * but allows custom documentation. The class name is automatically stringified.
2819 *
2820 * @param i_cppClass Python-exportable C++ class identifier (unqualified name)
2821 * @param s_doc Class documentation string
2822 *
2823 * **Example:**
2824 * ```cpp
2825 * PY_DECLARE_CLASS_DOC(MyClass, "A sample class for demonstration")
2826 * // Creates Python class named "MyClass"
2827 * ```
2828 *
2829 * @ingroup ClassDefinition
2830 */
2831#define PY_DECLARE_CLASS_DOC( i_cppClass, s_doc ) \
2832 PY_DECLARE_CLASS_NAME_DOC( i_cppClass, LASS_STRINGIFY(i_cppClass), s_doc )
2833
2834/** Declare a Python class with automatic name and no documentation.
2835 *
2836 * The simplest class declaration macro. Uses the C++ class name as the Python class name
2837 * and provides no documentation string. Most commonly used for basic class exports.
2838 *
2839 * @param i_cppClass Python binding class identifier (unqualified name)
2840 *
2841 * **Example:**
2842 * ```cpp
2843 * PY_DECLARE_CLASS(MyClass)
2844 * // Creates Python class named "MyClass" with no documentation
2845 * ```
2846 *
2847 * @ingroup ClassDefinition
2848 */
2849#define PY_DECLARE_CLASS( i_cppClass ) \
2850 PY_DECLARE_CLASS_NAME_DOC( i_cppClass, LASS_STRINGIFY(i_cppClass), 0 )
2851
2852/** Legacy class declaration macro.
2853 *
2854 * @param t_cppClass Python binding class type
2855 * @param s_className Python class name
2856 * @param i_uniqueClassIdentifier Unused parameter (legacy)
2857 *
2858 * @deprecated This macro is deprecated and should not be used in new code. Use PY_DECLARE_CLASS_NAME_DOC instead.
2859 *
2860 * @ingroup ClassDefinition
2861 */
2862#define PY_DECLARE_CLASS_EX( t_cppClass, s_className, i_uniqueClassIdentifier )\
2863 PY_DECLARE_CLASS_NAME_DOC( t_cppClass, s_className, 0 )
2864
2865/** @} */
2866
2867
2868
2869/** @addtogroup ModuleDefinition
2870 * @name Class Integration
2871 *
2872 * Macros to add Python classes to modules.
2873 *
2874 * These macros integrate class definitions with module definitions, making the classes
2875 * available as types within the module namespace. Classes must first be declared using
2876 * PY_DECLARE_CLASS_* macros before they can be added to modules.
2877 *
2878 * @{
2879 */
2880
2881/** Inject a class into a module at runtime (deprecated).
2882 *
2883 * This is the legacy runtime approach for adding classes to modules.
2884 * Use PY_MODULE_CLASS instead for compile-time registration.
2885 *
2886 * @param t_cppClass Python binding class type that has been declared with PY_DECLARE_CLASS_*
2887 * @param i_module Module object identifier to inject the class into
2888 * @param s_doc Optional class documentation string (or nullptr)
2889 *
2890 * @deprecated Use PY_MODULE_CLASS instead, and set class doc with PY_DECLARE_CLASS_DOC
2891 *
2892 * @remark This is executed at runtime, so it must be called from main() or a function called by main().
2893 *
2894 * @ingroup ModuleDefinition
2895 */
2896#define PY_INJECT_CLASS_IN_MODULE( t_cppClass, i_module, s_doc ) \
2897 t_cppClass::_lassPyClassDef.setDocIfNotNull(s_doc);\
2898 i_module.injectClass(t_cppClass::_lassPyClassDef);
2899
2900/** Add a Python class to a module.
2901 *
2902 * Registers a class definition to be included in the module when it is created.
2903 * The class must have been declared with PY_DECLARE_CLASS_* macros.
2904 * This is executed before main(), so the class is available when the module is created.
2905 *
2906 * @param i_module Module identifier declared by PY_DECLARE_MODULE_* (must be unscoped identifier for token concatenation)
2907 * @param t_cppClass Python binding class type that has been declared with PY_DECLARE_CLASS_*
2908 *
2909 * **Example:**
2910 * ```cpp
2911 * PY_DECLARE_CLASS_NAME_DOC(MyClass, "MyClass", "Sample class")
2912 * PY_MODULE_CLASS(mymodule, MyClass)
2913 * ```
2914 *
2915 * @ingroup ModuleDefinition
2916 */
2917#define PY_MODULE_CLASS( i_module, t_cppClass ) \
2918 LASS_EXECUTE_BEFORE_MAIN_EX\
2919 ( LASS_CONCATENATE( lassExecutePyModuleClass_, i_module ),\
2920 i_module.addClass( t_cppClass ::_lassPyClassDef); \
2921 )
2922
2923/** @} */
2924
2925
2926
2927/** @addtogroup ClassDefinition
2928 * @name Static Constants
2929 *
2930 * Macros to export static constant values as class attributes.
2931 *
2932 * These macros allow you to expose compile-time constant values as static attributes
2933 * of Python classes. The values are converted to Python objects using PyExportTraits
2934 * and become accessible as class-level attributes in Python.
2935 *
2936 * @{
2937 */
2938
2939/** Export a static constant value as a class attribute.
2940 *
2941 * Adds a static constant to a Python class that can be accessed as a class attribute.
2942 * The constant value is converted to a Python object at module initialization time
2943 * and becomes accessible via the class in Python.
2944 *
2945 * @param i_cppClass Python binding class identifier (must be declared with PY_DECLARE_CLASS_*)
2946 * @param s_name Name of the constant as it will appear in Python (string literal)
2947 * @param v_value The constant value to export (must be convertible via PyExportTraits::build)
2948 *
2949 * **Example:**
2950 * ```cpp
2951 * class MyClass: public PyObjectPlus { ... };
2952 * PY_DECLARE_CLASS(MyClass)
2953 * PY_CLASS_STATIC_CONST(MyClass, "PI", 3.14159)
2954 * PY_CLASS_STATIC_CONST(MyClass, "MAX_SIZE", 1024)
2955 *
2956 * // In Python:
2957 * // MyClass.PI == 3.14159
2958 * // MyClass.MAX_SIZE == 1024
2959 * ```
2960 *
2961 * @ingroup ClassDefinition
2962 */
2963#define PY_CLASS_STATIC_CONST( i_cppClass, s_name, v_value )\
2964 LASS_EXECUTE_BEFORE_MAIN_EX\
2965 ( LASS_CONCATENATE( lassExecutePyClassStaticConst, i_cppClass ),\
2966 i_cppClass ::_lassPyClassDef.addStaticConst(s_name, v_value);\
2967 )
2968
2969/** @} */
2970
2971
2972
2973// --- inner class ---------------------------------------------------------------------------------
2974
2975
2976
2977/** @addtogroup ClassDefinition
2978 * @name Inner Classes
2979 *
2980 * Macros for declaring inner classes (nested classes) within Python-exported classes.
2981 * These macros establish hierarchical class relationships where inner classes become
2982 * attributes of their outer class in Python.
2983 *
2984 * @note Inner classes must be declared with PY_DECLARE_CLASS* macros before using these macros.
2985 *
2986 * Usage pattern:
2987 * ```cpp
2988 * // Declare both classes first
2989 * PY_DECLARE_CLASS_DOC(Outer, "Outer class")
2990 * PY_DECLARE_CLASS_DOC(Inner, "Inner class")
2991 *
2992 * // Establish inner class relationship
2993 * PY_CLASS_INNER_CLASS(Outer, Inner)
2994 * ```
2995 *
2996 * @{
2997 */
2998
2999/** @ingroup ClassDefinition
3000 * @brief Exports an inner class with full customization of name, documentation, and symbol suffix.
3001 *
3002 * This is the most flexible inner class macro, allowing complete control over all parameters.
3003 * The inner class becomes accessible as an attribute of the outer class in Python.
3004 *
3005 * @param t_outerCppClass C++ class that will contain the inner class
3006 * @param t_innerCppClass C++ class to be exported as inner class
3007 * @param s_name Python name for the inner class (null-terminated C string literal)
3008 * @param s_doc Python docstring for the inner class (null-terminated C string literal, may be nullptr)
3009 * @param i_uniqueSuffix Unique C++ identifier to generate unique symbols for the registration code.
3010 * This prevents symbol collisions when multiple inner class exports exist.
3011 *
3012 * ```cpp
3013 * // Export Inner as nested class of Outer with custom name
3014 * PY_CLASS_INNER_CLASS_EX(Outer, Inner, "CustomInner", "Inner class documentation", MyUniqueSuffix)
3015 * // Python: outer_instance.CustomInner
3016 * ```
3017 */
3018#define PY_CLASS_INNER_CLASS_EX( t_outerCppClass, t_innerCppClass, s_name, s_doc, i_uniqueSuffix )\
3019 LASS_EXECUTE_BEFORE_MAIN_EX( LASS_CONCATENATE(lassPythonImplExecuteBeforeMain_, i_uniqueSuffix),\
3020 t_innerCppClass::_lassPyClassDef.setDocIfNotNull(s_doc);\
3021 t_outerCppClass::_lassPyClassDef.addInnerClass(t_innerCppClass::_lassPyClassDef);\
3022 )
3023
3024/** @ingroup ClassDefinition
3025 * @brief Exports an inner class with custom name and documentation.
3026 *
3027 * Convenience macro that automatically generates a unique suffix from the class names.
3028 * Provides full control over the Python name and documentation string.
3029 *
3030 * @param i_outerCppClass C++ class that will contain the inner class
3031 * @param i_innerCppClass C++ class to be exported as inner class
3032 * @param s_name Python name for the inner class (null-terminated C string literal)
3033 * @param s_doc Python docstring for the inner class (null-terminated C string literal, may be nullptr)
3034 *
3035 * @deprecated You should be setting the doc when declaring the innerclass ...
3036 *
3037 * ```cpp
3038 * PY_CLASS_INNER_CLASS_NAME_DOC(Outer, Inner, "NestedClass", "Documentation")
3039 * // Python: outer_instance.NestedClass
3040 * ```
3041 */
3042#define PY_CLASS_INNER_CLASS_NAME_DOC( i_outerCppClass, i_innerCppClass, s_name, s_doc )\
3043 PY_CLASS_INNER_CLASS_EX( i_outerCppClass, i_innerCppClass, s_name, s_doc,\
3044 LASS_CONCATENATE(i_outerCppClass, i_innerCppClass) )
3045
3046/** @ingroup ClassDefinition
3047 * @brief Exports an inner class with custom name but no documentation.
3048 *
3049 * Convenience macro for cases where you want to customize the Python name
3050 * but don't need to provide additional documentation.
3051 *
3052 * @param i_outerCppClass C++ class that will contain the inner class
3053 * @param i_innerCppClass C++ class to be exported as inner class
3054 * @param s_name Python name for the inner class (null-terminated C string literal)
3055 *
3056 * ```cpp
3057 * PY_CLASS_INNER_CLASS_NAME(Outer, Inner, "CustomName")
3058 * // Python: outer_instance.CustomName
3059 * ```
3060 */
3061#define PY_CLASS_INNER_CLASS_NAME( i_outerCppClass, i_innerCppClass, s_name)\
3062 PY_CLASS_INNER_CLASS_NAME_DOC( i_outerCppClass, i_innerCppClass, s_name, 0)
3063
3064/** @ingroup ClassDefinition
3065 * @brief Exports an inner class with default name and custom documentation.
3066 *
3067 * The inner class will use its C++ class name as the Python name,
3068 * but allows you to provide custom documentation.
3069 *
3070 * @param i_outerCppClass C++ class that will contain the inner class
3071 * @param i_innerCppClass C++ class to be exported as inner class
3072 * @param s_doc Python docstring for the inner class (null-terminated C string literal)
3073 *
3074 * @deprecated You should be setting the doc when declaring the innerclass ...
3075 *
3076 * ```cpp
3077 * PY_CLASS_INNER_CLASS_DOC(Outer, Inner, "Custom documentation")
3078 * // Python: outer_instance.Inner (with custom doc)
3079 * ```
3080 */
3081#define PY_CLASS_INNER_CLASS_DOC( i_outerCppClass, i_innerCppClass, s_doc )\
3082 PY_CLASS_INNER_CLASS_NAME_DOC( i_outerCppClass, i_innerCppClass, LASS_STRINGIFY(i_innerCppClass), s_doc)
3083
3084/** @ingroup ClassDefinition
3085 * @brief Exports an inner class with default name and no documentation.
3086 *
3087 * The simplest inner class export macro. Uses the C++ class name as the Python name
3088 * and doesn't provide additional documentation beyond what was set during class declaration.
3089 *
3090 * @param i_outerCppClass C++ class that will contain the inner class
3091 * @param i_innerCppClass C++ class to be exported as inner class
3092 *
3093 * ```cpp
3094 * PY_CLASS_INNER_CLASS(Outer, Inner)
3095 * // Python: outer_instance.Inner
3096 * ```
3097 */
3098#define PY_CLASS_INNER_CLASS( i_outerCppClass, i_innerCppClass)\
3099 PY_CLASS_INNER_CLASS_NAME_DOC( i_outerCppClass, i_innerCppClass, LASS_STRINGIFY(i_innerCppClass), 0)
3100
3101/** @} */
3102
3103
3104
3105// --- methods -------------------------------------------------------------------------------------
3106
3107/** @addtogroup ClassDefinition
3108 * @name Methods
3109 *
3110 * Macros for exporting C++ class methods to Python with automatic type deduction
3111 * and wrapper generation. These macros handle member function calls, overloading,
3112 * and method documentation.
3113 *
3114 * @note Overload resolution uses first-fit, not best-fit like C++. The first exported
3115 * overload that matches the arguments will be called.
3116 *
3117 * @note The documentation of an overloaded Python method will be the s_doc of the
3118 * first exported overload.
3119 *
3120 * Usage pattern:
3121 * ```cpp
3122 * // Declare the class first
3123 * PY_DECLARE_CLASS_DOC(Foo, "My class")
3124 *
3125 * // Export methods - simple case
3126 * PY_CLASS_METHOD(Foo, someMethod)
3127 *
3128 * // Export overloaded methods with same Python name
3129 * PY_CLASS_METHOD_EX(Foo, barA, "bar", nullptr, foo_bar_a)
3130 * PY_CLASS_METHOD_EX(Foo, barB, "bar", nullptr, foo_bar_b)
3131 * ```
3132 *
3133 * @{
3134 */
3135
3136/** @ingroup ClassDefinition
3137 * @brief Export a C++ method that returns raw PyObject* to Python.
3138 *
3139 * Use this macro when you need a method that returns Python-specific objects
3140 * or handles Python types directly. The C++ method must return PyObject* and
3141 * accept PyObject* arguments directly.
3142 *
3143 * @param i_cppClass C++ class containing the method
3144 * @param i_cppMethod C++ method name to export (must return PyObject* and take PyObject* args)
3145 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
3146 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
3147 *
3148 * @deprecated Use PY_CLASS_METHOD_EX() instead for automatic wrapper generation
3149 *
3150 * ```cpp
3151 * class Foo {
3152 * PY_HEADER(python::PyObjectPlus)
3153 * public:
3154 * PyObject* specialPythonMethod(PyObject* args); // Returns PyObject* directly
3155 * };
3156 *
3157 * PY_CLASS_PY_METHOD_EX(Foo, specialPythonMethod, "special", nullptr)
3158 * // Python: foo_instance.special(args)
3159 * ```
3160 */
3161#define PY_CLASS_PY_METHOD_EX( i_cppClass, i_cppMethod, s_methodName, s_doc )\
3162 static ::lass::python::impl::OverloadLink LASS_CONCATENATE_3( staticDispatchOverloadChain, i_cppClass, i_cppMethod);\
3163 extern "C" LASS_DLL_LOCAL PyObject* LASS_CONCATENATE_3( staticDispatch, i_cppClass, i_cppMethod) ( PyObject* iObject, PyObject* iArgs )\
3164 {\
3165 if (!PyType_IsSubtype(iObject->ob_type , i_cppClass::_lassPyClassDef.type() ))\
3166 {\
3167 PyErr_Format(PyExc_TypeError,"PyObject not castable to %s", i_cppClass::_lassPyClassDef.name());\
3168 return 0;\
3169 }\
3170 i_cppClass* object = static_cast<i_cppClass*>(iObject);\
3171 return object->i_cppMethod( iArgs );\
3172 }\
3173 LASS_EXECUTE_BEFORE_MAIN_EX\
3174 ( LASS_CONCATENATE_3( lassExecutePyClassPyMethod_, i_cppClass, i_cppMethod ),\
3175 i_cppClass::_lassPyClassDef.addMethod(\
3176 s_methodName, s_doc, \
3177 LASS_CONCATENATE_3( staticDispatch, i_cppClass, i_cppMethod),\
3178 LASS_CONCATENATE_3( staticDispatchOverloadChain, i_cppClass, i_cppMethod));\
3179 )
3180
3181
3182/** @ingroup ClassDefinition
3183 * @brief Export a C++ method to Python with full control over overloading.
3184 *
3185 * This is the most flexible method export macro, allowing manual dispatcher naming
3186 * for creating overloaded Python methods. Multiple C++ methods can be exported
3187 * with the same Python name to create overloaded methods.
3188 *
3189 * @param t_cppClass C++ class containing the method
3190 * @param i_cppMethod C++ method name to export
3191 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
3192 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
3193 * @param i_dispatcher Unique identifier for the generated dispatcher function
3194 *
3195 * Use this macro to export methods to Python. You can create overloaded Python methods
3196 * by exporting multiple C++ methods with the same s_methodName.
3197 *
3198 * ```cpp
3199 * class Foo {
3200 * PY_HEADER(python::PyObjectPlus)
3201 * public:
3202 * void barA(int a);
3203 * void barB(const std::string& b) const;
3204 * Foo operator+(const Foo& other) const;
3205 * };
3206 *
3207 * PY_DECLARE_CLASS(Foo)
3208 *
3209 * // Regular method export with custom name
3210 * PY_CLASS_METHOD_EX(Foo, barA, "bar", nullptr, foo_bar_a)
3211 * PY_CLASS_METHOD_EX(Foo, barB, "bar", nullptr, foo_bar_b)
3212 *
3213 * // Special method export using lass::python::methods constants
3214 * PY_CLASS_METHOD_EX(Foo, operator+, lass::python::methods::_add_, nullptr, foo_add)
3215 *
3216 * // Python: foo_instance.bar(42) or foo_instance.bar("hello")
3217 * // Python: result = foo_a + foo_b (calls operator+)
3218 * ```
3219 *
3220 * @note For most special methods (like `__add__`, `__str__`, etc.), you **must** use the special
3221 * method names defined in lass::python::methods namespace to ensure correct behavior.
3222 * Regular string names like `"__add__"` will not work for these special methods.
3223 */
3224#define PY_CLASS_METHOD_EX(t_cppClass, i_cppMethod, s_methodName, s_doc, i_dispatcher)\
3225 PY_CLASS_METHOD_IMPL(t_cppClass, &TCppClass::i_cppMethod, s_methodName, s_doc, i_dispatcher,\
3226 ::lass::python::impl::CallMethod<TShadowTraits>::call)
3227
3228/** @ingroup ClassDefinition
3229 * @brief Export a C++ method to Python with custom name and documentation.
3230 *
3231 * Convenience macro that wraps PY_CLASS_METHOD_EX() with auto-generated dispatcher name.
3232 *
3233 * @param i_cppClass C++ class containing the method
3234 * @param i_cppMethod C++ method name to export
3235 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
3236 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
3237 *
3238 * ```cpp
3239 * PY_CLASS_METHOD_NAME_DOC(Foo, calculate, "compute", "Performs calculation")
3240 * // Python: foo_instance.compute()
3241 * ```
3242 *
3243 * @sa PY_CLASS_METHOD_EX
3244 */
3245#define PY_CLASS_METHOD_NAME_DOC( i_cppClass, i_cppMethod, s_methodName, s_doc )\
3246 PY_CLASS_METHOD_EX(\
3247 i_cppClass, i_cppMethod, s_methodName, s_doc,\
3248 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)))
3249
3250/** @ingroup ClassDefinition
3251 * @brief Export a C++ method to Python with custom name (no documentation).
3252 *
3253 * Convenience macro that wraps PY_CLASS_METHOD_NAME_DOC() with s_doc = nullptr.
3254 *
3255 * @param i_cppClass C++ class containing the method
3256 * @param i_cppMethod C++ method name to export
3257 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
3258 *
3259 * ```cpp
3260 * PY_CLASS_METHOD_NAME(Foo, calculate, "compute")
3261 * // Python: foo_instance.compute()
3262 * ```
3263 *
3264 * @sa PY_CLASS_METHOD_EX
3265 */
3266#define PY_CLASS_METHOD_NAME( i_cppClass, i_cppMethod, s_methodName )\
3267 PY_CLASS_METHOD_NAME_DOC( i_cppClass, i_cppMethod, s_methodName, 0 )
3268
3269/** @ingroup ClassDefinition
3270 * @brief Export a C++ method to Python using the C++ method name with documentation.
3271 *
3272 * Convenience macro that wraps PY_CLASS_METHOD_NAME_DOC() with s_methodName derived from i_cppMethod.
3273 *
3274 * @param i_cppClass C++ class containing the method
3275 * @param i_cppMethod C++ method name to export (name will be used as Python name)
3276 * @param s_doc Method documentation string (null-terminated C string literal)
3277 *
3278 * ```cpp
3279 * PY_CLASS_METHOD_DOC(Foo, calculate, "Performs calculation")
3280 * // Python: foo_instance.calculate()
3281 * ```
3282 *
3283 * @sa PY_CLASS_METHOD_EX
3284 */
3285#define PY_CLASS_METHOD_DOC( i_cppClass, i_cppMethod, s_doc )\
3286 PY_CLASS_METHOD_NAME_DOC( i_cppClass, i_cppMethod, LASS_STRINGIFY(i_cppMethod), s_doc)
3287
3288/** @ingroup ClassDefinition
3289 * @brief Export a C++ method to Python using the C++ method name (no documentation).
3290 *
3291 * The simplest method export macro. Uses the C++ method name as the Python name
3292 * and doesn't provide additional documentation.
3293 *
3294 * @param i_cppClass C++ class containing the method
3295 * @param i_cppMethod C++ method name to export (name will be used as Python name)
3296 *
3297 * ```cpp
3298 * PY_CLASS_METHOD(Foo, calculate)
3299 * // Python: foo_instance.calculate()
3300 * ```
3301 *
3302 * @sa PY_CLASS_METHOD_EX
3303 */
3304#define PY_CLASS_METHOD( i_cppClass, i_cppMethod )\
3305 PY_CLASS_METHOD_DOC( i_cppClass, i_cppMethod, 0 )
3306
3307/** @} */
3308
3309// --- explicit qualified methods ------------------------------------------------------------------
3310
3311/** @addtogroup ClassDefinition
3312 * @name Type-Qualified Method Export Macros
3313 *
3314 * These macros export C++ class methods to Python with explicit type qualification to resolve
3315 * method overload ambiguities. They provide fine-grained control over method signatures
3316 * and are essential when exporting overloaded methods that would otherwise be ambiguous.
3317 *
3318 * Use these macros when you have overloaded C++ methods and need to specify exactly which
3319 * overload to export to Python by providing explicit return and parameter types.
3320 *
3321 * The macros are organized in layers:
3322 * - PY_CLASS_METHOD_QUALIFIED_EX(): Full control with custom dispatcher and meta::TypeTuple for parameters
3323 * - PY_CLASS_METHOD_QUALIFIED_EX_0() through PY_CLASS_METHOD_QUALIFIED_EX_15(): Full control with custom dispatcher, for 0-15 parameters
3324 * - PY_CLASS_METHOD_QUALIFIED_NAME_DOC(): Automatic dispatcher with custom name and documentation, and meta::TypeTuple for parameters
3325 * - PY_CLASS_METHOD_QUALIFIED_NAME_DOC_0() through PY_CLASS_METHOD_QUALIFIED_NAME_DOC_15(): Automatic dispatcher with custom name, for 0-15 parameters
3326 * - PY_CLASS_METHOD_QUALIFIED_NAME(): Automatic dispatcher with custom name, no documentation, and meta::TypeTuple for parameters
3327 * - PY_CLASS_METHOD_QUALIFIED_NAME_0() through PY_CLASS_METHOD_QUALIFIED_NAME_15(): Automatic dispatcher with custom name, no documentation, for 0-15 parameters
3328 * - PY_CLASS_METHOD_QUALIFIED_DOC(): Automatic dispatcher with documentation, and meta::TypeTuple for parameters
3329 * - PY_CLASS_METHOD_QUALIFIED_DOC_0() through PY_CLASS_METHOD_QUALIFIED_DOC_15(): Automatic dispatcher with documentation, for 0-15 parameters
3330 * - PY_CLASS_METHOD_QUALIFIED(): Automatic dispatcher, no documentation, and meta::TypeTuple for parameters
3331 * - PY_CLASS_METHOD_QUALIFIED_0() through PY_CLASS_METHOD_QUALIFIED_15(): Automatic dispatcher, no documentation, for 0-15 parameters
3332 *
3333 * @{
3334 */
3335
3336/** @ingroup ClassDefinition
3337 * @brief Export a C++ method to Python with explicit type qualification to resolve ambiguities.
3338 *
3339 * Use this macro instead of PY_CLASS_METHOD_EX when there are overloaded C++ methods
3340 * that would create ambiguity. By explicitly specifying return type and parameter types,
3341 * you can disambiguate which overload to export.
3342 *
3343 * @param t_cppClass C++ class containing the method
3344 * @param i_cppMethod C++ method name to export (can be overloaded)
3345 * @param t_return Return type of the method (for disambiguation)
3346 * @param t_params Parameter types as lass::meta::TypeTuple (for disambiguation)
3347 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
3348 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
3349 * @param i_dispatcher Unique identifier for the generated dispatcher function
3350 *
3351 * This macro helps resolve method overload ambiguities by explicitly specifying
3352 * the method signature to export. Overloads can be mixed with PY_CLASS_METHOD_EX methods.
3353 *
3354 * ```cpp
3355 * class Foo {
3356 * PY_HEADER(python::PyObjectPlus)
3357 * public:
3358 * void bar(int a);
3359 * void bar(const std::string& b) const;
3360 * };
3361 *
3362 * PY_DECLARE_CLASS(Foo)
3363 * PY_CLASS_METHOD_QUALIFIED_EX(Foo, bar, void, meta::TypeTuple<int>, "bar", nullptr, foo_bar_a)
3364 * PY_CLASS_METHOD_QUALIFIED_EX(Foo, bar, void, meta::TypeTuple<const std::string&>, "bar", nullptr, foo_bar_b)
3365 * // Python: foo_instance.bar(42) or foo_instance.bar("hello")
3366 * ```
3367 */
3368#define PY_CLASS_METHOD_QUALIFIED_EX(t_cppClass, i_cppMethod, t_return, t_params, s_methodName, s_doc, i_dispatcher)\
3369 static ::lass::python::impl::OverloadLink LASS_CONCATENATE(i_dispatcher, _overloadChain);\
3370 extern "C" LASS_DLL_LOCAL PyObject* i_dispatcher(PyObject* iObject, PyObject* iArgs)\
3371 {\
3372 PyObject* result = 0;\
3373 if (LASS_CONCATENATE(i_dispatcher, _overloadChain)(iObject, iArgs, result))\
3374 {\
3375 return result;\
3376 }\
3377 LASS_ASSERT(result == 0);\
3378 typedef ::lass::python::impl::ShadowTraits< t_cppClass > TShadowTraits;\
3379 typedef TShadowTraits::TCppClass TCppClass;\
3380 return ::lass::python::impl::ExplicitResolver<TShadowTraits,t_return,t_params>::callMethod(\
3381 iArgs, iObject, &TCppClass::i_cppMethod); \
3382 }\
3383 LASS_EXECUTE_BEFORE_MAIN_EX(LASS_CONCATENATE(i_dispatcher, _executeBeforeMain),\
3384 t_cppClass ::_lassPyClassDef.addMethod(\
3385 s_methodName, s_doc, \
3386 ::lass::python::impl::FunctionTypeDispatcher< SPECIAL_SLOT_TYPE(s_methodName) , i_dispatcher>::fun,\
3387 LASS_CONCATENATE(i_dispatcher, _overloadChain));\
3388 )
3389/**/
3390
3391/** @ingroup ClassDefinition
3392 * @brief Export a C++ method with type qualification for 0-parameter methods.
3393 *
3394 * Convenience macro that wraps PY_CLASS_METHOD_QUALIFIED_EX() for methods with 0 parameters.
3395 *
3396 * @param t_cppClass C++ class containing the method
3397 * @param i_cppMethod C++ method name to export (0 parameters, can be overloaded)
3398 * @param t_return Return type of the method (for disambiguation)
3399 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
3400 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
3401 * @param i_dispatcher Unique identifier for the generated dispatcher function
3402 *
3403 * @sa PY_CLASS_METHOD_QUALIFIED_EX
3404 */
3405#define PY_CLASS_METHOD_QUALIFIED_EX_0( t_cppClass, i_cppMethod, t_return, s_methodName, s_doc, i_dispatcher )\
3406 PY_CLASS_METHOD_QUALIFIED_EX(\
3407 t_cppClass, i_cppMethod, t_return, ::lass::meta::TypeTuple<>, s_methodName, s_doc, i_dispatcher )
3408
3409/** @ingroup ClassDefinition
3410 * @brief Export a C++ method with type qualification for 1-parameter methods.
3411 *
3412 * Convenience macro that wraps PY_CLASS_METHOD_QUALIFIED_EX() for methods with exactly 1 parameters.
3413 *
3414 * @param t_cppClass C++ class containing the method
3415 * @param i_cppMethod C++ method name to export (1 parameters, can be overloaded)
3416 * @param t_return Return type of the method (for disambiguation)
3417 * @param t_P1 Parameter types for the method (for disambiguation)
3418 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
3419 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
3420 * @param i_dispatcher Unique identifier for the generated dispatcher function
3421 *
3422 * @sa PY_CLASS_METHOD_QUALIFIED_EX
3423 */
3424#define PY_CLASS_METHOD_QUALIFIED_EX_1( t_cppClass, i_cppMethod, t_return, t_P1, s_methodName, s_doc, i_dispatcher )\
3425 typedef ::lass::meta::TypeTuple< t_P1 > \
3426 LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams));\
3427 PY_CLASS_METHOD_QUALIFIED_EX(\
3428 t_cppClass, i_cppMethod, t_return,\
3429 LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams)), s_methodName, s_doc,\
3430 i_dispatcher )
3431
3432/** @ingroup ClassDefinition
3433 * @brief Export a C++ method with type qualification for 2-parameter methods.
3434 *
3435 * Convenience macro that wraps PY_CLASS_METHOD_QUALIFIED_EX() for methods with exactly 2 parameters.
3436 *
3437 * @param t_cppClass C++ class containing the method
3438 * @param i_cppMethod C++ method name to export (2 parameters, can be overloaded)
3439 * @param t_return Return type of the method (for disambiguation)
3440 * @param t_P1, t_P2 Parameter types for the method (for disambiguation)
3441 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
3442 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
3443 * @param i_dispatcher Unique identifier for the generated dispatcher function
3444 *
3445 * @sa PY_CLASS_METHOD_QUALIFIED_EX
3446 */
3447#define PY_CLASS_METHOD_QUALIFIED_EX_2( t_cppClass, i_cppMethod, t_return, t_P1, t_P2, s_methodName, s_doc, i_dispatcher )\
3448 typedef ::lass::meta::TypeTuple< t_P1, t_P2 > \
3449 LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams));\
3450 PY_CLASS_METHOD_QUALIFIED_EX(\
3451 t_cppClass, i_cppMethod, t_return,\
3452 LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams)), s_methodName, s_doc,\
3453 i_dispatcher )
3454
3455/** @ingroup ClassDefinition
3456 * @brief Export a C++ method with type qualification for 3-parameter methods.
3457 *
3458 * Convenience macro that wraps PY_CLASS_METHOD_QUALIFIED_EX() for methods with exactly 3 parameters.
3459 *
3460 * @param t_cppClass C++ class containing the method
3461 * @param i_cppMethod C++ method name to export (3 parameters, can be overloaded)
3462 * @param t_return Return type of the method (for disambiguation)
3463 * @param t_P1, t_P2, t_P3 Parameter types for the method (for disambiguation)
3464 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
3465 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
3466 * @param i_dispatcher Unique identifier for the generated dispatcher function
3467 *
3468 * @sa PY_CLASS_METHOD_QUALIFIED_EX
3469 */
3470#define PY_CLASS_METHOD_QUALIFIED_EX_3( t_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, s_methodName, s_doc, i_dispatcher )\
3471 typedef ::lass::meta::TypeTuple< t_P1, t_P2, t_P3 > \
3472 LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams));\
3473 PY_CLASS_METHOD_QUALIFIED_EX(\
3474 t_cppClass, i_cppMethod, t_return,\
3475 LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams)), s_methodName, s_doc,\
3476 i_dispatcher )
3477
3478/** @ingroup ClassDefinition
3479 * @brief Export a C++ method with type qualification for 4-parameter methods.
3480 *
3481 * Convenience macro that wraps PY_CLASS_METHOD_QUALIFIED_EX() for methods with exactly 4 parameters.
3482 *
3483 * @param t_cppClass C++ class containing the method
3484 * @param i_cppMethod C++ method name to export (4 parameters, can be overloaded)
3485 * @param t_return Return type of the method (for disambiguation)
3486 * @param t_P1, t_P2, t_P3, t_P4 Parameter types for the method (for disambiguation)
3487 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
3488 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
3489 * @param i_dispatcher Unique identifier for the generated dispatcher function
3490 *
3491 * @sa PY_CLASS_METHOD_QUALIFIED_EX
3492 */
3493#define PY_CLASS_METHOD_QUALIFIED_EX_4( t_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, s_methodName, s_doc, i_dispatcher )\
3494 typedef ::lass::meta::TypeTuple< t_P1, t_P2, t_P3, t_P4 > \
3495 LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams));\
3496 PY_CLASS_METHOD_QUALIFIED_EX(\
3497 t_cppClass, i_cppMethod, t_return,\
3498 LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams)), s_methodName, s_doc,\
3499 i_dispatcher )
3500
3501/** @ingroup ClassDefinition
3502 * @brief Export a C++ method with type qualification for 5-parameter methods.
3503 *
3504 * Convenience macro that wraps PY_CLASS_METHOD_QUALIFIED_EX() for methods with exactly 5 parameters.
3505 *
3506 * @param t_cppClass C++ class containing the method
3507 * @param i_cppMethod C++ method name to export (5 parameters, can be overloaded)
3508 * @param t_return Return type of the method (for disambiguation)
3509 * @param t_P1, t_P2, t_P3, t_P4, t_P5 Parameter types for the method (for disambiguation)
3510 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
3511 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
3512 * @param i_dispatcher Unique identifier for the generated dispatcher function
3513 *
3514 * @sa PY_CLASS_METHOD_QUALIFIED_EX
3515 */
3516#define PY_CLASS_METHOD_QUALIFIED_EX_5( t_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, s_methodName, s_doc, i_dispatcher )\
3517 typedef ::lass::meta::TypeTuple< t_P1, t_P2, t_P3, t_P4, t_P5 > \
3518 LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams));\
3519 PY_CLASS_METHOD_QUALIFIED_EX(\
3520 t_cppClass, i_cppMethod, t_return,\
3521 LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams)), s_methodName, s_doc,\
3522 i_dispatcher )
3523
3524/** @ingroup ClassDefinition
3525 * @brief Export a C++ method with type qualification for 6-parameter methods.
3526 *
3527 * Convenience macro that wraps PY_CLASS_METHOD_QUALIFIED_EX() for methods with exactly 6 parameters.
3528 *
3529 * @param t_cppClass C++ class containing the method
3530 * @param i_cppMethod C++ method name to export (6 parameters, can be overloaded)
3531 * @param t_return Return type of the method (for disambiguation)
3532 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6 Parameter types for the method (for disambiguation)
3533 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
3534 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
3535 * @param i_dispatcher Unique identifier for the generated dispatcher function
3536 *
3537 * @sa PY_CLASS_METHOD_QUALIFIED_EX
3538 */
3539#define PY_CLASS_METHOD_QUALIFIED_EX_6( t_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, s_methodName, s_doc, i_dispatcher )\
3540 typedef ::lass::meta::TypeTuple< t_P1, t_P2, t_P3, t_P4, t_P5, t_P6 > \
3541 LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams));\
3542 PY_CLASS_METHOD_QUALIFIED_EX(\
3543 t_cppClass, i_cppMethod, t_return,\
3544 LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams)), s_methodName, s_doc,\
3545 i_dispatcher )
3546
3547/** @ingroup ClassDefinition
3548 * @brief Export a C++ method with type qualification for 7-parameter methods.
3549 *
3550 * Convenience macro that wraps PY_CLASS_METHOD_QUALIFIED_EX() for methods with exactly 7 parameters.
3551 *
3552 * @param t_cppClass C++ class containing the method
3553 * @param i_cppMethod C++ method name to export (7 parameters, can be overloaded)
3554 * @param t_return Return type of the method (for disambiguation)
3555 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7 Parameter types for the method (for disambiguation)
3556 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
3557 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
3558 * @param i_dispatcher Unique identifier for the generated dispatcher function
3559 *
3560 * @sa PY_CLASS_METHOD_QUALIFIED_EX
3561 */
3562#define PY_CLASS_METHOD_QUALIFIED_EX_7( t_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, s_methodName, s_doc, i_dispatcher )\
3563 typedef ::lass::meta::TypeTuple< t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7 > \
3564 LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams));\
3565 PY_CLASS_METHOD_QUALIFIED_EX(\
3566 t_cppClass, i_cppMethod, t_return,\
3567 LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams)), s_methodName, s_doc,\
3568 i_dispatcher )
3569
3570/** @ingroup ClassDefinition
3571 * @brief Export a C++ method with type qualification for 8-parameter methods.
3572 *
3573 * Convenience macro that wraps PY_CLASS_METHOD_QUALIFIED_EX() for methods with exactly 8 parameters.
3574 *
3575 * @param t_cppClass C++ class containing the method
3576 * @param i_cppMethod C++ method name to export (8 parameters, can be overloaded)
3577 * @param t_return Return type of the method (for disambiguation)
3578 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8 Parameter types for the method (for disambiguation)
3579 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
3580 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
3581 * @param i_dispatcher Unique identifier for the generated dispatcher function
3582 *
3583 * @sa PY_CLASS_METHOD_QUALIFIED_EX
3584 */
3585#define PY_CLASS_METHOD_QUALIFIED_EX_8( t_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, s_methodName, s_doc, i_dispatcher )\
3586 typedef ::lass::meta::TypeTuple< t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8 > \
3587 LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams));\
3588 PY_CLASS_METHOD_QUALIFIED_EX(\
3589 t_cppClass, i_cppMethod, t_return,\
3590 LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams)), s_methodName, s_doc,\
3591 i_dispatcher )
3592
3593/** @ingroup ClassDefinition
3594 * @brief Export a C++ method with type qualification for 9-parameter methods.
3595 *
3596 * Convenience macro that wraps PY_CLASS_METHOD_QUALIFIED_EX() for methods with exactly 9 parameters.
3597 *
3598 * @param t_cppClass C++ class containing the method
3599 * @param i_cppMethod C++ method name to export (9 parameters, can be overloaded)
3600 * @param t_return Return type of the method (for disambiguation)
3601 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9 Parameter types for the method (for disambiguation)
3602 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
3603 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
3604 * @param i_dispatcher Unique identifier for the generated dispatcher function
3605 *
3606 * @sa PY_CLASS_METHOD_QUALIFIED_EX
3607 */
3608#define PY_CLASS_METHOD_QUALIFIED_EX_9( t_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, s_methodName, s_doc, i_dispatcher )\
3609 typedef ::lass::meta::TypeTuple< t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9 > \
3610 LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams));\
3611 PY_CLASS_METHOD_QUALIFIED_EX(\
3612 t_cppClass, i_cppMethod, t_return,\
3613 LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams)), s_methodName, s_doc,\
3614 i_dispatcher )
3615
3616/** @ingroup ClassDefinition
3617 * @brief Export a C++ method with type qualification for 10-parameter methods.
3618 *
3619 * Convenience macro that wraps PY_CLASS_METHOD_QUALIFIED_EX() for methods with exactly 10 parameters.
3620 *
3621 * @param t_cppClass C++ class containing the method
3622 * @param i_cppMethod C++ method name to export (10 parameters, can be overloaded)
3623 * @param t_return Return type of the method (for disambiguation)
3624 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10 Parameter types for the method (for disambiguation)
3625 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
3626 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
3627 * @param i_dispatcher Unique identifier for the generated dispatcher function
3628 *
3629 * @sa PY_CLASS_METHOD_QUALIFIED_EX
3630 */
3631#define PY_CLASS_METHOD_QUALIFIED_EX_10( t_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, s_methodName, s_doc, i_dispatcher )\
3632 typedef ::lass::meta::TypeTuple< t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10 > \
3633 LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams));\
3634 PY_CLASS_METHOD_QUALIFIED_EX(\
3635 t_cppClass, i_cppMethod, t_return,\
3636 LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams)), s_methodName, s_doc,\
3637 i_dispatcher )
3638
3639/** @ingroup ClassDefinition
3640 * @brief Export a C++ method with type qualification for 11-parameter methods.
3641 *
3642 * Convenience macro that wraps PY_CLASS_METHOD_QUALIFIED_EX() for methods with exactly 11 parameters.
3643 *
3644 * @param t_cppClass C++ class containing the method
3645 * @param i_cppMethod C++ method name to export (11 parameters, can be overloaded)
3646 * @param t_return Return type of the method (for disambiguation)
3647 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11 Parameter types for the method (for disambiguation)
3648 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
3649 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
3650 * @param i_dispatcher Unique identifier for the generated dispatcher function
3651 *
3652 * @sa PY_CLASS_METHOD_QUALIFIED_EX
3653 */
3654#define PY_CLASS_METHOD_QUALIFIED_EX_11( t_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, s_methodName, s_doc, i_dispatcher )\
3655 typedef ::lass::meta::TypeTuple< t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11 > \
3656 LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams));\
3657 PY_CLASS_METHOD_QUALIFIED_EX(\
3658 t_cppClass, i_cppMethod, t_return,\
3659 LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams)), s_methodName, s_doc,\
3660 i_dispatcher )
3661
3662/** @ingroup ClassDefinition
3663 * @brief Export a C++ method with type qualification for 12-parameter methods.
3664 *
3665 * Convenience macro that wraps PY_CLASS_METHOD_QUALIFIED_EX() for methods with exactly 12 parameters.
3666 *
3667 * @param t_cppClass C++ class containing the method
3668 * @param i_cppMethod C++ method name to export (12 parameters, can be overloaded)
3669 * @param t_return Return type of the method (for disambiguation)
3670 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12 Parameter types for the method (for disambiguation)
3671 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
3672 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
3673 * @param i_dispatcher Unique identifier for the generated dispatcher function
3674 *
3675 * @sa PY_CLASS_METHOD_QUALIFIED_EX
3676 */
3677#define PY_CLASS_METHOD_QUALIFIED_EX_12( t_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, s_methodName, s_doc, i_dispatcher )\
3678 typedef ::lass::meta::TypeTuple< t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12 > \
3679 LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams));\
3680 PY_CLASS_METHOD_QUALIFIED_EX(\
3681 t_cppClass, i_cppMethod, t_return,\
3682 LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams)), s_methodName, s_doc,\
3683 i_dispatcher )
3684
3685/** @ingroup ClassDefinition
3686 * @brief Export a C++ method with type qualification for 13-parameter methods.
3687 *
3688 * Convenience macro that wraps PY_CLASS_METHOD_QUALIFIED_EX() for methods with exactly 13 parameters.
3689 *
3690 * @param t_cppClass C++ class containing the method
3691 * @param i_cppMethod C++ method name to export (13 parameters, can be overloaded)
3692 * @param t_return Return type of the method (for disambiguation)
3693 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13 Parameter types for the method (for disambiguation)
3694 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
3695 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
3696 * @param i_dispatcher Unique identifier for the generated dispatcher function
3697 *
3698 * @sa PY_CLASS_METHOD_QUALIFIED_EX
3699 */
3700#define PY_CLASS_METHOD_QUALIFIED_EX_13( t_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, s_methodName, s_doc, i_dispatcher )\
3701 typedef ::lass::meta::TypeTuple< t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13 > \
3702 LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams));\
3703 PY_CLASS_METHOD_QUALIFIED_EX(\
3704 t_cppClass, i_cppMethod, t_return,\
3705 LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams)), s_methodName, s_doc,\
3706 i_dispatcher )
3707
3708/** @ingroup ClassDefinition
3709 * @brief Export a C++ method with type qualification for 14-parameter methods.
3710 *
3711 * Convenience macro that wraps PY_CLASS_METHOD_QUALIFIED_EX() for methods with exactly 14 parameters.
3712 *
3713 * @param t_cppClass C++ class containing the method
3714 * @param i_cppMethod C++ method name to export (14 parameters, can be overloaded)
3715 * @param t_return Return type of the method (for disambiguation)
3716 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14 Parameter types for the method (for disambiguation)
3717 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
3718 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
3719 * @param i_dispatcher Unique identifier for the generated dispatcher function
3720 *
3721 * @sa PY_CLASS_METHOD_QUALIFIED_EX
3722 */
3723#define PY_CLASS_METHOD_QUALIFIED_EX_14( t_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, s_methodName, s_doc, i_dispatcher )\
3724 typedef ::lass::meta::TypeTuple< t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14 > \
3725 LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams));\
3726 PY_CLASS_METHOD_QUALIFIED_EX(\
3727 t_cppClass, i_cppMethod, t_return,\
3728 LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams)), s_methodName, s_doc,\
3729 i_dispatcher )
3730
3731/** @ingroup ClassDefinition
3732 * @brief Export a C++ method with type qualification for 15-parameter methods.
3733 *
3734 * Convenience macro that wraps PY_CLASS_METHOD_QUALIFIED_EX() for methods with exactly 15 parameters.
3735 *
3736 * @param t_cppClass C++ class containing the method
3737 * @param i_cppMethod C++ method name to export (15 parameters, can be overloaded)
3738 * @param t_return Return type of the method (for disambiguation)
3739 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15 Parameter types for the method (for disambiguation)
3740 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
3741 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
3742 * @param i_dispatcher Unique identifier for the generated dispatcher function
3743 *
3744 * @sa PY_CLASS_METHOD_QUALIFIED_EX
3745 */
3746#define PY_CLASS_METHOD_QUALIFIED_EX_15( t_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15, s_methodName, s_doc, i_dispatcher )\
3747 typedef ::lass::meta::TypeTuple< t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15 > \
3748 LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams));\
3749 PY_CLASS_METHOD_QUALIFIED_EX(\
3750 t_cppClass, i_cppMethod, t_return,\
3751 LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams)), s_methodName, s_doc,\
3752 i_dispatcher )
3753
3754
3755/** @ingroup ClassDefinition
3756 * @brief Export a C++ method with type qualification and custom name with documentation.
3757 *
3758 * Convenience macro that wraps PY_CLASS_METHOD_QUALIFIED_EX() with automatically generated dispatcher name.
3759 *
3760 * @param i_cppClass C++ class containing the method
3761 * @param i_cppMethod C++ method name to export (can be overloaded)
3762 * @param t_return Return type of the method (for disambiguation)
3763 * @param t_params Parameter types as lass::meta::TypeTuple (for disambiguation)
3764 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
3765 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
3766 *
3767 * @sa PY_CLASS_METHOD_QUALIFIED_EX
3768 */
3769#define PY_CLASS_METHOD_QUALIFIED_NAME_DOC( i_cppClass, i_cppMethod, t_return, t_params, s_methodName, s_doc )\
3770 PY_CLASS_METHOD_QUALIFIED_EX(\
3771 i_cppClass, i_cppMethod, t_return, t_params, s_methodName, s_doc,\
3772 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)))
3773
3774/** @ingroup ClassDefinition
3775 * @brief Export a C++ method with type qualification for 0-parameter methods with custom name and documentation.
3776 *
3777 * Convenience macro that wraps PY_CLASS_METHOD_QUALIFIED_EX_0() with automatically generated dispatcher name.
3778 *
3779 * @param i_cppClass C++ class containing the method
3780 * @param i_cppMethod C++ method name to export (0 parameters, can be overloaded)
3781 * @param t_return Return type of the method (for disambiguation)
3782 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
3783 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
3784 *
3785 * @sa PY_CLASS_METHOD_QUALIFIED_EX
3786 */
3787#define PY_CLASS_METHOD_QUALIFIED_NAME_DOC_0( i_cppClass, i_cppMethod, t_return, s_methodName, s_doc )\
3788 PY_CLASS_METHOD_QUALIFIED_EX_0(\
3789 i_cppClass, i_cppMethod, t_return, s_methodName, s_doc,\
3790 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)))
3791
3792/** @ingroup ClassDefinition
3793 * @brief Export a C++ method with type qualification for 1-parameter methods with custom name and documentation.
3794 *
3795 * Convenience macro that wraps PY_CLASS_METHOD_QUALIFIED_EX_1() with automatically generated dispatcher name.
3796 *
3797 * @param i_cppClass C++ class containing the method
3798 * @param i_cppMethod C++ method name to export (1 parameters, can be overloaded)
3799 * @param t_return Return type of the method (for disambiguation)
3800 * @param t_P1 Parameter types for the method (for disambiguation)
3801 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
3802 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
3803 *
3804 * @sa PY_CLASS_METHOD_QUALIFIED_EX
3805 */
3806#define PY_CLASS_METHOD_QUALIFIED_NAME_DOC_1( i_cppClass, i_cppMethod, t_return, t_P1, s_methodName, s_doc )\
3807 PY_CLASS_METHOD_QUALIFIED_EX_1(\
3808 i_cppClass, i_cppMethod, t_return, t_P1, s_methodName, s_doc,\
3809 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)))
3810
3811/** @ingroup ClassDefinition
3812 * @brief Export a C++ method with type qualification for 2-parameter methods with custom name and documentation.
3813 *
3814 * Convenience macro that wraps PY_CLASS_METHOD_QUALIFIED_EX_2() with automatically generated dispatcher name.
3815 *
3816 * @param i_cppClass C++ class containing the method
3817 * @param i_cppMethod C++ method name to export (2 parameters, can be overloaded)
3818 * @param t_return Return type of the method (for disambiguation)
3819 * @param t_P1, t_P2 Parameter types for the method (for disambiguation)
3820 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
3821 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
3822 *
3823 * @sa PY_CLASS_METHOD_QUALIFIED_EX
3824 */
3825#define PY_CLASS_METHOD_QUALIFIED_NAME_DOC_2( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, s_methodName, s_doc )\
3826 PY_CLASS_METHOD_QUALIFIED_EX_2(\
3827 i_cppClass, i_cppMethod, t_return, t_P1, t_P2, s_methodName, s_doc,\
3828 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)))
3829
3830/** @ingroup ClassDefinition
3831 * @brief Export a C++ method with type qualification for 3-parameter methods with custom name and documentation.
3832 *
3833 * Convenience macro that wraps PY_CLASS_METHOD_QUALIFIED_EX_3() with automatically generated dispatcher name.
3834 *
3835 * @param i_cppClass C++ class containing the method
3836 * @param i_cppMethod C++ method name to export (3 parameters, can be overloaded)
3837 * @param t_return Return type of the method (for disambiguation)
3838 * @param t_P1, t_P2, t_P3 Parameter types for the method (for disambiguation)
3839 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
3840 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
3841 *
3842 * @sa PY_CLASS_METHOD_QUALIFIED_EX
3843 */
3844#define PY_CLASS_METHOD_QUALIFIED_NAME_DOC_3( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, s_methodName, s_doc )\
3845 PY_CLASS_METHOD_QUALIFIED_EX_3(\
3846 i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, s_methodName, s_doc,\
3847 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)))
3848
3849/** @ingroup ClassDefinition
3850 * @brief Export a C++ method with type qualification for 4-parameter methods with custom name and documentation.
3851 *
3852 * Convenience macro that wraps PY_CLASS_METHOD_QUALIFIED_EX_4() with automatically generated dispatcher name.
3853 *
3854 * @param i_cppClass C++ class containing the method
3855 * @param i_cppMethod C++ method name to export (4 parameters, can be overloaded)
3856 * @param t_return Return type of the method (for disambiguation)
3857 * @param t_P1, t_P2, t_P3, t_P4 Parameter types for the method (for disambiguation)
3858 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
3859 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
3860 *
3861 * @sa PY_CLASS_METHOD_QUALIFIED_EX
3862 */
3863#define PY_CLASS_METHOD_QUALIFIED_NAME_DOC_4( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, s_methodName, s_doc )\
3864 PY_CLASS_METHOD_QUALIFIED_EX_4(\
3865 i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, s_methodName, s_doc,\
3866 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)))
3867
3868/** @ingroup ClassDefinition
3869 * @brief Export a C++ method with type qualification for 5-parameter methods with custom name and documentation.
3870 *
3871 * Convenience macro that wraps PY_CLASS_METHOD_QUALIFIED_EX_5() with automatically generated dispatcher name.
3872 *
3873 * @param i_cppClass C++ class containing the method
3874 * @param i_cppMethod C++ method name to export (5 parameters, can be overloaded)
3875 * @param t_return Return type of the method (for disambiguation)
3876 * @param t_P1, t_P2, t_P3, t_P4, t_P5 Parameter types for the method (for disambiguation)
3877 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
3878 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
3879 *
3880 * @sa PY_CLASS_METHOD_QUALIFIED_EX
3881 */
3882#define PY_CLASS_METHOD_QUALIFIED_NAME_DOC_5( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, s_methodName, s_doc )\
3883 PY_CLASS_METHOD_QUALIFIED_EX_5(\
3884 i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, s_methodName, s_doc,\
3885 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)))
3886
3887/** @ingroup ClassDefinition
3888 * @brief Export a C++ method with type qualification for 6-parameter methods with custom name and documentation.
3889 *
3890 * Convenience macro that wraps PY_CLASS_METHOD_QUALIFIED_EX_6() with automatically generated dispatcher name.
3891 *
3892 * @param i_cppClass C++ class containing the method
3893 * @param i_cppMethod C++ method name to export (6 parameters, can be overloaded)
3894 * @param t_return Return type of the method (for disambiguation)
3895 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6 Parameter types for the method (for disambiguation)
3896 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
3897 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
3898 *
3899 * @sa PY_CLASS_METHOD_QUALIFIED_EX
3900 */
3901#define PY_CLASS_METHOD_QUALIFIED_NAME_DOC_6( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, s_methodName, s_doc )\
3902 PY_CLASS_METHOD_QUALIFIED_EX_6(\
3903 i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, s_methodName, s_doc,\
3904 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)))
3905
3906/** @ingroup ClassDefinition
3907 * @brief Export a C++ method with type qualification for 7-parameter methods with custom name and documentation.
3908 *
3909 * Convenience macro that wraps PY_CLASS_METHOD_QUALIFIED_EX_7() with automatically generated dispatcher name.
3910 *
3911 * @param i_cppClass C++ class containing the method
3912 * @param i_cppMethod C++ method name to export (7 parameters, can be overloaded)
3913 * @param t_return Return type of the method (for disambiguation)
3914 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7 Parameter types for the method (for disambiguation)
3915 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
3916 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
3917 *
3918 * @sa PY_CLASS_METHOD_QUALIFIED_EX
3919 */
3920#define PY_CLASS_METHOD_QUALIFIED_NAME_DOC_7( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, s_methodName, s_doc )\
3921 PY_CLASS_METHOD_QUALIFIED_EX_7(\
3922 i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, s_methodName, s_doc,\
3923 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)))
3924
3925/** @ingroup ClassDefinition
3926 * @brief Export a C++ method with type qualification for 8-parameter methods with custom name and documentation.
3927 *
3928 * Convenience macro that wraps PY_CLASS_METHOD_QUALIFIED_EX_8() with automatically generated dispatcher name.
3929 *
3930 * @param i_cppClass C++ class containing the method
3931 * @param i_cppMethod C++ method name to export (8 parameters, can be overloaded)
3932 * @param t_return Return type of the method (for disambiguation)
3933 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8 Parameter types for the method (for disambiguation)
3934 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
3935 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
3936 *
3937 * @sa PY_CLASS_METHOD_QUALIFIED_EX
3938 */
3939#define PY_CLASS_METHOD_QUALIFIED_NAME_DOC_8( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, s_methodName, s_doc )\
3940 PY_CLASS_METHOD_QUALIFIED_EX_8(\
3941 i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, s_methodName, s_doc,\
3942 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)))
3943
3944/** @ingroup ClassDefinition
3945 * @brief Export a C++ method with type qualification for 9-parameter methods with custom name and documentation.
3946 *
3947 * Convenience macro that wraps PY_CLASS_METHOD_QUALIFIED_EX_9() with automatically generated dispatcher name.
3948 *
3949 * @param i_cppClass C++ class containing the method
3950 * @param i_cppMethod C++ method name to export (9 parameters, can be overloaded)
3951 * @param t_return Return type of the method (for disambiguation)
3952 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9 Parameter types for the method (for disambiguation)
3953 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
3954 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
3955 *
3956 * @sa PY_CLASS_METHOD_QUALIFIED_EX
3957 */
3958#define PY_CLASS_METHOD_QUALIFIED_NAME_DOC_9( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, s_methodName, s_doc )\
3959 PY_CLASS_METHOD_QUALIFIED_EX_9(\
3960 i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, s_methodName, s_doc,\
3961 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)))
3962
3963/** @ingroup ClassDefinition
3964 * @brief Export a C++ method with type qualification for 10-parameter methods with custom name and documentation.
3965 *
3966 * Convenience macro that wraps PY_CLASS_METHOD_QUALIFIED_EX_10() with automatically generated dispatcher name.
3967 *
3968 * @param i_cppClass C++ class containing the method
3969 * @param i_cppMethod C++ method name to export (10 parameters, can be overloaded)
3970 * @param t_return Return type of the method (for disambiguation)
3971 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10 Parameter types for the method (for disambiguation)
3972 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
3973 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
3974 *
3975 * @sa PY_CLASS_METHOD_QUALIFIED_EX
3976 */
3977#define PY_CLASS_METHOD_QUALIFIED_NAME_DOC_10( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, s_methodName, s_doc )\
3978 PY_CLASS_METHOD_QUALIFIED_EX_10(\
3979 i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, s_methodName, s_doc,\
3980 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)))
3981
3982/** @ingroup ClassDefinition
3983 * @brief Export a C++ method with type qualification for 11-parameter methods with custom name and documentation.
3984 *
3985 * Convenience macro that wraps PY_CLASS_METHOD_QUALIFIED_EX_11() with automatically generated dispatcher name.
3986 *
3987 * @param i_cppClass C++ class containing the method
3988 * @param i_cppMethod C++ method name to export (11 parameters, can be overloaded)
3989 * @param t_return Return type of the method (for disambiguation)
3990 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11 Parameter types for the method (for disambiguation)
3991 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
3992 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
3993 *
3994 * @sa PY_CLASS_METHOD_QUALIFIED_EX
3995 */
3996#define PY_CLASS_METHOD_QUALIFIED_NAME_DOC_11( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, s_methodName, s_doc )\
3997 PY_CLASS_METHOD_QUALIFIED_EX_11(\
3998 i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, s_methodName, s_doc,\
3999 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)))
4000
4001/** @ingroup ClassDefinition
4002 * @brief Export a C++ method with type qualification for 12-parameter methods with custom name and documentation.
4003 *
4004 * Convenience macro that wraps PY_CLASS_METHOD_QUALIFIED_EX_12() with automatically generated dispatcher name.
4005 *
4006 * @param i_cppClass C++ class containing the method
4007 * @param i_cppMethod C++ method name to export (12 parameters, can be overloaded)
4008 * @param t_return Return type of the method (for disambiguation)
4009 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12 Parameter types for the method (for disambiguation)
4010 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
4011 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
4012 *
4013 * @sa PY_CLASS_METHOD_QUALIFIED_EX
4014 */
4015#define PY_CLASS_METHOD_QUALIFIED_NAME_DOC_12( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, s_methodName, s_doc )\
4016 PY_CLASS_METHOD_QUALIFIED_EX_12(\
4017 i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, s_methodName, s_doc,\
4018 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)))
4019
4020/** @ingroup ClassDefinition
4021 * @brief Export a C++ method with type qualification for 13-parameter methods with custom name and documentation.
4022 *
4023 * Convenience macro that wraps PY_CLASS_METHOD_QUALIFIED_EX_13() with automatically generated dispatcher name.
4024 *
4025 * @param i_cppClass C++ class containing the method
4026 * @param i_cppMethod C++ method name to export (13 parameters, can be overloaded)
4027 * @param t_return Return type of the method (for disambiguation)
4028 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13 Parameter types for the method (for disambiguation)
4029 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
4030 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
4031 *
4032 * @sa PY_CLASS_METHOD_QUALIFIED_EX
4033 */
4034#define PY_CLASS_METHOD_QUALIFIED_NAME_DOC_13( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, s_methodName, s_doc )\
4035 PY_CLASS_METHOD_QUALIFIED_EX_13(\
4036 i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, s_methodName, s_doc,\
4037 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)))
4038
4039/** @ingroup ClassDefinition
4040 * @brief Export a C++ method with type qualification for 14-parameter methods with custom name and documentation.
4041 *
4042 * Convenience macro that wraps PY_CLASS_METHOD_QUALIFIED_EX_14() with automatically generated dispatcher name.
4043 *
4044 * @param i_cppClass C++ class containing the method
4045 * @param i_cppMethod C++ method name to export (14 parameters, can be overloaded)
4046 * @param t_return Return type of the method (for disambiguation)
4047 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14 Parameter types for the method (for disambiguation)
4048 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
4049 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
4050 *
4051 * @sa PY_CLASS_METHOD_QUALIFIED_EX
4052 */
4053#define PY_CLASS_METHOD_QUALIFIED_NAME_DOC_14( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, s_methodName, s_doc )\
4054 PY_CLASS_METHOD_QUALIFIED_EX_14(\
4055 i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, s_methodName, s_doc,\
4056 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)))
4057
4058/** @ingroup ClassDefinition
4059 * @brief Export a C++ method with type qualification for 15-parameter methods with custom name and documentation.
4060 *
4061 * Convenience macro that wraps PY_CLASS_METHOD_QUALIFIED_EX_15() with automatically generated dispatcher name.
4062 *
4063 * @param i_cppClass C++ class containing the method
4064 * @param i_cppMethod C++ method name to export (15 parameters, can be overloaded)
4065 * @param t_return Return type of the method (for disambiguation)
4066 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15 Parameter types for the method (for disambiguation)
4067 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
4068 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
4069 *
4070 * @sa PY_CLASS_METHOD_QUALIFIED_EX
4071 */
4072#define PY_CLASS_METHOD_QUALIFIED_NAME_DOC_15( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15, s_methodName, s_doc )\
4073 PY_CLASS_METHOD_QUALIFIED_EX_15(\
4074 i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15, s_methodName, s_doc,\
4075 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)))
4076
4077
4078/** @ingroup ClassDefinition
4079 * @brief Export a C++ method with type qualification and custom name (no documentation).
4080 *
4081 * Convenience macro that wraps PY_CLASS_METHOD_QUALIFIED_NAME_DOC() with s_doc = nullptr.
4082 *
4083 * @param i_cppClass C++ class containing the method
4084 * @param i_cppMethod C++ method name to export (can be overloaded)
4085 * @param t_return Return type of the method (for disambiguation)
4086 * @param t_params Parameter types as lass::meta::TypeTuple (for disambiguation)
4087 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
4088 *
4089 * @sa PY_CLASS_METHOD_QUALIFIED_EX
4090 */
4091#define PY_CLASS_METHOD_QUALIFIED_NAME( i_cppClass, i_cppMethod, t_return, t_params, s_methodName )\
4092 PY_CLASS_METHOD_QUALIFIED_NAME_DOC(\
4093 i_cppClass, i_cppMethod, t_return, t_params, s_methodName, 0 )
4094
4095/** @ingroup ClassDefinition
4096 * @brief Export a C++ method with type qualification for 0-parameter methods and custom name (no documentation).
4097 *
4098 * Convenience macro that wraps PY_CLASS_METHOD_QUALIFIED_NAME_DOC_0() with s_doc = nullptr.
4099 *
4100 * @param i_cppClass C++ class containing the method
4101 * @param i_cppMethod C++ method name to export (0 parameters, can be overloaded)
4102 * @param t_return Return type of the method (for disambiguation)
4103 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
4104 *
4105 * @sa PY_CLASS_METHOD_QUALIFIED_EX
4106 */
4107#define PY_CLASS_METHOD_QUALIFIED_NAME_0( i_cppClass, i_cppMethod, t_return, s_methodName )\
4108 PY_CLASS_METHOD_QUALIFIED_NAME_DOC_0(\
4109 i_cppClass, i_cppMethod, t_return, s_methodName, 0 )
4110
4111/** @ingroup ClassDefinition
4112 * @brief Export a C++ method with type qualification for 1-parameter methods and custom name (no documentation).
4113 *
4114 * Convenience macro that wraps PY_CLASS_METHOD_QUALIFIED_NAME_DOC_1() with s_doc = nullptr.
4115 *
4116 * @param i_cppClass C++ class containing the method
4117 * @param i_cppMethod C++ method name to export (1 parameters, can be overloaded)
4118 * @param t_return Return type of the method (for disambiguation)
4119 * @param t_P1 Parameter types for the method (for disambiguation)
4120 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
4121 *
4122 * @sa PY_CLASS_METHOD_QUALIFIED_EX
4123 */
4124#define PY_CLASS_METHOD_QUALIFIED_NAME_1( i_cppClass, i_cppMethod, t_return, t_P1, s_methodName )\
4125 PY_CLASS_METHOD_QUALIFIED_NAME_DOC_1(\
4126 i_cppClass, i_cppMethod, t_return, t_P1, s_methodName, 0 )
4127
4128/** @ingroup ClassDefinition
4129 * @brief Export a C++ method with type qualification for 2-parameter methods and custom name (no documentation).
4130 *
4131 * Convenience macro that wraps PY_CLASS_METHOD_QUALIFIED_NAME_DOC_2() with s_doc = nullptr.
4132 *
4133 * @param i_cppClass C++ class containing the method
4134 * @param i_cppMethod C++ method name to export (2 parameters, can be overloaded)
4135 * @param t_return Return type of the method (for disambiguation)
4136 * @param t_P1, t_P2 Parameter types for the method (for disambiguation)
4137 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
4138 *
4139 * @sa PY_CLASS_METHOD_QUALIFIED_EX
4140 */
4141#define PY_CLASS_METHOD_QUALIFIED_NAME_2( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, s_methodName )\
4142 PY_CLASS_METHOD_QUALIFIED_NAME_DOC_2(\
4143 i_cppClass, i_cppMethod, t_return, t_P1, t_P2, s_methodName, 0 )
4144
4145/** @ingroup ClassDefinition
4146 * @brief Export a C++ method with type qualification for 3-parameter methods and custom name (no documentation).
4147 *
4148 * Convenience macro that wraps PY_CLASS_METHOD_QUALIFIED_NAME_DOC_3() with s_doc = nullptr.
4149 *
4150 * @param i_cppClass C++ class containing the method
4151 * @param i_cppMethod C++ method name to export (3 parameters, can be overloaded)
4152 * @param t_return Return type of the method (for disambiguation)
4153 * @param t_P1, t_P2, t_P3 Parameter types for the method (for disambiguation)
4154 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
4155 *
4156 * @sa PY_CLASS_METHOD_QUALIFIED_EX
4157 */
4158#define PY_CLASS_METHOD_QUALIFIED_NAME_3( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, s_methodName )\
4159 PY_CLASS_METHOD_QUALIFIED_NAME_DOC_3(\
4160 i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, s_methodName, 0 )
4161
4162/** @ingroup ClassDefinition
4163 * @brief Export a C++ method with type qualification for 4-parameter methods and custom name (no documentation).
4164 *
4165 * Convenience macro that wraps PY_CLASS_METHOD_QUALIFIED_NAME_DOC_4() with s_doc = nullptr.
4166 *
4167 * @param i_cppClass C++ class containing the method
4168 * @param i_cppMethod C++ method name to export (4 parameters, can be overloaded)
4169 * @param t_return Return type of the method (for disambiguation)
4170 * @param t_P1, t_P2, t_P3, t_P4 Parameter types for the method (for disambiguation)
4171 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
4172 *
4173 * @sa PY_CLASS_METHOD_QUALIFIED_EX
4174 */
4175#define PY_CLASS_METHOD_QUALIFIED_NAME_4( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, s_methodName )\
4176 PY_CLASS_METHOD_QUALIFIED_NAME_DOC_4(\
4177 i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, s_methodName, 0 )
4178
4179/** @ingroup ClassDefinition
4180 * @brief Export a C++ method with type qualification for 5-parameter methods and custom name (no documentation).
4181 *
4182 * Convenience macro that wraps PY_CLASS_METHOD_QUALIFIED_NAME_DOC_5() with s_doc = nullptr.
4183 *
4184 * @param i_cppClass C++ class containing the method
4185 * @param i_cppMethod C++ method name to export (5 parameters, can be overloaded)
4186 * @param t_return Return type of the method (for disambiguation)
4187 * @param t_P1, t_P2, t_P3, t_P4, t_P5 Parameter types for the method (for disambiguation)
4188 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
4189 *
4190 * @sa PY_CLASS_METHOD_QUALIFIED_EX
4191 */
4192#define PY_CLASS_METHOD_QUALIFIED_NAME_5( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, s_methodName )\
4193 PY_CLASS_METHOD_QUALIFIED_NAME_DOC_5(\
4194 i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, s_methodName, 0 )
4195
4196/** @ingroup ClassDefinition
4197 * @brief Export a C++ method with type qualification for 6-parameter methods and custom name (no documentation).
4198 *
4199 * Convenience macro that wraps PY_CLASS_METHOD_QUALIFIED_NAME_DOC_6() with s_doc = nullptr.
4200 *
4201 * @param i_cppClass C++ class containing the method
4202 * @param i_cppMethod C++ method name to export (6 parameters, can be overloaded)
4203 * @param t_return Return type of the method (for disambiguation)
4204 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6 Parameter types for the method (for disambiguation)
4205 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
4206 *
4207 * @sa PY_CLASS_METHOD_QUALIFIED_EX
4208 */
4209#define PY_CLASS_METHOD_QUALIFIED_NAME_6( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, s_methodName )\
4210 PY_CLASS_METHOD_QUALIFIED_NAME_DOC_6(\
4211 i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, s_methodName, 0 )
4212
4213/** @ingroup ClassDefinition
4214 * @brief Export a C++ method with type qualification for 7-parameter methods and custom name (no documentation).
4215 *
4216 * Convenience macro that wraps PY_CLASS_METHOD_QUALIFIED_NAME_DOC_7() with s_doc = nullptr.
4217 *
4218 * @param i_cppClass C++ class containing the method
4219 * @param i_cppMethod C++ method name to export (7 parameters, can be overloaded)
4220 * @param t_return Return type of the method (for disambiguation)
4221 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7 Parameter types for the method (for disambiguation)
4222 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
4223 *
4224 * @sa PY_CLASS_METHOD_QUALIFIED_EX
4225 */
4226#define PY_CLASS_METHOD_QUALIFIED_NAME_7( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, s_methodName )\
4227 PY_CLASS_METHOD_QUALIFIED_NAME_DOC_7(\
4228 i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, s_methodName, 0 )
4229
4230/** @ingroup ClassDefinition
4231 * @brief Export a C++ method with type qualification for 8-parameter methods and custom name (no documentation).
4232 *
4233 * Convenience macro that wraps PY_CLASS_METHOD_QUALIFIED_NAME_DOC_8() with s_doc = nullptr.
4234 *
4235 * @param i_cppClass C++ class containing the method
4236 * @param i_cppMethod C++ method name to export (8 parameters, can be overloaded)
4237 * @param t_return Return type of the method (for disambiguation)
4238 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8 Parameter types for the method (for disambiguation)
4239 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
4240 *
4241 * @sa PY_CLASS_METHOD_QUALIFIED_EX
4242 */
4243#define PY_CLASS_METHOD_QUALIFIED_NAME_8( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, s_methodName )\
4244 PY_CLASS_METHOD_QUALIFIED_NAME_DOC_8(\
4245 i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, s_methodName, 0 )
4246
4247/** @ingroup ClassDefinition
4248 * @brief Export a C++ method with type qualification for 9-parameter methods and custom name (no documentation).
4249 *
4250 * Convenience macro that wraps PY_CLASS_METHOD_QUALIFIED_NAME_DOC_9() with s_doc = nullptr.
4251 *
4252 * @param i_cppClass C++ class containing the method
4253 * @param i_cppMethod C++ method name to export (9 parameters, can be overloaded)
4254 * @param t_return Return type of the method (for disambiguation)
4255 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9 Parameter types for the method (for disambiguation)
4256 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
4257 *
4258 * @sa PY_CLASS_METHOD_QUALIFIED_EX
4259 */
4260#define PY_CLASS_METHOD_QUALIFIED_NAME_9( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, s_methodName )\
4261 PY_CLASS_METHOD_QUALIFIED_NAME_DOC_9(\
4262 i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, s_methodName, 0 )
4263
4264/** @ingroup ClassDefinition
4265 * @brief Export a C++ method with type qualification for 10-parameter methods and custom name (no documentation).
4266 *
4267 * Convenience macro that wraps PY_CLASS_METHOD_QUALIFIED_NAME_DOC_10() with s_doc = nullptr.
4268 *
4269 * @param i_cppClass C++ class containing the method
4270 * @param i_cppMethod C++ method name to export (10 parameters, can be overloaded)
4271 * @param t_return Return type of the method (for disambiguation)
4272 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10 Parameter types for the method (for disambiguation)
4273 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
4274 *
4275 * @sa PY_CLASS_METHOD_QUALIFIED_EX
4276 */
4277#define PY_CLASS_METHOD_QUALIFIED_NAME_10( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, s_methodName )\
4278 PY_CLASS_METHOD_QUALIFIED_NAME_DOC_10(\
4279 i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, s_methodName, 0 )
4280
4281/** @ingroup ClassDefinition
4282 * @brief Export a C++ method with type qualification for 11-parameter methods and custom name (no documentation).
4283 *
4284 * Convenience macro that wraps PY_CLASS_METHOD_QUALIFIED_NAME_DOC_11() with s_doc = nullptr.
4285 *
4286 * @param i_cppClass C++ class containing the method
4287 * @param i_cppMethod C++ method name to export (11 parameters, can be overloaded)
4288 * @param t_return Return type of the method (for disambiguation)
4289 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11 Parameter types for the method (for disambiguation)
4290 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
4291 *
4292 * @sa PY_CLASS_METHOD_QUALIFIED_EX
4293 */
4294#define PY_CLASS_METHOD_QUALIFIED_NAME_11( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, s_methodName )\
4295 PY_CLASS_METHOD_QUALIFIED_NAME_DOC_11(\
4296 i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, s_methodName, 0 )
4297
4298/** @ingroup ClassDefinition
4299 * @brief Export a C++ method with type qualification for 12-parameter methods and custom name (no documentation).
4300 *
4301 * Convenience macro that wraps PY_CLASS_METHOD_QUALIFIED_NAME_DOC_12() with s_doc = nullptr.
4302 *
4303 * @param i_cppClass C++ class containing the method
4304 * @param i_cppMethod C++ method name to export (12 parameters, can be overloaded)
4305 * @param t_return Return type of the method (for disambiguation)
4306 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12 Parameter types for the method (for disambiguation)
4307 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
4308 *
4309 * @sa PY_CLASS_METHOD_QUALIFIED_EX
4310 */
4311#define PY_CLASS_METHOD_QUALIFIED_NAME_12( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, s_methodName )\
4312 PY_CLASS_METHOD_QUALIFIED_NAME_DOC_12(\
4313 i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, s_methodName, 0 )
4314
4315/** @ingroup ClassDefinition
4316 * @brief Export a C++ method with type qualification for 13-parameter methods and custom name (no documentation).
4317 *
4318 * Convenience macro that wraps PY_CLASS_METHOD_QUALIFIED_NAME_DOC_13() with s_doc = nullptr.
4319 *
4320 * @param i_cppClass C++ class containing the method
4321 * @param i_cppMethod C++ method name to export (13 parameters, can be overloaded)
4322 * @param t_return Return type of the method (for disambiguation)
4323 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13 Parameter types for the method (for disambiguation)
4324 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
4325 *
4326 * @sa PY_CLASS_METHOD_QUALIFIED_EX
4327 */
4328#define PY_CLASS_METHOD_QUALIFIED_NAME_13( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, s_methodName )\
4329 PY_CLASS_METHOD_QUALIFIED_NAME_DOC_13(\
4330 i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, s_methodName, 0 )
4331
4332/** @ingroup ClassDefinition
4333 * @brief Export a C++ method with type qualification for 14-parameter methods and custom name (no documentation).
4334 *
4335 * Convenience macro that wraps PY_CLASS_METHOD_QUALIFIED_NAME_DOC_14() with s_doc = nullptr.
4336 *
4337 * @param i_cppClass C++ class containing the method
4338 * @param i_cppMethod C++ method name to export (14 parameters, can be overloaded)
4339 * @param t_return Return type of the method (for disambiguation)
4340 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14 Parameter types for the method (for disambiguation)
4341 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
4342 *
4343 * @sa PY_CLASS_METHOD_QUALIFIED_EX
4344 */
4345#define PY_CLASS_METHOD_QUALIFIED_NAME_14( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, s_methodName )\
4346 PY_CLASS_METHOD_QUALIFIED_NAME_DOC_14(\
4347 i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, s_methodName, 0 )
4348
4349/** @ingroup ClassDefinition
4350 * @brief Export a C++ method with type qualification for 15-parameter methods and custom name (no documentation).
4351 *
4352 * Convenience macro that wraps PY_CLASS_METHOD_QUALIFIED_NAME_DOC_15() with s_doc = nullptr.
4353 *
4354 * @param i_cppClass C++ class containing the method
4355 * @param i_cppMethod C++ method name to export (15 parameters, can be overloaded)
4356 * @param t_return Return type of the method (for disambiguation)
4357 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15 Parameter types for the method (for disambiguation)
4358 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
4359 *
4360 * @sa PY_CLASS_METHOD_QUALIFIED_EX
4361 */
4362#define PY_CLASS_METHOD_QUALIFIED_NAME_15( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15, s_methodName )\
4363 PY_CLASS_METHOD_QUALIFIED_NAME_DOC_15(\
4364 i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15, s_methodName, 0 )
4365
4366
4367/** @ingroup ClassDefinition
4368 * @brief Export a C++ method with type qualification and custom documentation (method name derived from C++ method).
4369 *
4370 * Convenience macro that wraps PY_CLASS_METHOD_QUALIFIED_NAME_DOC() with s_methodName = LASS_STRINGIFY(i_cppMethod).
4371 *
4372 * @param i_cppClass C++ class containing the method
4373 * @param i_cppMethod C++ method name to export (used as Python method name, can be overloaded)
4374 * @param t_return Return type of the method (for disambiguation)
4375 * @param t_params Parameter types as lass::meta::TypeTuple (for disambiguation)
4376 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
4377 *
4378 * @sa PY_CLASS_METHOD_QUALIFIED_EX
4379 */
4380#define PY_CLASS_METHOD_QUALIFIED_DOC( i_cppClass, i_cppMethod, t_return, t_params, s_doc )\
4381 PY_CLASS_METHOD_QUALIFIED_NAME_DOC(\
4382 i_cppClass, i_cppMethod, t_return, t_params, LASS_STRINGIFY(i_cppMethod), s_doc )
4383
4384/** @ingroup ClassDefinition
4385 * @brief Export a C++ method with type qualification for 0-parameter methods and custom documentation (method name derived from C++ method).
4386 *
4387 * Convenience macro that wraps PY_CLASS_METHOD_QUALIFIED_NAME_DOC_0() with s_methodName = LASS_STRINGIFY(i_cppMethod).
4388 *
4389 * @param i_cppClass C++ class containing the method
4390 * @param i_cppMethod C++ method name to export (0 parameters, used as Python method name, can be overloaded)
4391 * @param t_return Return type of the method (for disambiguation)
4392 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
4393 *
4394 * @sa PY_CLASS_METHOD_QUALIFIED_EX
4395 */
4396#define PY_CLASS_METHOD_QUALIFIED_DOC_0( i_cppClass, i_cppMethod, t_return, s_doc )\
4397 PY_CLASS_METHOD_QUALIFIED_NAME_DOC_0(\
4398 i_cppClass, i_cppMethod, t_return, LASS_STRINGIFY(i_cppMethod), s_doc )
4399
4400/** @ingroup ClassDefinition
4401 * @brief Export a C++ method with type qualification for 1-parameter methods and custom documentation (method name derived from C++ method).
4402 *
4403 * Convenience macro that wraps PY_CLASS_METHOD_QUALIFIED_NAME_DOC_1() with s_methodName = LASS_STRINGIFY(i_cppMethod).
4404 *
4405 * @param i_cppClass C++ class containing the method
4406 * @param i_cppMethod C++ method name to export (1 parameters, used as Python method name, can be overloaded)
4407 * @param t_return Return type of the method (for disambiguation)
4408 * @param t_P1 Parameter types for the method (for disambiguation)
4409 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
4410 *
4411 * @sa PY_CLASS_METHOD_QUALIFIED_EX
4412 */
4413#define PY_CLASS_METHOD_QUALIFIED_DOC_1( i_cppClass, i_cppMethod, t_return, t_P1, s_doc )\
4414 PY_CLASS_METHOD_QUALIFIED_NAME_DOC_1(\
4415 i_cppClass, i_cppMethod, t_return, t_P1, LASS_STRINGIFY(i_cppMethod), s_doc )
4416
4417/** @ingroup ClassDefinition
4418 * @brief Export a C++ method with type qualification for 2-parameter methods and custom documentation (method name derived from C++ method).
4419 *
4420 * Convenience macro that wraps PY_CLASS_METHOD_QUALIFIED_NAME_DOC_2() with s_methodName = LASS_STRINGIFY(i_cppMethod).
4421 *
4422 * @param i_cppClass C++ class containing the method
4423 * @param i_cppMethod C++ method name to export (2 parameters, used as Python method name, can be overloaded)
4424 * @param t_return Return type of the method (for disambiguation)
4425 * @param t_P1, t_P2 Parameter types for the method (for disambiguation)
4426 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
4427 *
4428 * @sa PY_CLASS_METHOD_QUALIFIED_EX
4429 */
4430#define PY_CLASS_METHOD_QUALIFIED_DOC_2( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, s_doc )\
4431 PY_CLASS_METHOD_QUALIFIED_NAME_DOC_2(\
4432 i_cppClass, i_cppMethod, t_return, t_P1, t_P2, LASS_STRINGIFY(i_cppMethod), s_doc )
4433
4434/** @ingroup ClassDefinition
4435 * @brief Export a C++ method with type qualification for 3-parameter methods and custom documentation (method name derived from C++ method).
4436 *
4437 * Convenience macro that wraps PY_CLASS_METHOD_QUALIFIED_NAME_DOC_3() with s_methodName = LASS_STRINGIFY(i_cppMethod).
4438 *
4439 * @param i_cppClass C++ class containing the method
4440 * @param i_cppMethod C++ method name to export (3 parameters, used as Python method name, can be overloaded)
4441 * @param t_return Return type of the method (for disambiguation)
4442 * @param t_P1, t_P2, t_P3 Parameter types for the method (for disambiguation)
4443 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
4444 *
4445 * @sa PY_CLASS_METHOD_QUALIFIED_EX
4446 */
4447#define PY_CLASS_METHOD_QUALIFIED_DOC_3( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, s_doc )\
4448 PY_CLASS_METHOD_QUALIFIED_NAME_DOC_3(\
4449 i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, LASS_STRINGIFY(i_cppMethod), s_doc )
4450
4451/** @ingroup ClassDefinition
4452 * @brief Export a C++ method with type qualification for 4-parameter methods and custom documentation (method name derived from C++ method).
4453 *
4454 * Convenience macro that wraps PY_CLASS_METHOD_QUALIFIED_NAME_DOC_4() with s_methodName = LASS_STRINGIFY(i_cppMethod).
4455 *
4456 * @param i_cppClass C++ class containing the method
4457 * @param i_cppMethod C++ method name to export (4 parameters, used as Python method name, can be overloaded)
4458 * @param t_return Return type of the method (for disambiguation)
4459 * @param t_P1, t_P2, t_P3, t_P4 Parameter types for the method (for disambiguation)
4460 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
4461 *
4462 * @sa PY_CLASS_METHOD_QUALIFIED_EX
4463 */
4464#define PY_CLASS_METHOD_QUALIFIED_DOC_4( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, s_doc )\
4465 PY_CLASS_METHOD_QUALIFIED_NAME_DOC_4(\
4466 i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, LASS_STRINGIFY(i_cppMethod), s_doc )
4467
4468/** @ingroup ClassDefinition
4469 * @brief Export a C++ method with type qualification for 5-parameter methods and custom documentation (method name derived from C++ method).
4470 *
4471 * Convenience macro that wraps PY_CLASS_METHOD_QUALIFIED_NAME_DOC_5() with s_methodName = LASS_STRINGIFY(i_cppMethod).
4472 *
4473 * @param i_cppClass C++ class containing the method
4474 * @param i_cppMethod C++ method name to export (5 parameters, used as Python method name, can be overloaded)
4475 * @param t_return Return type of the method (for disambiguation)
4476 * @param t_P1, t_P2, t_P3, t_P4, t_P5 Parameter types for the method (for disambiguation)
4477 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
4478 *
4479 * @sa PY_CLASS_METHOD_QUALIFIED_EX
4480 */
4481#define PY_CLASS_METHOD_QUALIFIED_DOC_5( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, s_doc )\
4482 PY_CLASS_METHOD_QUALIFIED_NAME_DOC_5(\
4483 i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, LASS_STRINGIFY(i_cppMethod), s_doc )
4484
4485/** @ingroup ClassDefinition
4486 * @brief Export a C++ method with type qualification for 6-parameter methods and custom documentation (method name derived from C++ method).
4487 *
4488 * Convenience macro that wraps PY_CLASS_METHOD_QUALIFIED_NAME_DOC_6() with s_methodName = LASS_STRINGIFY(i_cppMethod).
4489 *
4490 * @param i_cppClass C++ class containing the method
4491 * @param i_cppMethod C++ method name to export (6 parameters, used as Python method name, can be overloaded)
4492 * @param t_return Return type of the method (for disambiguation)
4493 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6 Parameter types for the method (for disambiguation)
4494 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
4495 *
4496 * @sa PY_CLASS_METHOD_QUALIFIED_EX
4497 */
4498#define PY_CLASS_METHOD_QUALIFIED_DOC_6( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, s_doc )\
4499 PY_CLASS_METHOD_QUALIFIED_NAME_DOC_6(\
4500 i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, LASS_STRINGIFY(i_cppMethod), s_doc )
4501
4502/** @ingroup ClassDefinition
4503 * @brief Export a C++ method with type qualification for 7-parameter methods and custom documentation (method name derived from C++ method).
4504 *
4505 * Convenience macro that wraps PY_CLASS_METHOD_QUALIFIED_NAME_DOC_7() with s_methodName = LASS_STRINGIFY(i_cppMethod).
4506 *
4507 * @param i_cppClass C++ class containing the method
4508 * @param i_cppMethod C++ method name to export (7 parameters, used as Python method name, can be overloaded)
4509 * @param t_return Return type of the method (for disambiguation)
4510 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7 Parameter types for the method (for disambiguation)
4511 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
4512 *
4513 * @sa PY_CLASS_METHOD_QUALIFIED_EX
4514 */
4515#define PY_CLASS_METHOD_QUALIFIED_DOC_7( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, s_doc )\
4516 PY_CLASS_METHOD_QUALIFIED_NAME_DOC_7(\
4517 i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, LASS_STRINGIFY(i_cppMethod), s_doc )
4518
4519/** @ingroup ClassDefinition
4520 * @brief Export a C++ method with type qualification for 8-parameter methods and custom documentation (method name derived from C++ method).
4521 *
4522 * Convenience macro that wraps PY_CLASS_METHOD_QUALIFIED_NAME_DOC_8() with s_methodName = LASS_STRINGIFY(i_cppMethod).
4523 *
4524 * @param i_cppClass C++ class containing the method
4525 * @param i_cppMethod C++ method name to export (8 parameters, used as Python method name, can be overloaded)
4526 * @param t_return Return type of the method (for disambiguation)
4527 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8 Parameter types for the method (for disambiguation)
4528 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
4529 *
4530 * @sa PY_CLASS_METHOD_QUALIFIED_EX
4531 */
4532#define PY_CLASS_METHOD_QUALIFIED_DOC_8( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, s_doc )\
4533 PY_CLASS_METHOD_QUALIFIED_NAME_DOC_8(\
4534 i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, LASS_STRINGIFY(i_cppMethod), s_doc )
4535
4536/** @ingroup ClassDefinition
4537 * @brief Export a C++ method with type qualification for 9-parameter methods and custom documentation (method name derived from C++ method).
4538 *
4539 * Convenience macro that wraps PY_CLASS_METHOD_QUALIFIED_NAME_DOC_9() with s_methodName = LASS_STRINGIFY(i_cppMethod).
4540 *
4541 * @param i_cppClass C++ class containing the method
4542 * @param i_cppMethod C++ method name to export (9 parameters, used as Python method name, can be overloaded)
4543 * @param t_return Return type of the method (for disambiguation)
4544 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9 Parameter types for the method (for disambiguation)
4545 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
4546 *
4547 * @sa PY_CLASS_METHOD_QUALIFIED_EX
4548 */
4549#define PY_CLASS_METHOD_QUALIFIED_DOC_9( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, s_doc )\
4550 PY_CLASS_METHOD_QUALIFIED_NAME_DOC_9(\
4551 i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, LASS_STRINGIFY(i_cppMethod), s_doc )
4552
4553/** @ingroup ClassDefinition
4554 * @brief Export a C++ method with type qualification for 10-parameter methods and custom documentation (method name derived from C++ method).
4555 *
4556 * Convenience macro that wraps PY_CLASS_METHOD_QUALIFIED_NAME_DOC_10() with s_methodName = LASS_STRINGIFY(i_cppMethod).
4557 *
4558 * @param i_cppClass C++ class containing the method
4559 * @param i_cppMethod C++ method name to export (10 parameters, used as Python method name, can be overloaded)
4560 * @param t_return Return type of the method (for disambiguation)
4561 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10 Parameter types for the method (for disambiguation)
4562 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
4563 *
4564 * @sa PY_CLASS_METHOD_QUALIFIED_EX
4565 */
4566#define PY_CLASS_METHOD_QUALIFIED_DOC_10( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, s_doc )\
4567 PY_CLASS_METHOD_QUALIFIED_NAME_DOC_10(\
4568 i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, LASS_STRINGIFY(i_cppMethod), s_doc )
4569
4570/** @ingroup ClassDefinition
4571 * @brief Export a C++ method with type qualification for 11-parameter methods and custom documentation (method name derived from C++ method).
4572 *
4573 * Convenience macro that wraps PY_CLASS_METHOD_QUALIFIED_NAME_DOC_11() with s_methodName = LASS_STRINGIFY(i_cppMethod).
4574 *
4575 * @param i_cppClass C++ class containing the method
4576 * @param i_cppMethod C++ method name to export (11 parameters, used as Python method name, can be overloaded)
4577 * @param t_return Return type of the method (for disambiguation)
4578 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11 Parameter types for the method (for disambiguation)
4579 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
4580 *
4581 * @sa PY_CLASS_METHOD_QUALIFIED_EX
4582 */
4583#define PY_CLASS_METHOD_QUALIFIED_DOC_11( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, s_doc )\
4584 PY_CLASS_METHOD_QUALIFIED_NAME_DOC_11(\
4585 i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, LASS_STRINGIFY(i_cppMethod), s_doc )
4586
4587/** @ingroup ClassDefinition
4588 * @brief Export a C++ method with type qualification for 12-parameter methods and custom documentation (method name derived from C++ method).
4589 *
4590 * Convenience macro that wraps PY_CLASS_METHOD_QUALIFIED_NAME_DOC_12() with s_methodName = LASS_STRINGIFY(i_cppMethod).
4591 *
4592 * @param i_cppClass C++ class containing the method
4593 * @param i_cppMethod C++ method name to export (12 parameters, used as Python method name, can be overloaded)
4594 * @param t_return Return type of the method (for disambiguation)
4595 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12 Parameter types for the method (for disambiguation)
4596 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
4597 *
4598 * @sa PY_CLASS_METHOD_QUALIFIED_EX
4599 */
4600#define PY_CLASS_METHOD_QUALIFIED_DOC_12( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, s_doc )\
4601 PY_CLASS_METHOD_QUALIFIED_NAME_DOC_12(\
4602 i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, LASS_STRINGIFY(i_cppMethod), s_doc )
4603
4604/** @ingroup ClassDefinition
4605 * @brief Export a C++ method with type qualification for 13-parameter methods and custom documentation (method name derived from C++ method).
4606 *
4607 * Convenience macro that wraps PY_CLASS_METHOD_QUALIFIED_NAME_DOC_13() with s_methodName = LASS_STRINGIFY(i_cppMethod).
4608 *
4609 * @param i_cppClass C++ class containing the method
4610 * @param i_cppMethod C++ method name to export (13 parameters, used as Python method name, can be overloaded)
4611 * @param t_return Return type of the method (for disambiguation)
4612 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13 Parameter types for the method (for disambiguation)
4613 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
4614 *
4615 * @sa PY_CLASS_METHOD_QUALIFIED_EX
4616 */
4617#define PY_CLASS_METHOD_QUALIFIED_DOC_13( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, s_doc )\
4618 PY_CLASS_METHOD_QUALIFIED_NAME_DOC_13(\
4619 i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, LASS_STRINGIFY(i_cppMethod), s_doc )
4620
4621/** @ingroup ClassDefinition
4622 * @brief Export a C++ method with type qualification for 14-parameter methods and custom documentation (method name derived from C++ method).
4623 *
4624 * Convenience macro that wraps PY_CLASS_METHOD_QUALIFIED_NAME_DOC_14() with s_methodName = LASS_STRINGIFY(i_cppMethod).
4625 *
4626 * @param i_cppClass C++ class containing the method
4627 * @param i_cppMethod C++ method name to export (14 parameters, used as Python method name, can be overloaded)
4628 * @param t_return Return type of the method (for disambiguation)
4629 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14 Parameter types for the method (for disambiguation)
4630 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
4631 *
4632 * @sa PY_CLASS_METHOD_QUALIFIED_EX
4633 */
4634#define PY_CLASS_METHOD_QUALIFIED_DOC_14( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, s_doc )\
4635 PY_CLASS_METHOD_QUALIFIED_NAME_DOC_14(\
4636 i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, LASS_STRINGIFY(i_cppMethod), s_doc )
4637
4638/** @ingroup ClassDefinition
4639 * @brief Export a C++ method with type qualification for 15-parameter methods and custom documentation (method name derived from C++ method).
4640 *
4641 * Convenience macro that wraps PY_CLASS_METHOD_QUALIFIED_NAME_DOC_15() with s_methodName = LASS_STRINGIFY(i_cppMethod).
4642 *
4643 * @param i_cppClass C++ class containing the method
4644 * @param i_cppMethod C++ method name to export (15 parameters, used as Python method name, can be overloaded)
4645 * @param t_return Return type of the method (for disambiguation)
4646 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15 Parameter types for the method (for disambiguation)
4647 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
4648 *
4649 * @sa PY_CLASS_METHOD_QUALIFIED_EX
4650 */
4651#define PY_CLASS_METHOD_QUALIFIED_DOC_15( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15, s_doc )\
4652 PY_CLASS_METHOD_QUALIFIED_NAME_DOC_15(\
4653 i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15, LASS_STRINGIFY(i_cppMethod), s_doc )
4654
4655
4656/** @ingroup ClassDefinition
4657 * @brief Export a C++ method with type qualification (method name derived from C++ method, no documentation).
4658 *
4659 * Convenience macro that wraps PY_CLASS_METHOD_QUALIFIED_DOC() with s_doc = nullptr.
4660 *
4661 * @param i_cppClass C++ class containing the method
4662 * @param i_cppMethod C++ method name to export (used as Python method name, can be overloaded)
4663 * @param t_return Return type of the method (for disambiguation)
4664 * @param t_params Parameter types as lass::meta::TypeTuple (for disambiguation)
4665 *
4666 * @sa PY_CLASS_METHOD_QUALIFIED_EX
4667 */
4668#define PY_CLASS_METHOD_QUALIFIED( i_cppClass, i_cppMethod, t_return, t_params )\
4669 PY_CLASS_METHOD_QUALIFIED_DOC( i_cppClass, i_cppMethod, t_return, t_params, 0 )
4670
4671/** @ingroup ClassDefinition
4672 * @brief Export a C++ method with type qualification for 0-parameter methods (method name derived from C++ method, no documentation).
4673 *
4674 * Convenience macro that wraps PY_CLASS_METHOD_QUALIFIED_DOC_0() with s_doc = nullptr.
4675 *
4676 * @param i_cppClass C++ class containing the method
4677 * @param i_cppMethod C++ method name to export (0 parameters, used as Python method name, can be overloaded)
4678 * @param t_return Return type of the method (for disambiguation)
4679 *
4680 * @sa PY_CLASS_METHOD_QUALIFIED_EX
4681 */
4682#define PY_CLASS_METHOD_QUALIFIED_0( i_cppClass, i_cppMethod, t_return )\
4683 PY_CLASS_METHOD_QUALIFIED_DOC_0( i_cppClass, i_cppMethod, t_return, 0 )
4684
4685/** @ingroup ClassDefinition
4686 * @brief Export a C++ method with type qualification for 1-parameter methods (method name derived from C++ method, no documentation).
4687 *
4688 * Convenience macro that wraps PY_CLASS_METHOD_QUALIFIED_DOC_1() with s_doc = nullptr.
4689 *
4690 * @param i_cppClass C++ class containing the method
4691 * @param i_cppMethod C++ method name to export (1 parameters, used as Python method name, can be overloaded)
4692 * @param t_return Return type of the method (for disambiguation)
4693 * @param t_P1 Parameter types for the method (for disambiguation)
4694 *
4695 * @sa PY_CLASS_METHOD_QUALIFIED_EX
4696 */
4697#define PY_CLASS_METHOD_QUALIFIED_1( i_cppClass, i_cppMethod, t_return, t_P1 )\
4698 PY_CLASS_METHOD_QUALIFIED_DOC_1( i_cppClass, i_cppMethod, t_return, t_P1, 0 )
4699
4700/** @ingroup ClassDefinition
4701 * @brief Export a C++ method with type qualification for 2-parameter methods (method name derived from C++ method, no documentation).
4702 *
4703 * Convenience macro that wraps PY_CLASS_METHOD_QUALIFIED_DOC_2() with s_doc = nullptr.
4704 *
4705 * @param i_cppClass C++ class containing the method
4706 * @param i_cppMethod C++ method name to export (2 parameters, used as Python method name, can be overloaded)
4707 * @param t_return Return type of the method (for disambiguation)
4708 * @param t_P1, t_P2 Parameter types for the method (for disambiguation)
4709 *
4710 * @sa PY_CLASS_METHOD_QUALIFIED_EX
4711 */
4712#define PY_CLASS_METHOD_QUALIFIED_2( i_cppClass, i_cppMethod, t_return, t_P1, t_P2 )\
4713 PY_CLASS_METHOD_QUALIFIED_DOC_2( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, 0 )
4714
4715/** @ingroup ClassDefinition
4716 * @brief Export a C++ method with type qualification for 3-parameter methods (method name derived from C++ method, no documentation).
4717 *
4718 * Convenience macro that wraps PY_CLASS_METHOD_QUALIFIED_DOC_3() with s_doc = nullptr.
4719 *
4720 * @param i_cppClass C++ class containing the method
4721 * @param i_cppMethod C++ method name to export (3 parameters, used as Python method name, can be overloaded)
4722 * @param t_return Return type of the method (for disambiguation)
4723 * @param t_P1, t_P2, t_P3 Parameter types for the method (for disambiguation)
4724 *
4725 * @sa PY_CLASS_METHOD_QUALIFIED_EX
4726 */
4727#define PY_CLASS_METHOD_QUALIFIED_3( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3 )\
4728 PY_CLASS_METHOD_QUALIFIED_DOC_3( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, 0 )
4729
4730/** @ingroup ClassDefinition
4731 * @brief Export a C++ method with type qualification for 4-parameter methods (method name derived from C++ method, no documentation).
4732 *
4733 * Convenience macro that wraps PY_CLASS_METHOD_QUALIFIED_DOC_4() with s_doc = nullptr.
4734 *
4735 * @param i_cppClass C++ class containing the method
4736 * @param i_cppMethod C++ method name to export (4 parameters, used as Python method name, can be overloaded)
4737 * @param t_return Return type of the method (for disambiguation)
4738 * @param t_P1, t_P2, t_P3, t_P4 Parameter types for the method (for disambiguation)
4739 *
4740 * @sa PY_CLASS_METHOD_QUALIFIED_EX
4741 */
4742#define PY_CLASS_METHOD_QUALIFIED_4( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4 )\
4743 PY_CLASS_METHOD_QUALIFIED_DOC_4( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, 0 )
4744
4745/** @ingroup ClassDefinition
4746 * @brief Export a C++ method with type qualification for 5-parameter methods (method name derived from C++ method, no documentation).
4747 *
4748 * Convenience macro that wraps PY_CLASS_METHOD_QUALIFIED_DOC_5() with s_doc = nullptr.
4749 *
4750 * @param i_cppClass C++ class containing the method
4751 * @param i_cppMethod C++ method name to export (5 parameters, used as Python method name, can be overloaded)
4752 * @param t_return Return type of the method (for disambiguation)
4753 * @param t_P1, t_P2, t_P3, t_P4, t_P5 Parameter types for the method (for disambiguation)
4754 *
4755 * @sa PY_CLASS_METHOD_QUALIFIED_EX
4756 */
4757#define PY_CLASS_METHOD_QUALIFIED_5( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5 )\
4758 PY_CLASS_METHOD_QUALIFIED_DOC_5( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, 0 )
4759
4760/** @ingroup ClassDefinition
4761 * @brief Export a C++ method with type qualification for 6-parameter methods (method name derived from C++ method, no documentation).
4762 *
4763 * Convenience macro that wraps PY_CLASS_METHOD_QUALIFIED_DOC_6() with s_doc = nullptr.
4764 *
4765 * @param i_cppClass C++ class containing the method
4766 * @param i_cppMethod C++ method name to export (6 parameters, used as Python method name, can be overloaded)
4767 * @param t_return Return type of the method (for disambiguation)
4768 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6 Parameter types for the method (for disambiguation)
4769 *
4770 * @sa PY_CLASS_METHOD_QUALIFIED_EX
4771 */
4772#define PY_CLASS_METHOD_QUALIFIED_6( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6 )\
4773 PY_CLASS_METHOD_QUALIFIED_DOC_6( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, 0 )
4774
4775/** @ingroup ClassDefinition
4776 * @brief Export a C++ method with type qualification for 7-parameter methods (method name derived from C++ method, no documentation).
4777 *
4778 * Convenience macro that wraps PY_CLASS_METHOD_QUALIFIED_DOC_7() with s_doc = nullptr.
4779 *
4780 * @param i_cppClass C++ class containing the method
4781 * @param i_cppMethod C++ method name to export (7 parameters, used as Python method name, can be overloaded)
4782 * @param t_return Return type of the method (for disambiguation)
4783 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7 Parameter types for the method (for disambiguation)
4784 *
4785 * @sa PY_CLASS_METHOD_QUALIFIED_EX
4786 */
4787#define PY_CLASS_METHOD_QUALIFIED_7( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7 )\
4788 PY_CLASS_METHOD_QUALIFIED_DOC_7( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, 0 )
4789
4790/** @ingroup ClassDefinition
4791 * @brief Export a C++ method with type qualification for 8-parameter methods (method name derived from C++ method, no documentation).
4792 *
4793 * Convenience macro that wraps PY_CLASS_METHOD_QUALIFIED_DOC_8() with s_doc = nullptr.
4794 *
4795 * @param i_cppClass C++ class containing the method
4796 * @param i_cppMethod C++ method name to export (8 parameters, used as Python method name, can be overloaded)
4797 * @param t_return Return type of the method (for disambiguation)
4798 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8 Parameter types for the method (for disambiguation)
4799 *
4800 * @sa PY_CLASS_METHOD_QUALIFIED_EX
4801 */
4802#define PY_CLASS_METHOD_QUALIFIED_8( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8 )\
4803 PY_CLASS_METHOD_QUALIFIED_DOC_8( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, 0 )
4804
4805/** @ingroup ClassDefinition
4806 * @brief Export a C++ method with type qualification for 9-parameter methods (method name derived from C++ method, no documentation).
4807 *
4808 * Convenience macro that wraps PY_CLASS_METHOD_QUALIFIED_DOC_9() with s_doc = nullptr.
4809 *
4810 * @param i_cppClass C++ class containing the method
4811 * @param i_cppMethod C++ method name to export (9 parameters, used as Python method name, can be overloaded)
4812 * @param t_return Return type of the method (for disambiguation)
4813 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9 Parameter types for the method (for disambiguation)
4814 *
4815 * @sa PY_CLASS_METHOD_QUALIFIED_EX
4816 */
4817#define PY_CLASS_METHOD_QUALIFIED_9( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9 )\
4818 PY_CLASS_METHOD_QUALIFIED_DOC_9( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, 0 )
4819
4820/** @ingroup ClassDefinition
4821 * @brief Export a C++ method with type qualification for 10-parameter methods (method name derived from C++ method, no documentation).
4822 *
4823 * Convenience macro that wraps PY_CLASS_METHOD_QUALIFIED_DOC_10() with s_doc = nullptr.
4824 *
4825 * @param i_cppClass C++ class containing the method
4826 * @param i_cppMethod C++ method name to export (10 parameters, used as Python method name, can be overloaded)
4827 * @param t_return Return type of the method (for disambiguation)
4828 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10 Parameter types for the method (for disambiguation)
4829 *
4830 * @sa PY_CLASS_METHOD_QUALIFIED_EX
4831 */
4832#define PY_CLASS_METHOD_QUALIFIED_10( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10 )\
4833 PY_CLASS_METHOD_QUALIFIED_DOC_10( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, 0 )
4834
4835/** @ingroup ClassDefinition
4836 * @brief Export a C++ method with type qualification for 11-parameter methods (method name derived from C++ method, no documentation).
4837 *
4838 * Convenience macro that wraps PY_CLASS_METHOD_QUALIFIED_DOC_11() with s_doc = nullptr.
4839 *
4840 * @param i_cppClass C++ class containing the method
4841 * @param i_cppMethod C++ method name to export (11 parameters, used as Python method name, can be overloaded)
4842 * @param t_return Return type of the method (for disambiguation)
4843 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11 Parameter types for the method (for disambiguation)
4844 *
4845 * @sa PY_CLASS_METHOD_QUALIFIED_EX
4846 */
4847#define PY_CLASS_METHOD_QUALIFIED_11( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11 )\
4848 PY_CLASS_METHOD_QUALIFIED_DOC_11( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, 0 )
4849
4850/** @ingroup ClassDefinition
4851 * @brief Export a C++ method with type qualification for 12-parameter methods (method name derived from C++ method, no documentation).
4852 *
4853 * Convenience macro that wraps PY_CLASS_METHOD_QUALIFIED_DOC_12() with s_doc = nullptr.
4854 *
4855 * @param i_cppClass C++ class containing the method
4856 * @param i_cppMethod C++ method name to export (12 parameters, used as Python method name, can be overloaded)
4857 * @param t_return Return type of the method (for disambiguation)
4858 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12 Parameter types for the method (for disambiguation)
4859 *
4860 * @sa PY_CLASS_METHOD_QUALIFIED_EX
4861 */
4862#define PY_CLASS_METHOD_QUALIFIED_12( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12 )\
4863 PY_CLASS_METHOD_QUALIFIED_DOC_12( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, 0 )
4864
4865/** @ingroup ClassDefinition
4866 * @brief Export a C++ method with type qualification for 13-parameter methods (method name derived from C++ method, no documentation).
4867 *
4868 * Convenience macro that wraps PY_CLASS_METHOD_QUALIFIED_DOC_13() with s_doc = nullptr.
4869 *
4870 * @param i_cppClass C++ class containing the method
4871 * @param i_cppMethod C++ method name to export (13 parameters, used as Python method name, can be overloaded)
4872 * @param t_return Return type of the method (for disambiguation)
4873 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13 Parameter types for the method (for disambiguation)
4874 *
4875 * @sa PY_CLASS_METHOD_QUALIFIED_EX
4876 */
4877#define PY_CLASS_METHOD_QUALIFIED_13( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13 )\
4878 PY_CLASS_METHOD_QUALIFIED_DOC_13( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, 0 )
4879
4880/** @ingroup ClassDefinition
4881 * @brief Export a C++ method with type qualification for 14-parameter methods (method name derived from C++ method, no documentation).
4882 *
4883 * Convenience macro that wraps PY_CLASS_METHOD_QUALIFIED_DOC_14() with s_doc = nullptr.
4884 *
4885 * @param i_cppClass C++ class containing the method
4886 * @param i_cppMethod C++ method name to export (14 parameters, used as Python method name, can be overloaded)
4887 * @param t_return Return type of the method (for disambiguation)
4888 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14 Parameter types for the method (for disambiguation)
4889 *
4890 * @sa PY_CLASS_METHOD_QUALIFIED_EX
4891 */
4892#define PY_CLASS_METHOD_QUALIFIED_14( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14 )\
4893 PY_CLASS_METHOD_QUALIFIED_DOC_14( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, 0 )
4894
4895/** @ingroup ClassDefinition
4896 * @brief Export a C++ method with type qualification for 15-parameter methods (method name derived from C++ method, no documentation).
4897 *
4898 * Convenience macro that wraps PY_CLASS_METHOD_QUALIFIED_DOC_15() with s_doc = nullptr.
4899 *
4900 * @param i_cppClass C++ class containing the method
4901 * @param i_cppMethod C++ method name to export (15 parameters, used as Python method name, can be overloaded)
4902 * @param t_return Return type of the method (for disambiguation)
4903 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15 Parameter types for the method (for disambiguation)
4904 *
4905 * @sa PY_CLASS_METHOD_QUALIFIED_EX
4906 */
4907#define PY_CLASS_METHOD_QUALIFIED_15( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15 )\
4908 PY_CLASS_METHOD_QUALIFIED_DOC_15( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15, 0 )
4909
4910
4911/** @} */
4912
4913// --- "free" methods ------------------------------------------------------------------------------
4914
4915/** @addtogroup ClassDefinition
4916 * @name Free Method Export Macros
4917 *
4918 * Export C/C++ free functions as Python methods. The first parameter of the free function
4919 * becomes the implicit 'self' parameter and must be a pointer or reference (const or non-const)
4920 * to the class being exported. This is particularly useful for shadow classes where adding
4921 * methods directly to the class is undesirable or impossible.
4922 *
4923 * @{
4924 */
4925
4926/** @ingroup ClassDefinition
4927 * @brief Export a C/C++ free function as a Python method with full control over all parameters.
4928 *
4929 * This macro allows you to export a C/C++ free function as a Python method. The free function
4930 * must accept a pointer or reference to the object as first argument (const or non-const).
4931 * This is extremely useful when using shadow classes to export a C++ class, because in such
4932 * cases, it's often undesirable or impossible to write the function as a method.
4933 *
4934 * Like PY_CLASS_METHOD_EX(), this macro supports overloading. These overloads may be mixed
4935 * with PY_CLASS_METHOD_EX() methods.
4936 *
4937 * @param t_cppClass C++ class you're exporting the method for
4938 * @param f_cppFreeMethod C++ function to export (can be function pointer or std::function)
4939 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
4940 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
4941 * @param i_dispatcher Unique identifier for the generated dispatcher function
4942 *
4943 * ```cpp
4944 * // foo.h
4945 * class Foo
4946 * {
4947 * PY_HEADER(python::PyObjectPlus)
4948 * };
4949 *
4950 * void barA(Foo* foo, int a);
4951 * void barB(const Foo&, const std::string& b);
4952 *
4953 * // foo.cpp
4954 * PY_DECLARE_CLASS(Foo)
4955 * PY_CLASS_FREE_METHOD_EX(Foo, barA, "bar", nullptr, foo_bar_a)
4956 * PY_CLASS_FREE_METHOD_EX(Foo, barB, "bar", nullptr, foo_bar_b)
4957 * ```
4958 */
4959#define PY_CLASS_FREE_METHOD_EX(t_cppClass, f_cppFreeMethod, s_methodName, s_doc, i_dispatcher)\
4960 PY_CLASS_METHOD_IMPL(t_cppClass, f_cppFreeMethod, s_methodName, s_doc, i_dispatcher,\
4961 ::lass::python::impl::CallMethod<TShadowTraits>::callFree)
4962
4963/** @ingroup ClassDefinition
4964 * @brief Export a C/C++ free function as a Python method with custom name and documentation.
4965 *
4966 * Convenience macro that wraps PY_CLASS_FREE_METHOD_EX() with automatically generated dispatcher name.
4967 *
4968 * @param i_cppClass C++ class you're exporting the method for
4969 * @param f_cppFreeMethod C++ function to export (can be function pointer or std::function)
4970 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
4971 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
4972 *
4973 * @sa PY_CLASS_FREE_METHOD_EX
4974 */
4975#define PY_CLASS_FREE_METHOD_NAME_DOC( i_cppClass, f_cppFreeMethod, s_methodName, s_doc )\
4976 PY_CLASS_FREE_METHOD_EX(\
4977 i_cppClass, f_cppFreeMethod, s_methodName, s_doc,\
4978 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)))
4979
4980/** @ingroup ClassDefinition
4981 * @brief Export a C/C++ free function as a Python method with custom name (no documentation).
4982 *
4983 * Convenience macro that wraps PY_CLASS_FREE_METHOD_NAME_DOC() with s_doc = nullptr.
4984 *
4985 * @param i_cppClass C++ class you're exporting the method for
4986 * @param f_cppFreeMethod C++ function to export (can be function pointer or std::function)
4987 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
4988 *
4989 * @sa PY_CLASS_FREE_METHOD_EX
4990 */
4991#define PY_CLASS_FREE_METHOD_NAME( i_cppClass, f_cppFreeMethod, s_methodName )\
4992 PY_CLASS_FREE_METHOD_NAME_DOC( i_cppClass, f_cppFreeMethod, s_methodName, 0 )
4993
4994/** @ingroup ClassDefinition
4995 * @brief Export a C/C++ free function as a Python method with custom documentation (method name derived from function name).
4996 *
4997 * Convenience macro that wraps PY_CLASS_FREE_METHOD_NAME_DOC() with s_methodName = LASS_STRINGIFY(i_cppFreeMethod).
4998 *
4999 * @param i_cppClass C++ class you're exporting the method for
5000 * @param i_cppFreeMethod C++ function identifier to export (must be valid identifier, used as Python method name)
5001 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
5002 *
5003 * @sa PY_CLASS_FREE_METHOD_EX
5004 */
5005#define PY_CLASS_FREE_METHOD_DOC( i_cppClass, i_cppFreeMethod, s_doc )\
5006 PY_CLASS_FREE_METHOD_NAME_DOC( i_cppClass, i_cppFreeMethod, LASS_STRINGIFY(i_cppFreeMethod), s_doc)
5007
5008/** @ingroup ClassDefinition
5009 * @brief Export a C/C++ free function as a Python method (method name derived from function name, no documentation).
5010 *
5011 * Convenience macro that wraps PY_CLASS_FREE_METHOD_DOC() with s_doc = nullptr.
5012 *
5013 * @param i_cppClass C++ class you're exporting the method for
5014 * @param i_cppFreeMethod C++ function identifier to export (must be valid identifier, used as Python method name)
5015 *
5016 * @sa PY_CLASS_FREE_METHOD_EX
5017 */
5018#define PY_CLASS_FREE_METHOD( i_cppClass, i_cppFreeMethod )\
5019 PY_CLASS_FREE_METHOD_DOC( i_cppClass, i_cppFreeMethod, 0 )
5020
5021/** @} */
5022
5023/** @addtogroup ClassDefinition
5024 * @name Type-Qualified Free Method Export Macros
5025 *
5026 * Export C++ free functions as Python methods with explicit type qualification to resolve
5027 * overload ambiguity. These macros require explicit specification of return type and parameter
5028 * types, making them suitable for overloaded free functions. The first parameter of the free
5029 * function becomes the implicit 'self' parameter and must be a pointer or reference (const or
5030 * non-const) to the class being exported.
5031 *
5032 * @{
5033 */
5034
5035/** @ingroup ClassDefinition
5036 * @brief Export a C++ free function as a Python method with explicit type qualification and full parameter control.
5037 *
5038 * This macro allows you to export a C++ free function as a Python method when there's
5039 * ambiguity due to overloading. It explicitly specifies return type and parameter types
5040 * to resolve such ambiguity. The free function must accept a pointer or reference to the
5041 * object as first argument (const or non-const).
5042 *
5043 * Like PY_CLASS_FREE_METHOD_EX(), this macro supports overloading and these overloads
5044 * may be mixed with PY_CLASS_FREE_METHOD_EX() methods.
5045 *
5046 * @param t_cppClass C++ class you're exporting the method for
5047 * @param f_cppFreeMethod C++ function to export (can be function pointer or std::function)
5048 * @param t_return Return type of the free function (for disambiguation)
5049 * @param t_params Parameter types as lass::meta::TypeTuple (for disambiguation)
5050 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
5051 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
5052 * @param i_dispatcher Unique identifier for the generated dispatcher function
5053 *
5054 * ```cpp
5055 * // foo.h
5056 * class Foo
5057 * {
5058 * PY_HEADER(python::PyObjectPlus)
5059 * public:
5060 * // ...
5061 * };
5062 *
5063 * void bar(Foo& foo, int a);
5064 * void bar(const Foo&, const std::string& b);
5065 *
5066 * // foo.cpp
5067 * PY_DECLARE_CLASS(Foo)
5068 * PY_CLASS_FREE_METHOD_QUALIFIED_EX(Foo, bar, void, meta::TypeTuple<int>, "bar", nullptr, foo_bar_a)
5069 * PY_CLASS_FREE_METHOD_QUALIFIED_EX(Foo, bar, void, meta::TypeTuple<const std::string&>, "bar", nullptr, foo_bar_b)
5070 * ```
5071 */
5072#define PY_CLASS_FREE_METHOD_QUALIFIED_EX(t_cppClass, f_cppFreeMethod, t_return, t_params, s_methodName, s_doc, i_dispatcher)\
5073 static ::lass::python::impl::OverloadLink LASS_CONCATENATE(i_dispatcher, _overloadChain);\
5074 extern "C" LASS_DLL_LOCAL PyObject* i_dispatcher(PyObject* iObject, PyObject* iArgs)\
5075 {\
5076 PyObject* result = 0;\
5077 if (LASS_CONCATENATE(i_dispatcher, _overloadChain)(iObject, iArgs, result))\
5078 {\
5079 return result;\
5080 }\
5081 LASS_ASSERT(result == 0);\
5082 typedef ::lass::python::impl::ShadowTraits< t_cppClass > TShadowTraits;\
5083 return ::lass::python::impl::ExplicitResolver<TShadowTraits,t_return,t_params>::callFreeMethod(\
5084 iArgs, iObject, f_cppFreeMethod); \
5085 }\
5086 LASS_EXECUTE_BEFORE_MAIN_EX(LASS_CONCATENATE(i_dispatcher, _executeBeforeMain),\
5087 t_cppClass ::_lassPyClassDef.addMethod(\
5088 s_methodName, s_doc, \
5089 ::lass::python::impl::FunctionTypeDispatcher< SPECIAL_SLOT_TYPE(s_methodName) , i_dispatcher>::fun,\
5090 LASS_CONCATENATE(i_dispatcher, _overloadChain));\
5091 )
5092
5093/** @ingroup ClassDefinition
5094 * @brief Export a C++ free function as a Python method with type qualification for 0-parameter functions.
5095 *
5096 * Convenience macro that wraps PY_CLASS_FREE_METHOD_QUALIFIED_EX() for free functions with 0 parameters.
5097 *
5098 * @param t_cppClass C++ class you're exporting the method for
5099 * @param f_cppFreeMethod C++ function to export (can be function pointer or std::function, 0 parameters, can be overloaded)
5100 * @param t_return Return type of the free function (for disambiguation)
5101 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
5102 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
5103 * @param i_dispatcher Unique identifier for the generated dispatcher function
5104 *
5105 * @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
5106 */
5107#define PY_CLASS_FREE_METHOD_QUALIFIED_EX_0( t_cppClass, f_cppFreeMethod, t_return, s_methodName, s_doc, i_dispatcher )\
5108 PY_CLASS_FREE_METHOD_QUALIFIED_EX(\
5109 t_cppClass, f_cppFreeMethod, t_return, ::lass::meta::TypeTuple<>, s_methodName, s_doc, i_dispatcher )
5110
5111/** @ingroup ClassDefinition
5112 * @brief Export a C++ free function as a Python method with type qualification for 1-parameter functions.
5113 *
5114 * Convenience macro that wraps PY_CLASS_FREE_METHOD_QUALIFIED_EX() for free functions with 1 parameters.
5115 *
5116 * @param t_cppClass C++ class you're exporting the method for
5117 * @param f_cppFreeMethod C++ function to export (can be function pointer or std::function, 1 parameters, can be overloaded)
5118 * @param t_return Return type of the free function (for disambiguation)
5119 * @param t_P1 Parameter types for the free function (for disambiguation)
5120 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
5121 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
5122 * @param i_dispatcher Unique identifier for the generated dispatcher function
5123 *
5124 * @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
5125 */
5126#define PY_CLASS_FREE_METHOD_QUALIFIED_EX_1( t_cppClass, f_cppFreeMethod, t_return, t_P1, s_methodName, s_doc, i_dispatcher )\
5127 typedef ::lass::meta::TypeTuple< t_P1 > \
5128 LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams));\
5129 PY_CLASS_FREE_METHOD_QUALIFIED_EX(\
5130 t_cppClass, f_cppFreeMethod, t_return,\
5131 LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams)), s_methodName, s_doc,\
5132 i_dispatcher )
5133
5134/** @ingroup ClassDefinition
5135 * @brief Export a C++ free function as a Python method with type qualification for 2-parameter functions.
5136 *
5137 * Convenience macro that wraps PY_CLASS_FREE_METHOD_QUALIFIED_EX() for free functions with 2 parameters.
5138 *
5139 * @param t_cppClass C++ class you're exporting the method for
5140 * @param f_cppFreeMethod C++ function to export (can be function pointer or std::function, 2 parameters, can be overloaded)
5141 * @param t_return Return type of the free function (for disambiguation)
5142 * @param t_P1, t_P2 Parameter types for the free function (for disambiguation)
5143 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
5144 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
5145 * @param i_dispatcher Unique identifier for the generated dispatcher function
5146 *
5147 * @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
5148 */
5149#define PY_CLASS_FREE_METHOD_QUALIFIED_EX_2( t_cppClass, f_cppFreeMethod, t_return, t_P1, t_P2, s_methodName, s_doc, i_dispatcher )\
5150 typedef ::lass::meta::TypeTuple< t_P1, t_P2 > \
5151 LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams));\
5152 PY_CLASS_FREE_METHOD_QUALIFIED_EX(\
5153 t_cppClass, f_cppFreeMethod, t_return,\
5154 LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams)), s_methodName, s_doc,\
5155 i_dispatcher )
5156
5157/** @ingroup ClassDefinition
5158 * @brief Export a C++ free function as a Python method with type qualification for 3-parameter functions.
5159 *
5160 * Convenience macro that wraps PY_CLASS_FREE_METHOD_QUALIFIED_EX() for free functions with 3 parameters.
5161 *
5162 * @param t_cppClass C++ class you're exporting the method for
5163 * @param f_cppFreeMethod C++ function to export (can be function pointer or std::function, 3 parameters, can be overloaded)
5164 * @param t_return Return type of the free function (for disambiguation)
5165 * @param t_P1, t_P2, t_P3 Parameter types for the free function (for disambiguation)
5166 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
5167 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
5168 * @param i_dispatcher Unique identifier for the generated dispatcher function
5169 *
5170 * @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
5171 */
5172#define PY_CLASS_FREE_METHOD_QUALIFIED_EX_3( t_cppClass, f_cppFreeMethod, t_return, t_P1, t_P2, t_P3, s_methodName, s_doc, i_dispatcher )\
5173 typedef ::lass::meta::TypeTuple< t_P1, t_P2, t_P3 > \
5174 LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams));\
5175 PY_CLASS_FREE_METHOD_QUALIFIED_EX(\
5176 t_cppClass, f_cppFreeMethod, t_return,\
5177 LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams)), s_methodName, s_doc,\
5178 i_dispatcher )
5179
5180/** @ingroup ClassDefinition
5181 * @brief Export a C++ free function as a Python method with type qualification for 4-parameter functions.
5182 *
5183 * Convenience macro that wraps PY_CLASS_FREE_METHOD_QUALIFIED_EX() for free functions with 4 parameters.
5184 *
5185 * @param t_cppClass C++ class you're exporting the method for
5186 * @param f_cppFreeMethod C++ function to export (can be function pointer or std::function, 4 parameters, can be overloaded)
5187 * @param t_return Return type of the free function (for disambiguation)
5188 * @param t_P1, t_P2, t_P3, t_P4 Parameter types for the free function (for disambiguation)
5189 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
5190 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
5191 * @param i_dispatcher Unique identifier for the generated dispatcher function
5192 *
5193 * @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
5194 */
5195#define PY_CLASS_FREE_METHOD_QUALIFIED_EX_4( t_cppClass, f_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, s_methodName, s_doc, i_dispatcher )\
5196 typedef ::lass::meta::TypeTuple< t_P1, t_P2, t_P3, t_P4 > \
5197 LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams));\
5198 PY_CLASS_FREE_METHOD_QUALIFIED_EX(\
5199 t_cppClass, f_cppFreeMethod, t_return,\
5200 LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams)), s_methodName, s_doc,\
5201 i_dispatcher )
5202
5203/** @ingroup ClassDefinition
5204 * @brief Export a C++ free function as a Python method with type qualification for 5-parameter functions.
5205 *
5206 * Convenience macro that wraps PY_CLASS_FREE_METHOD_QUALIFIED_EX() for free functions with 5 parameters.
5207 *
5208 * @param t_cppClass C++ class you're exporting the method for
5209 * @param f_cppFreeMethod C++ function to export (can be function pointer or std::function, 5 parameters, can be overloaded)
5210 * @param t_return Return type of the free function (for disambiguation)
5211 * @param t_P1, t_P2, t_P3, t_P4, t_P5 Parameter types for the free function (for disambiguation)
5212 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
5213 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
5214 * @param i_dispatcher Unique identifier for the generated dispatcher function
5215 *
5216 * @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
5217 */
5218#define PY_CLASS_FREE_METHOD_QUALIFIED_EX_5( t_cppClass, f_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, s_methodName, s_doc, i_dispatcher )\
5219 typedef ::lass::meta::TypeTuple< t_P1, t_P2, t_P3, t_P4, t_P5 > \
5220 LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams));\
5221 PY_CLASS_FREE_METHOD_QUALIFIED_EX(\
5222 t_cppClass, f_cppFreeMethod, t_return,\
5223 LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams)), s_methodName, s_doc,\
5224 i_dispatcher )
5225
5226/** @ingroup ClassDefinition
5227 * @brief Export a C++ free function as a Python method with type qualification for 6-parameter functions.
5228 *
5229 * Convenience macro that wraps PY_CLASS_FREE_METHOD_QUALIFIED_EX() for free functions with 6 parameters.
5230 *
5231 * @param t_cppClass C++ class you're exporting the method for
5232 * @param f_cppFreeMethod C++ function to export (can be function pointer or std::function, 6 parameters, can be overloaded)
5233 * @param t_return Return type of the free function (for disambiguation)
5234 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6 Parameter types for the free function (for disambiguation)
5235 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
5236 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
5237 * @param i_dispatcher Unique identifier for the generated dispatcher function
5238 *
5239 * @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
5240 */
5241#define PY_CLASS_FREE_METHOD_QUALIFIED_EX_6( t_cppClass, f_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, s_methodName, s_doc, i_dispatcher )\
5242 typedef ::lass::meta::TypeTuple< t_P1, t_P2, t_P3, t_P4, t_P5, t_P6 > \
5243 LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams));\
5244 PY_CLASS_FREE_METHOD_QUALIFIED_EX(\
5245 t_cppClass, f_cppFreeMethod, t_return,\
5246 LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams)), s_methodName, s_doc,\
5247 i_dispatcher )
5248
5249/** @ingroup ClassDefinition
5250 * @brief Export a C++ free function as a Python method with type qualification for 7-parameter functions.
5251 *
5252 * Convenience macro that wraps PY_CLASS_FREE_METHOD_QUALIFIED_EX() for free functions with 7 parameters.
5253 *
5254 * @param t_cppClass C++ class you're exporting the method for
5255 * @param f_cppFreeMethod C++ function to export (can be function pointer or std::function, 7 parameters, can be overloaded)
5256 * @param t_return Return type of the free function (for disambiguation)
5257 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7 Parameter types for the free function (for disambiguation)
5258 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
5259 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
5260 * @param i_dispatcher Unique identifier for the generated dispatcher function
5261 *
5262 * @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
5263 */
5264#define PY_CLASS_FREE_METHOD_QUALIFIED_EX_7( t_cppClass, f_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, s_methodName, s_doc, i_dispatcher )\
5265 typedef ::lass::meta::TypeTuple< t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7 > \
5266 LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams));\
5267 PY_CLASS_FREE_METHOD_QUALIFIED_EX(\
5268 t_cppClass, f_cppFreeMethod, t_return,\
5269 LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams)), s_methodName, s_doc,\
5270 i_dispatcher )
5271
5272/** @ingroup ClassDefinition
5273 * @brief Export a C++ free function as a Python method with type qualification for 8-parameter functions.
5274 *
5275 * Convenience macro that wraps PY_CLASS_FREE_METHOD_QUALIFIED_EX() for free functions with 8 parameters.
5276 *
5277 * @param t_cppClass C++ class you're exporting the method for
5278 * @param f_cppFreeMethod C++ function to export (can be function pointer or std::function, 8 parameters, can be overloaded)
5279 * @param t_return Return type of the free function (for disambiguation)
5280 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8 Parameter types for the free function (for disambiguation)
5281 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
5282 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
5283 * @param i_dispatcher Unique identifier for the generated dispatcher function
5284 *
5285 * @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
5286 */
5287#define PY_CLASS_FREE_METHOD_QUALIFIED_EX_8( t_cppClass, f_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, s_methodName, s_doc, i_dispatcher )\
5288 typedef ::lass::meta::TypeTuple< t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8 > \
5289 LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams));\
5290 PY_CLASS_FREE_METHOD_QUALIFIED_EX(\
5291 t_cppClass, f_cppFreeMethod, t_return,\
5292 LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams)), s_methodName, s_doc,\
5293 i_dispatcher )
5294
5295/** @ingroup ClassDefinition
5296 * @brief Export a C++ free function as a Python method with type qualification for 9-parameter functions.
5297 *
5298 * Convenience macro that wraps PY_CLASS_FREE_METHOD_QUALIFIED_EX() for free functions with 9 parameters.
5299 *
5300 * @param t_cppClass C++ class you're exporting the method for
5301 * @param f_cppFreeMethod C++ function to export (can be function pointer or std::function, 9 parameters, can be overloaded)
5302 * @param t_return Return type of the free function (for disambiguation)
5303 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9 Parameter types for the free function (for disambiguation)
5304 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
5305 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
5306 * @param i_dispatcher Unique identifier for the generated dispatcher function
5307 *
5308 * @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
5309 */
5310#define PY_CLASS_FREE_METHOD_QUALIFIED_EX_9( t_cppClass, f_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, s_methodName, s_doc, i_dispatcher )\
5311 typedef ::lass::meta::TypeTuple< t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9 > \
5312 LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams));\
5313 PY_CLASS_FREE_METHOD_QUALIFIED_EX(\
5314 t_cppClass, f_cppFreeMethod, t_return,\
5315 LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams)), s_methodName, s_doc,\
5316 i_dispatcher )
5317
5318/** @ingroup ClassDefinition
5319 * @brief Export a C++ free function as a Python method with type qualification for 10-parameter functions.
5320 *
5321 * Convenience macro that wraps PY_CLASS_FREE_METHOD_QUALIFIED_EX() for free functions with 10 parameters.
5322 *
5323 * @param t_cppClass C++ class you're exporting the method for
5324 * @param f_cppFreeMethod C++ function to export (can be function pointer or std::function, 10 parameters, can be overloaded)
5325 * @param t_return Return type of the free function (for disambiguation)
5326 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10 Parameter types for the free function (for disambiguation)
5327 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
5328 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
5329 * @param i_dispatcher Unique identifier for the generated dispatcher function
5330 *
5331 * @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
5332 */
5333#define PY_CLASS_FREE_METHOD_QUALIFIED_EX_10( t_cppClass, f_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, s_methodName, s_doc, i_dispatcher )\
5334 typedef ::lass::meta::TypeTuple< t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10 > \
5335 LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams));\
5336 PY_CLASS_FREE_METHOD_QUALIFIED_EX(\
5337 t_cppClass, f_cppFreeMethod, t_return,\
5338 LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams)), s_methodName, s_doc,\
5339 i_dispatcher )
5340
5341/** @ingroup ClassDefinition
5342 * @brief Export a C++ free function as a Python method with type qualification for 11-parameter functions.
5343 *
5344 * Convenience macro that wraps PY_CLASS_FREE_METHOD_QUALIFIED_EX() for free functions with 11 parameters.
5345 *
5346 * @param t_cppClass C++ class you're exporting the method for
5347 * @param f_cppFreeMethod C++ function to export (can be function pointer or std::function, 11 parameters, can be overloaded)
5348 * @param t_return Return type of the free function (for disambiguation)
5349 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11 Parameter types for the free function (for disambiguation)
5350 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
5351 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
5352 * @param i_dispatcher Unique identifier for the generated dispatcher function
5353 *
5354 * @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
5355 */
5356#define PY_CLASS_FREE_METHOD_QUALIFIED_EX_11( t_cppClass, f_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, s_methodName, s_doc, i_dispatcher )\
5357 typedef ::lass::meta::TypeTuple< t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11 > \
5358 LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams));\
5359 PY_CLASS_FREE_METHOD_QUALIFIED_EX(\
5360 t_cppClass, f_cppFreeMethod, t_return,\
5361 LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams)), s_methodName, s_doc,\
5362 i_dispatcher )
5363
5364/** @ingroup ClassDefinition
5365 * @brief Export a C++ free function as a Python method with type qualification for 12-parameter functions.
5366 *
5367 * Convenience macro that wraps PY_CLASS_FREE_METHOD_QUALIFIED_EX() for free functions with 12 parameters.
5368 *
5369 * @param t_cppClass C++ class you're exporting the method for
5370 * @param f_cppFreeMethod C++ function to export (can be function pointer or std::function, 12 parameters, can be overloaded)
5371 * @param t_return Return type of the free function (for disambiguation)
5372 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12 Parameter types for the free function (for disambiguation)
5373 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
5374 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
5375 * @param i_dispatcher Unique identifier for the generated dispatcher function
5376 *
5377 * @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
5378 */
5379#define PY_CLASS_FREE_METHOD_QUALIFIED_EX_12( t_cppClass, f_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, s_methodName, s_doc, i_dispatcher )\
5380 typedef ::lass::meta::TypeTuple< t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12 > \
5381 LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams));\
5382 PY_CLASS_FREE_METHOD_QUALIFIED_EX(\
5383 t_cppClass, f_cppFreeMethod, t_return,\
5384 LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams)), s_methodName, s_doc,\
5385 i_dispatcher )
5386
5387/** @ingroup ClassDefinition
5388 * @brief Export a C++ free function as a Python method with type qualification for 13-parameter functions.
5389 *
5390 * Convenience macro that wraps PY_CLASS_FREE_METHOD_QUALIFIED_EX() for free functions with 13 parameters.
5391 *
5392 * @param t_cppClass C++ class you're exporting the method for
5393 * @param f_cppFreeMethod C++ function to export (can be function pointer or std::function, 13 parameters, can be overloaded)
5394 * @param t_return Return type of the free function (for disambiguation)
5395 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13 Parameter types for the free function (for disambiguation)
5396 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
5397 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
5398 * @param i_dispatcher Unique identifier for the generated dispatcher function
5399 *
5400 * @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
5401 */
5402#define PY_CLASS_FREE_METHOD_QUALIFIED_EX_13( t_cppClass, f_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, s_methodName, s_doc, i_dispatcher )\
5403 typedef ::lass::meta::TypeTuple< t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13 > \
5404 LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams));\
5405 PY_CLASS_FREE_METHOD_QUALIFIED_EX(\
5406 t_cppClass, f_cppFreeMethod, t_return,\
5407 LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams)), s_methodName, s_doc,\
5408 i_dispatcher )
5409
5410/** @ingroup ClassDefinition
5411 * @brief Export a C++ free function as a Python method with type qualification for 14-parameter functions.
5412 *
5413 * Convenience macro that wraps PY_CLASS_FREE_METHOD_QUALIFIED_EX() for free functions with 14 parameters.
5414 *
5415 * @param t_cppClass C++ class you're exporting the method for
5416 * @param f_cppFreeMethod C++ function to export (can be function pointer or std::function, 14 parameters, can be overloaded)
5417 * @param t_return Return type of the free function (for disambiguation)
5418 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14 Parameter types for the free function (for disambiguation)
5419 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
5420 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
5421 * @param i_dispatcher Unique identifier for the generated dispatcher function
5422 *
5423 * @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
5424 */
5425#define PY_CLASS_FREE_METHOD_QUALIFIED_EX_14( t_cppClass, f_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, s_methodName, s_doc, i_dispatcher )\
5426 typedef ::lass::meta::TypeTuple< t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14 > \
5427 LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams));\
5428 PY_CLASS_FREE_METHOD_QUALIFIED_EX(\
5429 t_cppClass, f_cppFreeMethod, t_return,\
5430 LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams)), s_methodName, s_doc,\
5431 i_dispatcher )
5432
5433/** @ingroup ClassDefinition
5434 * @brief Export a C++ free function as a Python method with type qualification for 15-parameter functions.
5435 *
5436 * Convenience macro that wraps PY_CLASS_FREE_METHOD_QUALIFIED_EX() for free functions with 15 parameters.
5437 *
5438 * @param t_cppClass C++ class you're exporting the method for
5439 * @param f_cppFreeMethod C++ function to export (can be function pointer or std::function, 15 parameters, can be overloaded)
5440 * @param t_return Return type of the free function (for disambiguation)
5441 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15 Parameter types for the free function (for disambiguation)
5442 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
5443 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
5444 * @param i_dispatcher Unique identifier for the generated dispatcher function
5445 *
5446 * @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
5447 */
5448#define PY_CLASS_FREE_METHOD_QUALIFIED_EX_15( t_cppClass, f_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15, s_methodName, s_doc, i_dispatcher )\
5449 typedef ::lass::meta::TypeTuple< t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15 > \
5450 LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams));\
5451 PY_CLASS_FREE_METHOD_QUALIFIED_EX(\
5452 t_cppClass, f_cppFreeMethod, t_return,\
5453 LASS_UNIQUENAME(LASS_CONCATENATE(i_dispatcher, _TParams)), s_methodName, s_doc,\
5454 i_dispatcher )
5455
5456
5457/** @ingroup ClassDefinition
5458 * @brief Export a C++ free function as a Python method with type qualification, custom name and documentation.
5459 *
5460 * Convenience macro that wraps PY_CLASS_FREE_METHOD_QUALIFIED_EX() with automatically generated dispatcher name.
5461 *
5462 * @param i_cppClass C++ class you're exporting the method for
5463 * @param f_cppFreeMethod C++ function to export (can be function pointer or std::function, can be overloaded)
5464 * @param t_return Return type of the free function (for disambiguation)
5465 * @param t_params Parameter types as lass::meta::TypeTuple (for disambiguation)
5466 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
5467 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
5468 *
5469 * @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
5470 */
5471#define PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC( i_cppClass, f_cppFreeMethod, t_return, t_params, s_methodName, s_doc )\
5472 PY_CLASS_FREE_METHOD_QUALIFIED_EX(\
5473 i_cppClass, f_cppFreeMethod, t_return, t_params, s_methodName, s_doc,\
5474 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)))
5475
5476/** @ingroup ClassDefinition
5477 * @brief Export a C++ free function as a Python method with type qualification for 0-parameter functions, custom name and documentation.
5478 *
5479 * Convenience macro that wraps PY_CLASS_FREE_METHOD_QUALIFIED_EX_0() with automatically generated dispatcher name.
5480 *
5481 * @param i_cppClass C++ class you're exporting the method for
5482 * @param f_cppFreeMethod C++ function to export (can be function pointer or std::function, 0 parameters, can be overloaded)
5483 * @param t_return Return type of the free function (for disambiguation)
5484 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
5485 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
5486 *
5487 * @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
5488 */
5489#define PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_0( i_cppClass, f_cppFreeMethod, t_return, s_methodName, s_doc )\
5490 PY_CLASS_FREE_METHOD_QUALIFIED_EX_0(\
5491 i_cppClass, f_cppFreeMethod, t_return, s_methodName, s_doc,\
5492 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)))
5493
5494/** @ingroup ClassDefinition
5495 * @brief Export a C++ free function as a Python method with type qualification for 1-parameter functions, custom name and documentation.
5496 *
5497 * Convenience macro that wraps PY_CLASS_FREE_METHOD_QUALIFIED_EX_1() with automatically generated dispatcher name.
5498 *
5499 * @param i_cppClass C++ class you're exporting the method for
5500 * @param f_cppFreeMethod C++ function to export (can be function pointer or std::function, 1 parameters, can be overloaded)
5501 * @param t_return Return type of the free function (for disambiguation)
5502 * @param t_P1 Parameter types for the free function (for disambiguation)
5503 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
5504 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
5505 *
5506 * @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
5507 */
5508#define PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_1( i_cppClass, f_cppFreeMethod, t_return, t_P1, s_methodName, s_doc )\
5509 PY_CLASS_FREE_METHOD_QUALIFIED_EX_1(\
5510 i_cppClass, f_cppFreeMethod, t_return, t_P1, s_methodName, s_doc,\
5511 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)))
5512
5513/** @ingroup ClassDefinition
5514 * @brief Export a C++ free function as a Python method with type qualification for 2-parameter functions, custom name and documentation.
5515 *
5516 * Convenience macro that wraps PY_CLASS_FREE_METHOD_QUALIFIED_EX_2() with automatically generated dispatcher name.
5517 *
5518 * @param i_cppClass C++ class you're exporting the method for
5519 * @param f_cppFreeMethod C++ function to export (can be function pointer or std::function, 2 parameters, can be overloaded)
5520 * @param t_return Return type of the free function (for disambiguation)
5521 * @param t_P1, t_P2 Parameter types for the free function (for disambiguation)
5522 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
5523 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
5524 *
5525 * @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
5526 */
5527#define PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_2( i_cppClass, f_cppFreeMethod, t_return, t_P1, t_P2, s_methodName, s_doc )\
5528 PY_CLASS_FREE_METHOD_QUALIFIED_EX_2(\
5529 i_cppClass, f_cppFreeMethod, t_return, t_P1, t_P2, s_methodName, s_doc,\
5530 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)))
5531
5532/** @ingroup ClassDefinition
5533 * @brief Export a C++ free function as a Python method with type qualification for 3-parameter functions, custom name and documentation.
5534 *
5535 * Convenience macro that wraps PY_CLASS_FREE_METHOD_QUALIFIED_EX_3() with automatically generated dispatcher name.
5536 *
5537 * @param i_cppClass C++ class you're exporting the method for
5538 * @param f_cppFreeMethod C++ function to export (can be function pointer or std::function, 3 parameters, can be overloaded)
5539 * @param t_return Return type of the free function (for disambiguation)
5540 * @param t_P1, t_P2, t_P3 Parameter types for the free function (for disambiguation)
5541 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
5542 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
5543 *
5544 * @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
5545 */
5546#define PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_3( i_cppClass, f_cppFreeMethod, t_return, t_P1, t_P2, t_P3, s_methodName, s_doc )\
5547 PY_CLASS_FREE_METHOD_QUALIFIED_EX_3(\
5548 i_cppClass, f_cppFreeMethod, t_return, t_P1, t_P2, t_P3, s_methodName, s_doc,\
5549 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)))
5550
5551/** @ingroup ClassDefinition
5552 * @brief Export a C++ free function as a Python method with type qualification for 4-parameter functions, custom name and documentation.
5553 *
5554 * Convenience macro that wraps PY_CLASS_FREE_METHOD_QUALIFIED_EX_4() with automatically generated dispatcher name.
5555 *
5556 * @param i_cppClass C++ class you're exporting the method for
5557 * @param f_cppFreeMethod C++ function to export (can be function pointer or std::function, 4 parameters, can be overloaded)
5558 * @param t_return Return type of the free function (for disambiguation)
5559 * @param t_P1, t_P2, t_P3, t_P4 Parameter types for the free function (for disambiguation)
5560 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
5561 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
5562 *
5563 * @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
5564 */
5565#define PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_4( i_cppClass, f_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, s_methodName, s_doc )\
5566 PY_CLASS_FREE_METHOD_QUALIFIED_EX_4(\
5567 i_cppClass, f_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, s_methodName, s_doc,\
5568 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)))
5569
5570/** @ingroup ClassDefinition
5571 * @brief Export a C++ free function as a Python method with type qualification for 5-parameter functions, custom name and documentation.
5572 *
5573 * Convenience macro that wraps PY_CLASS_FREE_METHOD_QUALIFIED_EX_5() with automatically generated dispatcher name.
5574 *
5575 * @param i_cppClass C++ class you're exporting the method for
5576 * @param f_cppFreeMethod C++ function to export (can be function pointer or std::function, 5 parameters, can be overloaded)
5577 * @param t_return Return type of the free function (for disambiguation)
5578 * @param t_P1, t_P2, t_P3, t_P4, t_P5 Parameter types for the free function (for disambiguation)
5579 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
5580 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
5581 *
5582 * @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
5583 */
5584#define PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_5( i_cppClass, f_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, s_methodName, s_doc )\
5585 PY_CLASS_FREE_METHOD_QUALIFIED_EX_5(\
5586 i_cppClass, f_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, s_methodName, s_doc,\
5587 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)))
5588
5589/** @ingroup ClassDefinition
5590 * @brief Export a C++ free function as a Python method with type qualification for 6-parameter functions, custom name and documentation.
5591 *
5592 * Convenience macro that wraps PY_CLASS_FREE_METHOD_QUALIFIED_EX_6() with automatically generated dispatcher name.
5593 *
5594 * @param i_cppClass C++ class you're exporting the method for
5595 * @param f_cppFreeMethod C++ function to export (can be function pointer or std::function, 6 parameters, can be overloaded)
5596 * @param t_return Return type of the free function (for disambiguation)
5597 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6 Parameter types for the free function (for disambiguation)
5598 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
5599 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
5600 *
5601 * @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
5602 */
5603#define PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_6( i_cppClass, f_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, s_methodName, s_doc )\
5604 PY_CLASS_FREE_METHOD_QUALIFIED_EX_6(\
5605 i_cppClass, f_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, s_methodName, s_doc,\
5606 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)))
5607
5608/** @ingroup ClassDefinition
5609 * @brief Export a C++ free function as a Python method with type qualification for 7-parameter functions, custom name and documentation.
5610 *
5611 * Convenience macro that wraps PY_CLASS_FREE_METHOD_QUALIFIED_EX_7() with automatically generated dispatcher name.
5612 *
5613 * @param i_cppClass C++ class you're exporting the method for
5614 * @param f_cppFreeMethod C++ function to export (can be function pointer or std::function, 7 parameters, can be overloaded)
5615 * @param t_return Return type of the free function (for disambiguation)
5616 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7 Parameter types for the free function (for disambiguation)
5617 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
5618 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
5619 *
5620 * @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
5621 */
5622#define PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_7( i_cppClass, f_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, s_methodName, s_doc )\
5623 PY_CLASS_FREE_METHOD_QUALIFIED_EX_7(\
5624 i_cppClass, f_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, s_methodName, s_doc,\
5625 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)))
5626
5627/** @ingroup ClassDefinition
5628 * @brief Export a C++ free function as a Python method with type qualification for 8-parameter functions, custom name and documentation.
5629 *
5630 * Convenience macro that wraps PY_CLASS_FREE_METHOD_QUALIFIED_EX_8() with automatically generated dispatcher name.
5631 *
5632 * @param i_cppClass C++ class you're exporting the method for
5633 * @param f_cppFreeMethod C++ function to export (can be function pointer or std::function, 8 parameters, can be overloaded)
5634 * @param t_return Return type of the free function (for disambiguation)
5635 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8 Parameter types for the free function (for disambiguation)
5636 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
5637 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
5638 *
5639 * @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
5640 */
5641#define PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_8( i_cppClass, f_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, s_methodName, s_doc )\
5642 PY_CLASS_FREE_METHOD_QUALIFIED_EX_8(\
5643 i_cppClass, f_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, s_methodName, s_doc,\
5644 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)))
5645
5646/** @ingroup ClassDefinition
5647 * @brief Export a C++ free function as a Python method with type qualification for 9-parameter functions, custom name and documentation.
5648 *
5649 * Convenience macro that wraps PY_CLASS_FREE_METHOD_QUALIFIED_EX_9() with automatically generated dispatcher name.
5650 *
5651 * @param i_cppClass C++ class you're exporting the method for
5652 * @param f_cppFreeMethod C++ function to export (can be function pointer or std::function, 9 parameters, can be overloaded)
5653 * @param t_return Return type of the free function (for disambiguation)
5654 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9 Parameter types for the free function (for disambiguation)
5655 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
5656 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
5657 *
5658 * @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
5659 */
5660#define PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_9( i_cppClass, f_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, s_methodName, s_doc )\
5661 PY_CLASS_FREE_METHOD_QUALIFIED_EX_9(\
5662 i_cppClass, f_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, s_methodName, s_doc,\
5663 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)))
5664
5665/** @ingroup ClassDefinition
5666 * @brief Export a C++ free function as a Python method with type qualification for 10-parameter functions, custom name and documentation.
5667 *
5668 * Convenience macro that wraps PY_CLASS_FREE_METHOD_QUALIFIED_EX_10() with automatically generated dispatcher name.
5669 *
5670 * @param i_cppClass C++ class you're exporting the method for
5671 * @param f_cppFreeMethod C++ function to export (can be function pointer or std::function, 10 parameters, can be overloaded)
5672 * @param t_return Return type of the free function (for disambiguation)
5673 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10 Parameter types for the free function (for disambiguation)
5674 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
5675 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
5676 *
5677 * @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
5678 */
5679#define PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_10( i_cppClass, f_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, s_methodName, s_doc )\
5680 PY_CLASS_FREE_METHOD_QUALIFIED_EX_10(\
5681 i_cppClass, f_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, s_methodName, s_doc,\
5682 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)))
5683
5684/** @ingroup ClassDefinition
5685 * @brief Export a C++ free function as a Python method with type qualification for 11-parameter functions, custom name and documentation.
5686 *
5687 * Convenience macro that wraps PY_CLASS_FREE_METHOD_QUALIFIED_EX_11() with automatically generated dispatcher name.
5688 *
5689 * @param i_cppClass C++ class you're exporting the method for
5690 * @param f_cppFreeMethod C++ function to export (can be function pointer or std::function, 11 parameters, can be overloaded)
5691 * @param t_return Return type of the free function (for disambiguation)
5692 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11 Parameter types for the free function (for disambiguation)
5693 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
5694 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
5695 *
5696 * @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
5697 */
5698#define PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_11( i_cppClass, f_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, s_methodName, s_doc )\
5699 PY_CLASS_FREE_METHOD_QUALIFIED_EX_11(\
5700 i_cppClass, f_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, s_methodName, s_doc,\
5701 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)))
5702
5703/** @ingroup ClassDefinition
5704 * @brief Export a C++ free function as a Python method with type qualification for 12-parameter functions, custom name and documentation.
5705 *
5706 * Convenience macro that wraps PY_CLASS_FREE_METHOD_QUALIFIED_EX_12() with automatically generated dispatcher name.
5707 *
5708 * @param i_cppClass C++ class you're exporting the method for
5709 * @param f_cppFreeMethod C++ function to export (can be function pointer or std::function, 12 parameters, can be overloaded)
5710 * @param t_return Return type of the free function (for disambiguation)
5711 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12 Parameter types for the free function (for disambiguation)
5712 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
5713 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
5714 *
5715 * @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
5716 */
5717#define PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_12( i_cppClass, f_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, s_methodName, s_doc )\
5718 PY_CLASS_FREE_METHOD_QUALIFIED_EX_12(\
5719 i_cppClass, f_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, s_methodName, s_doc,\
5720 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)))
5721
5722/** @ingroup ClassDefinition
5723 * @brief Export a C++ free function as a Python method with type qualification for 13-parameter functions, custom name and documentation.
5724 *
5725 * Convenience macro that wraps PY_CLASS_FREE_METHOD_QUALIFIED_EX_13() with automatically generated dispatcher name.
5726 *
5727 * @param i_cppClass C++ class you're exporting the method for
5728 * @param f_cppFreeMethod C++ function to export (can be function pointer or std::function, 13 parameters, can be overloaded)
5729 * @param t_return Return type of the free function (for disambiguation)
5730 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13 Parameter types for the free function (for disambiguation)
5731 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
5732 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
5733 *
5734 * @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
5735 */
5736#define PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_13( i_cppClass, f_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, s_methodName, s_doc )\
5737 PY_CLASS_FREE_METHOD_QUALIFIED_EX_13(\
5738 i_cppClass, f_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, s_methodName, s_doc,\
5739 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)))
5740
5741/** @ingroup ClassDefinition
5742 * @brief Export a C++ free function as a Python method with type qualification for 14-parameter functions, custom name and documentation.
5743 *
5744 * Convenience macro that wraps PY_CLASS_FREE_METHOD_QUALIFIED_EX_14() with automatically generated dispatcher name.
5745 *
5746 * @param i_cppClass C++ class you're exporting the method for
5747 * @param f_cppFreeMethod C++ function to export (can be function pointer or std::function, 14 parameters, can be overloaded)
5748 * @param t_return Return type of the free function (for disambiguation)
5749 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14 Parameter types for the free function (for disambiguation)
5750 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
5751 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
5752 *
5753 * @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
5754 */
5755#define PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_14( i_cppClass, f_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, s_methodName, s_doc )\
5756 PY_CLASS_FREE_METHOD_QUALIFIED_EX_14(\
5757 i_cppClass, f_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, s_methodName, s_doc,\
5758 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)))
5759
5760/** @ingroup ClassDefinition
5761 * @brief Export a C++ free function as a Python method with type qualification for 15-parameter functions, custom name and documentation.
5762 *
5763 * Convenience macro that wraps PY_CLASS_FREE_METHOD_QUALIFIED_EX_15() with automatically generated dispatcher name.
5764 *
5765 * @param i_cppClass C++ class you're exporting the method for
5766 * @param f_cppFreeMethod C++ function to export (can be function pointer or std::function, 15 parameters, can be overloaded)
5767 * @param t_return Return type of the free function (for disambiguation)
5768 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15 Parameter types for the free function (for disambiguation)
5769 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
5770 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
5771 *
5772 * @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
5773 */
5774#define PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_15( i_cppClass, f_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15, s_methodName, s_doc )\
5775 PY_CLASS_FREE_METHOD_QUALIFIED_EX_15(\
5776 i_cppClass, f_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15, s_methodName, s_doc,\
5777 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)))
5778
5779
5780/** @ingroup ClassDefinition
5781 * @brief Export a C++ free function as a Python method with type qualification and custom name (no documentation).
5782 *
5783 * Convenience macro that wraps PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC() with s_doc = nullptr.
5784 *
5785 * @param i_cppClass C++ class you're exporting the method for
5786 * @param f_cppFreeMethod C++ function to export (can be function pointer or std::function, can be overloaded)
5787 * @param t_return Return type of the free function (for disambiguation)
5788 * @param t_params Parameter types as lass::meta::TypeTuple (for disambiguation)
5789 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
5790 *
5791 * @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
5792 */
5793#define PY_CLASS_FREE_METHOD_QUALIFIED_NAME( i_cppClass, f_cppFreeMethod, t_return, t_params, s_methodName )\
5794 PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC(\
5795 i_cppClass, f_cppFreeMethod, t_return, t_params, s_methodName, 0 )
5796
5797/** @ingroup ClassDefinition
5798 * @brief Export a C++ free function as a Python method with type qualification for 0-parameter functions and custom name (no documentation).
5799 *
5800 * Convenience macro that wraps PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_0() with s_doc = nullptr.
5801 *
5802 * @param i_cppClass C++ class you're exporting the method for
5803 * @param f_cppFreeMethod C++ function to export (can be function pointer or std::function, 0 parameters, can be overloaded)
5804 * @param t_return Return type of the free function (for disambiguation)
5805 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
5806 *
5807 * @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
5808 */
5809#define PY_CLASS_FREE_METHOD_QUALIFIED_NAME_0( i_cppClass, f_cppFreeMethod, t_return, s_methodName )\
5810 PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_0(\
5811 i_cppClass, f_cppFreeMethod, t_return, s_methodName, 0 )
5812
5813/** @ingroup ClassDefinition
5814 * @brief Export a C++ free function as a Python method with type qualification for 1-parameter functions and custom name (no documentation).
5815 *
5816 * Convenience macro that wraps PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_1() with s_doc = nullptr.
5817 *
5818 * @param i_cppClass C++ class you're exporting the method for
5819 * @param f_cppFreeMethod C++ function to export (can be function pointer or std::function, 1 parameters, can be overloaded)
5820 * @param t_return Return type of the free function (for disambiguation)
5821 * @param t_P1 Parameter types for the free function (for disambiguation)
5822 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
5823 *
5824 * @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
5825 */
5826#define PY_CLASS_FREE_METHOD_QUALIFIED_NAME_1( i_cppClass, f_cppFreeMethod, t_return, t_P1, s_methodName )\
5827 PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_1(\
5828 i_cppClass, f_cppFreeMethod, t_return, t_P1, s_methodName, 0 )
5829
5830/** @ingroup ClassDefinition
5831 * @brief Export a C++ free function as a Python method with type qualification for 2-parameter functions and custom name (no documentation).
5832 *
5833 * Convenience macro that wraps PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_2() with s_doc = nullptr.
5834 *
5835 * @param i_cppClass C++ class you're exporting the method for
5836 * @param f_cppFreeMethod C++ function to export (can be function pointer or std::function, 2 parameters, can be overloaded)
5837 * @param t_return Return type of the free function (for disambiguation)
5838 * @param t_P1, t_P2 Parameter types for the free function (for disambiguation)
5839 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
5840 *
5841 * @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
5842 */
5843#define PY_CLASS_FREE_METHOD_QUALIFIED_NAME_2( i_cppClass, f_cppFreeMethod, t_return, t_P1, t_P2, s_methodName )\
5844 PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_2(\
5845 i_cppClass, f_cppFreeMethod, t_return, t_P1, t_P2, s_methodName, 0 )
5846
5847/** @ingroup ClassDefinition
5848 * @brief Export a C++ free function as a Python method with type qualification for 3-parameter functions and custom name (no documentation).
5849 *
5850 * Convenience macro that wraps PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_3() with s_doc = nullptr.
5851 *
5852 * @param i_cppClass C++ class you're exporting the method for
5853 * @param f_cppFreeMethod C++ function to export (can be function pointer or std::function, 3 parameters, can be overloaded)
5854 * @param t_return Return type of the free function (for disambiguation)
5855 * @param t_P1, t_P2, t_P3 Parameter types for the free function (for disambiguation)
5856 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
5857 *
5858 * @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
5859 */
5860#define PY_CLASS_FREE_METHOD_QUALIFIED_NAME_3( i_cppClass, f_cppFreeMethod, t_return, t_P1, t_P2, t_P3, s_methodName )\
5861 PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_3(\
5862 i_cppClass, f_cppFreeMethod, t_return, t_P1, t_P2, t_P3, s_methodName, 0 )
5863
5864/** @ingroup ClassDefinition
5865 * @brief Export a C++ free function as a Python method with type qualification for 4-parameter functions and custom name (no documentation).
5866 *
5867 * Convenience macro that wraps PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_4() with s_doc = nullptr.
5868 *
5869 * @param i_cppClass C++ class you're exporting the method for
5870 * @param f_cppFreeMethod C++ function to export (can be function pointer or std::function, 4 parameters, can be overloaded)
5871 * @param t_return Return type of the free function (for disambiguation)
5872 * @param t_P1, t_P2, t_P3, t_P4 Parameter types for the free function (for disambiguation)
5873 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
5874 *
5875 * @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
5876 */
5877#define PY_CLASS_FREE_METHOD_QUALIFIED_NAME_4( i_cppClass, f_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, s_methodName )\
5878 PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_4(\
5879 i_cppClass, f_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, s_methodName, 0 )
5880
5881/** @ingroup ClassDefinition
5882 * @brief Export a C++ free function as a Python method with type qualification for 5-parameter functions and custom name (no documentation).
5883 *
5884 * Convenience macro that wraps PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_5() with s_doc = nullptr.
5885 *
5886 * @param i_cppClass C++ class you're exporting the method for
5887 * @param f_cppFreeMethod C++ function to export (can be function pointer or std::function, 5 parameters, can be overloaded)
5888 * @param t_return Return type of the free function (for disambiguation)
5889 * @param t_P1, t_P2, t_P3, t_P4, t_P5 Parameter types for the free function (for disambiguation)
5890 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
5891 *
5892 * @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
5893 */
5894#define PY_CLASS_FREE_METHOD_QUALIFIED_NAME_5( i_cppClass, f_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, s_methodName )\
5895 PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_5(\
5896 i_cppClass, f_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, s_methodName, 0 )
5897
5898/** @ingroup ClassDefinition
5899 * @brief Export a C++ free function as a Python method with type qualification for 6-parameter functions and custom name (no documentation).
5900 *
5901 * Convenience macro that wraps PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_6() with s_doc = nullptr.
5902 *
5903 * @param i_cppClass C++ class you're exporting the method for
5904 * @param f_cppFreeMethod C++ function to export (can be function pointer or std::function, 6 parameters, can be overloaded)
5905 * @param t_return Return type of the free function (for disambiguation)
5906 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6 Parameter types for the free function (for disambiguation)
5907 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
5908 *
5909 * @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
5910 */
5911#define PY_CLASS_FREE_METHOD_QUALIFIED_NAME_6( i_cppClass, f_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, s_methodName )\
5912 PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_6(\
5913 i_cppClass, f_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, s_methodName, 0 )
5914
5915/** @ingroup ClassDefinition
5916 * @brief Export a C++ free function as a Python method with type qualification for 7-parameter functions and custom name (no documentation).
5917 *
5918 * Convenience macro that wraps PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_7() with s_doc = nullptr.
5919 *
5920 * @param i_cppClass C++ class you're exporting the method for
5921 * @param f_cppFreeMethod C++ function to export (can be function pointer or std::function, 7 parameters, can be overloaded)
5922 * @param t_return Return type of the free function (for disambiguation)
5923 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7 Parameter types for the free function (for disambiguation)
5924 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
5925 *
5926 * @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
5927 */
5928#define PY_CLASS_FREE_METHOD_QUALIFIED_NAME_7( i_cppClass, f_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, s_methodName )\
5929 PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_7(\
5930 i_cppClass, f_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, s_methodName, 0 )
5931
5932/** @ingroup ClassDefinition
5933 * @brief Export a C++ free function as a Python method with type qualification for 8-parameter functions and custom name (no documentation).
5934 *
5935 * Convenience macro that wraps PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_8() with s_doc = nullptr.
5936 *
5937 * @param i_cppClass C++ class you're exporting the method for
5938 * @param f_cppFreeMethod C++ function to export (can be function pointer or std::function, 8 parameters, can be overloaded)
5939 * @param t_return Return type of the free function (for disambiguation)
5940 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8 Parameter types for the free function (for disambiguation)
5941 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
5942 *
5943 * @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
5944 */
5945#define PY_CLASS_FREE_METHOD_QUALIFIED_NAME_8( i_cppClass, f_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, s_methodName )\
5946 PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_8(\
5947 i_cppClass, f_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, s_methodName, 0 )
5948
5949/** @ingroup ClassDefinition
5950 * @brief Export a C++ free function as a Python method with type qualification for 9-parameter functions and custom name (no documentation).
5951 *
5952 * Convenience macro that wraps PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_9() with s_doc = nullptr.
5953 *
5954 * @param i_cppClass C++ class you're exporting the method for
5955 * @param f_cppFreeMethod C++ function to export (can be function pointer or std::function, 9 parameters, can be overloaded)
5956 * @param t_return Return type of the free function (for disambiguation)
5957 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9 Parameter types for the free function (for disambiguation)
5958 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
5959 *
5960 * @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
5961 */
5962#define PY_CLASS_FREE_METHOD_QUALIFIED_NAME_9( i_cppClass, f_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, s_methodName )\
5963 PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_9(\
5964 i_cppClass, f_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, s_methodName, 0 )
5965
5966/** @ingroup ClassDefinition
5967 * @brief Export a C++ free function as a Python method with type qualification for 10-parameter functions and custom name (no documentation).
5968 *
5969 * Convenience macro that wraps PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_10() with s_doc = nullptr.
5970 *
5971 * @param i_cppClass C++ class you're exporting the method for
5972 * @param f_cppFreeMethod C++ function to export (can be function pointer or std::function, 10 parameters, can be overloaded)
5973 * @param t_return Return type of the free function (for disambiguation)
5974 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10 Parameter types for the free function (for disambiguation)
5975 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
5976 *
5977 * @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
5978 */
5979#define PY_CLASS_FREE_METHOD_QUALIFIED_NAME_10( i_cppClass, f_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, s_methodName )\
5980 PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_10(\
5981 i_cppClass, f_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, s_methodName, 0 )
5982
5983/** @ingroup ClassDefinition
5984 * @brief Export a C++ free function as a Python method with type qualification for 11-parameter functions and custom name (no documentation).
5985 *
5986 * Convenience macro that wraps PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_11() with s_doc = nullptr.
5987 *
5988 * @param i_cppClass C++ class you're exporting the method for
5989 * @param f_cppFreeMethod C++ function to export (can be function pointer or std::function, 11 parameters, can be overloaded)
5990 * @param t_return Return type of the free function (for disambiguation)
5991 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11 Parameter types for the free function (for disambiguation)
5992 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
5993 *
5994 * @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
5995 */
5996#define PY_CLASS_FREE_METHOD_QUALIFIED_NAME_11( i_cppClass, f_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, s_methodName )\
5997 PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_11(\
5998 i_cppClass, f_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, s_methodName, 0 )
5999
6000/** @ingroup ClassDefinition
6001 * @brief Export a C++ free function as a Python method with type qualification for 12-parameter functions and custom name (no documentation).
6002 *
6003 * Convenience macro that wraps PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_12() with s_doc = nullptr.
6004 *
6005 * @param i_cppClass C++ class you're exporting the method for
6006 * @param f_cppFreeMethod C++ function to export (can be function pointer or std::function, 12 parameters, can be overloaded)
6007 * @param t_return Return type of the free function (for disambiguation)
6008 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12 Parameter types for the free function (for disambiguation)
6009 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
6010 *
6011 * @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
6012 */
6013#define PY_CLASS_FREE_METHOD_QUALIFIED_NAME_12( i_cppClass, f_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, s_methodName )\
6014 PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_12(\
6015 i_cppClass, f_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, s_methodName, 0 )
6016
6017/** @ingroup ClassDefinition
6018 * @brief Export a C++ free function as a Python method with type qualification for 13-parameter functions and custom name (no documentation).
6019 *
6020 * Convenience macro that wraps PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_13() with s_doc = nullptr.
6021 *
6022 * @param i_cppClass C++ class you're exporting the method for
6023 * @param f_cppFreeMethod C++ function to export (can be function pointer or std::function, 13 parameters, can be overloaded)
6024 * @param t_return Return type of the free function (for disambiguation)
6025 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13 Parameter types for the free function (for disambiguation)
6026 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
6027 *
6028 * @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
6029 */
6030#define PY_CLASS_FREE_METHOD_QUALIFIED_NAME_13( i_cppClass, f_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, s_methodName )\
6031 PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_13(\
6032 i_cppClass, f_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, s_methodName, 0 )
6033
6034/** @ingroup ClassDefinition
6035 * @brief Export a C++ free function as a Python method with type qualification for 14-parameter functions and custom name (no documentation).
6036 *
6037 * Convenience macro that wraps PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_14() with s_doc = nullptr.
6038 *
6039 * @param i_cppClass C++ class you're exporting the method for
6040 * @param f_cppFreeMethod C++ function to export (can be function pointer or std::function, 14 parameters, can be overloaded)
6041 * @param t_return Return type of the free function (for disambiguation)
6042 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14 Parameter types for the free function (for disambiguation)
6043 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
6044 *
6045 * @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
6046 */
6047#define PY_CLASS_FREE_METHOD_QUALIFIED_NAME_14( i_cppClass, f_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, s_methodName )\
6048 PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_14(\
6049 i_cppClass, f_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, s_methodName, 0 )
6050
6051/** @ingroup ClassDefinition
6052 * @brief Export a C++ free function as a Python method with type qualification for 15-parameter functions and custom name (no documentation).
6053 *
6054 * Convenience macro that wraps PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_15() with s_doc = nullptr.
6055 *
6056 * @param i_cppClass C++ class you're exporting the method for
6057 * @param f_cppFreeMethod C++ function to export (can be function pointer or std::function, 15 parameters, can be overloaded)
6058 * @param t_return Return type of the free function (for disambiguation)
6059 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15 Parameter types for the free function (for disambiguation)
6060 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
6061 *
6062 * @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
6063 */
6064#define PY_CLASS_FREE_METHOD_QUALIFIED_NAME_15( i_cppClass, f_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15, s_methodName )\
6065 PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_15(\
6066 i_cppClass, f_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15, s_methodName, 0 )
6067
6068
6069/** @ingroup ClassDefinition
6070 * @brief Export a C++ free function as a Python method with type qualification and custom documentation (method name derived from function name).
6071 *
6072 * Convenience macro that wraps PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC() with s_methodName = LASS_STRINGIFY(i_cppFreeMethod).
6073 *
6074 * @param i_cppClass C++ class you're exporting the method for
6075 * @param i_cppFreeMethod C++ function identifier to export (must be valid identifier, used as Python method name, can be overloaded)
6076 * @param t_return Return type of the free function (for disambiguation)
6077 * @param t_params Parameter types as lass::meta::TypeTuple (for disambiguation)
6078 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
6079 *
6080 * @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
6081 */
6082#define PY_CLASS_FREE_METHOD_QUALIFIED_DOC( i_cppClass, i_cppFreeMethod, t_return, t_params, s_doc )\
6083 PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC(\
6084 i_cppClass, i_cppFreeMethod, t_return, t_params, LASS_STRINGIFY(i_cppFreeMethod), s_doc )
6085
6086/** @ingroup ClassDefinition
6087 * @brief Export a C++ free function as a Python method with type qualification for 0-parameter functions and custom documentation (method name derived from function name).
6088 *
6089 * Convenience macro that wraps PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_0() with s_methodName = LASS_STRINGIFY(i_cppFreeMethod).
6090 *
6091 * @param i_cppClass C++ class you're exporting the method for
6092 * @param i_cppFreeMethod C++ function identifier to export (must be valid identifier, 0 parameters, used as Python method name, can be overloaded)
6093 * @param t_return Return type of the free function (for disambiguation)
6094 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
6095 *
6096 * @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
6097 */
6098#define PY_CLASS_FREE_METHOD_QUALIFIED_DOC_0( i_cppClass, i_cppFreeMethod, t_return, s_doc )\
6099 PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_0(\
6100 i_cppClass, i_cppFreeMethod, t_return, LASS_STRINGIFY(i_cppFreeMethod), s_doc )
6101
6102/** @ingroup ClassDefinition
6103 * @brief Export a C++ free function as a Python method with type qualification for 1-parameter functions and custom documentation (method name derived from function name).
6104 *
6105 * Convenience macro that wraps PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_1() with s_methodName = LASS_STRINGIFY(i_cppFreeMethod).
6106 *
6107 * @param i_cppClass C++ class you're exporting the method for
6108 * @param i_cppFreeMethod C++ function identifier to export (must be valid identifier, 1 parameters, used as Python method name, can be overloaded)
6109 * @param t_return Return type of the free function (for disambiguation)
6110 * @param t_P1 Parameter types for the free function (disambiguation)
6111 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
6112 *
6113 * @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
6114 */
6115#define PY_CLASS_FREE_METHOD_QUALIFIED_DOC_1( i_cppClass, i_cppFreeMethod, t_return, t_P1, s_doc )\
6116 PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_1(\
6117 i_cppClass, i_cppFreeMethod, t_return, t_P1, LASS_STRINGIFY(i_cppFreeMethod), s_doc )
6118
6119/** @ingroup ClassDefinition
6120 * @brief Export a C++ free function as a Python method with type qualification for 2-parameter functions and custom documentation (method name derived from function name).
6121 *
6122 * Convenience macro that wraps PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_2() with s_methodName = LASS_STRINGIFY(i_cppFreeMethod).
6123 *
6124 * @param i_cppClass C++ class you're exporting the method for
6125 * @param i_cppFreeMethod C++ function identifier to export (must be valid identifier, 2 parameters, used as Python method name, can be overloaded)
6126 * @param t_return Return type of the free function (for disambiguation)
6127 * @param t_P1, t_P2 Parameter types for the free function (disambiguation)
6128 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
6129 *
6130 * @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
6131 */
6132#define PY_CLASS_FREE_METHOD_QUALIFIED_DOC_2( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, s_doc )\
6133 PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_2(\
6134 i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, LASS_STRINGIFY(i_cppFreeMethod), s_doc )
6135
6136/** @ingroup ClassDefinition
6137 * @brief Export a C++ free function as a Python method with type qualification for 3-parameter functions and custom documentation (method name derived from function name).
6138 *
6139 * Convenience macro that wraps PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_3() with s_methodName = LASS_STRINGIFY(i_cppFreeMethod).
6140 *
6141 * @param i_cppClass C++ class you're exporting the method for
6142 * @param i_cppFreeMethod C++ function identifier to export (must be valid identifier, 3 parameters, used as Python method name, can be overloaded)
6143 * @param t_return Return type of the free function (for disambiguation)
6144 * @param t_P1, t_P2, t_P3 Parameter types for the free function (disambiguation)
6145 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
6146 *
6147 * @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
6148 */
6149#define PY_CLASS_FREE_METHOD_QUALIFIED_DOC_3( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, s_doc )\
6150 PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_3(\
6151 i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, LASS_STRINGIFY(i_cppFreeMethod), s_doc )
6152
6153/** @ingroup ClassDefinition
6154 * @brief Export a C++ free function as a Python method with type qualification for 4-parameter functions and custom documentation (method name derived from function name).
6155 *
6156 * Convenience macro that wraps PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_4() with s_methodName = LASS_STRINGIFY(i_cppFreeMethod).
6157 *
6158 * @param i_cppClass C++ class you're exporting the method for
6159 * @param i_cppFreeMethod C++ function identifier to export (must be valid identifier, 4 parameters, used as Python method name, can be overloaded)
6160 * @param t_return Return type of the free function (for disambiguation)
6161 * @param t_P1, t_P2, t_P3, t_P4 Parameter types for the free function (disambiguation)
6162 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
6163 *
6164 * @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
6165 */
6166#define PY_CLASS_FREE_METHOD_QUALIFIED_DOC_4( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, s_doc )\
6167 PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_4(\
6168 i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, LASS_STRINGIFY(i_cppFreeMethod), s_doc )
6169
6170/** @ingroup ClassDefinition
6171 * @brief Export a C++ free function as a Python method with type qualification for 5-parameter functions and custom documentation (method name derived from function name).
6172 *
6173 * Convenience macro that wraps PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_5() with s_methodName = LASS_STRINGIFY(i_cppFreeMethod).
6174 *
6175 * @param i_cppClass C++ class you're exporting the method for
6176 * @param i_cppFreeMethod C++ function identifier to export (must be valid identifier, 5 parameters, used as Python method name, can be overloaded)
6177 * @param t_return Return type of the free function (for disambiguation)
6178 * @param t_P1, t_P2, t_P3, t_P4, t_P5 Parameter types for the free function (disambiguation)
6179 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
6180 *
6181 * @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
6182 */
6183#define PY_CLASS_FREE_METHOD_QUALIFIED_DOC_5( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, s_doc )\
6184 PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_5(\
6185 i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, LASS_STRINGIFY(i_cppFreeMethod), s_doc )
6186
6187/** @ingroup ClassDefinition
6188 * @brief Export a C++ free function as a Python method with type qualification for 6-parameter functions and custom documentation (method name derived from function name).
6189 *
6190 * Convenience macro that wraps PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_6() with s_methodName = LASS_STRINGIFY(i_cppFreeMethod).
6191 *
6192 * @param i_cppClass C++ class you're exporting the method for
6193 * @param i_cppFreeMethod C++ function identifier to export (must be valid identifier, 6 parameters, used as Python method name, can be overloaded)
6194 * @param t_return Return type of the free function (for disambiguation)
6195 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6 Parameter types for the free function (disambiguation)
6196 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
6197 *
6198 * @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
6199 */
6200#define PY_CLASS_FREE_METHOD_QUALIFIED_DOC_6( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, s_doc )\
6201 PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_6(\
6202 i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, LASS_STRINGIFY(i_cppFreeMethod), s_doc )
6203
6204/** @ingroup ClassDefinition
6205 * @brief Export a C++ free function as a Python method with type qualification for 7-parameter functions and custom documentation (method name derived from function name).
6206 *
6207 * Convenience macro that wraps PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_7() with s_methodName = LASS_STRINGIFY(i_cppFreeMethod).
6208 *
6209 * @param i_cppClass C++ class you're exporting the method for
6210 * @param i_cppFreeMethod C++ function identifier to export (must be valid identifier, 7 parameters, used as Python method name, can be overloaded)
6211 * @param t_return Return type of the free function (for disambiguation)
6212 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7 Parameter types for the free function (disambiguation)
6213 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
6214 *
6215 * @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
6216 */
6217#define PY_CLASS_FREE_METHOD_QUALIFIED_DOC_7( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, s_doc )\
6218 PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_7(\
6219 i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, LASS_STRINGIFY(i_cppFreeMethod), s_doc )
6220
6221/** @ingroup ClassDefinition
6222 * @brief Export a C++ free function as a Python method with type qualification for 8-parameter functions and custom documentation (method name derived from function name).
6223 *
6224 * Convenience macro that wraps PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_8() with s_methodName = LASS_STRINGIFY(i_cppFreeMethod).
6225 *
6226 * @param i_cppClass C++ class you're exporting the method for
6227 * @param i_cppFreeMethod C++ function identifier to export (must be valid identifier, 8 parameters, used as Python method name, can be overloaded)
6228 * @param t_return Return type of the free function (for disambiguation)
6229 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8 Parameter types for the free function (disambiguation)
6230 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
6231 *
6232 * @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
6233 */
6234#define PY_CLASS_FREE_METHOD_QUALIFIED_DOC_8( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, s_doc )\
6235 PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_8(\
6236 i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, LASS_STRINGIFY(i_cppFreeMethod), s_doc )
6237
6238/** @ingroup ClassDefinition
6239 * @brief Export a C++ free function as a Python method with type qualification for 9-parameter functions and custom documentation (method name derived from function name).
6240 *
6241 * Convenience macro that wraps PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_9() with s_methodName = LASS_STRINGIFY(i_cppFreeMethod).
6242 *
6243 * @param i_cppClass C++ class you're exporting the method for
6244 * @param i_cppFreeMethod C++ function identifier to export (must be valid identifier, 9 parameters, used as Python method name, can be overloaded)
6245 * @param t_return Return type of the free function (for disambiguation)
6246 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9 Parameter types for the free function (disambiguation)
6247 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
6248 *
6249 * @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
6250 */
6251#define PY_CLASS_FREE_METHOD_QUALIFIED_DOC_9( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, s_doc )\
6252 PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_9(\
6253 i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, LASS_STRINGIFY(i_cppFreeMethod), s_doc )
6254
6255/** @ingroup ClassDefinition
6256 * @brief Export a C++ free function as a Python method with type qualification for 10-parameter functions and custom documentation (method name derived from function name).
6257 *
6258 * Convenience macro that wraps PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_10() with s_methodName = LASS_STRINGIFY(i_cppFreeMethod).
6259 *
6260 * @param i_cppClass C++ class you're exporting the method for
6261 * @param i_cppFreeMethod C++ function identifier to export (must be valid identifier, 10 parameters, used as Python method name, can be overloaded)
6262 * @param t_return Return type of the free function (for disambiguation)
6263 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10 Parameter types for the free function (disambiguation)
6264 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
6265 *
6266 * @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
6267 */
6268#define PY_CLASS_FREE_METHOD_QUALIFIED_DOC_10( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, s_doc )\
6269 PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_10(\
6270 i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, LASS_STRINGIFY(i_cppFreeMethod), s_doc )
6271
6272/** @ingroup ClassDefinition
6273 * @brief Export a C++ free function as a Python method with type qualification for 11-parameter functions and custom documentation (method name derived from function name).
6274 *
6275 * Convenience macro that wraps PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_11() with s_methodName = LASS_STRINGIFY(i_cppFreeMethod).
6276 *
6277 * @param i_cppClass C++ class you're exporting the method for
6278 * @param i_cppFreeMethod C++ function identifier to export (must be valid identifier, 11 parameters, used as Python method name, can be overloaded)
6279 * @param t_return Return type of the free function (for disambiguation)
6280 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11 Parameter types for the free function (disambiguation)
6281 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
6282 *
6283 * @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
6284 */
6285#define PY_CLASS_FREE_METHOD_QUALIFIED_DOC_11( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, s_doc )\
6286 PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_11(\
6287 i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, LASS_STRINGIFY(i_cppFreeMethod), s_doc )
6288
6289/** @ingroup ClassDefinition
6290 * @brief Export a C++ free function as a Python method with type qualification for 12-parameter functions and custom documentation (method name derived from function name).
6291 *
6292 * Convenience macro that wraps PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_12() with s_methodName = LASS_STRINGIFY(i_cppFreeMethod).
6293 *
6294 * @param i_cppClass C++ class you're exporting the method for
6295 * @param i_cppFreeMethod C++ function identifier to export (must be valid identifier, 12 parameters, used as Python method name, can be overloaded)
6296 * @param t_return Return type of the free function (for disambiguation)
6297 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12 Parameter types for the free function (disambiguation)
6298 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
6299 *
6300 * @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
6301 */
6302#define PY_CLASS_FREE_METHOD_QUALIFIED_DOC_12( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, s_doc )\
6303 PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_12(\
6304 i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, LASS_STRINGIFY(i_cppFreeMethod), s_doc )
6305
6306/** @ingroup ClassDefinition
6307 * @brief Export a C++ free function as a Python method with type qualification for 13-parameter functions and custom documentation (method name derived from function name).
6308 *
6309 * Convenience macro that wraps PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_13() with s_methodName = LASS_STRINGIFY(i_cppFreeMethod).
6310 *
6311 * @param i_cppClass C++ class you're exporting the method for
6312 * @param i_cppFreeMethod C++ function identifier to export (must be valid identifier, 13 parameters, used as Python method name, can be overloaded)
6313 * @param t_return Return type of the free function (for disambiguation)
6314 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13 Parameter types for the free function (disambiguation)
6315 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
6316 *
6317 * @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
6318 */
6319#define PY_CLASS_FREE_METHOD_QUALIFIED_DOC_13( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, s_doc )\
6320 PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_13(\
6321 i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, LASS_STRINGIFY(i_cppFreeMethod), s_doc )
6322
6323/** @ingroup ClassDefinition
6324 * @brief Export a C++ free function as a Python method with type qualification for 14-parameter functions and custom documentation (method name derived from function name).
6325 *
6326 * Convenience macro that wraps PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_14() with s_methodName = LASS_STRINGIFY(i_cppFreeMethod).
6327 *
6328 * @param i_cppClass C++ class you're exporting the method for
6329 * @param i_cppFreeMethod C++ function identifier to export (must be valid identifier, 14 parameters, used as Python method name, can be overloaded)
6330 * @param t_return Return type of the free function (for disambiguation)
6331 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14 Parameter types for the free function (disambiguation)
6332 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
6333 *
6334 * @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
6335 */
6336#define PY_CLASS_FREE_METHOD_QUALIFIED_DOC_14( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, s_doc )\
6337 PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_14(\
6338 i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, LASS_STRINGIFY(i_cppFreeMethod), s_doc )
6339
6340/** @ingroup ClassDefinition
6341 * @brief Export a C++ free function as a Python method with type qualification for 15-parameter functions and custom documentation (method name derived from function name).
6342 *
6343 * Convenience macro that wraps PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_15() with s_methodName = LASS_STRINGIFY(i_cppFreeMethod).
6344 *
6345 * @param i_cppClass C++ class you're exporting the method for
6346 * @param i_cppFreeMethod C++ function identifier to export (must be valid identifier, 15 parameters, used as Python method name, can be overloaded)
6347 * @param t_return Return type of the free function (for disambiguation)
6348 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15 Parameter types for the free function (disambiguation)
6349 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
6350 *
6351 * @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
6352 */
6353#define PY_CLASS_FREE_METHOD_QUALIFIED_DOC_15( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15, s_doc )\
6354 PY_CLASS_FREE_METHOD_QUALIFIED_NAME_DOC_15(\
6355 i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15, LASS_STRINGIFY(i_cppFreeMethod), s_doc )
6356
6357
6358/** @ingroup ClassDefinition
6359 * @brief Export a C++ free function as a Python method with type qualification (method name derived from function name, no documentation).
6360 *
6361 * Convenience macro that wraps PY_CLASS_FREE_METHOD_QUALIFIED_DOC() with s_doc = nullptr.
6362 *
6363 * @param i_cppClass C++ class you're exporting the method for
6364 * @param i_cppFreeMethod C++ function identifier to export (must be valid identifier, used as Python method name, can be overloaded)
6365 * @param t_return Return type of the free function (for disambiguation)
6366 * @param t_params Parameter types as lass::meta::TypeTuple (for disambiguation)
6367 *
6368 * @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
6369 */
6370#define PY_CLASS_FREE_METHOD_QUALIFIED( i_cppClass, i_cppFreeMethod, t_return, t_params )\
6371 PY_CLASS_FREE_METHOD_QUALIFIED_DOC( i_cppClass, i_cppFreeMethod, t_return, t_params, 0 )
6372
6373/** @ingroup ClassDefinition
6374 * @brief Export a C++ free function as a Python method with type qualification for 0-parameter functions (method name derived from function name, no documentation).
6375 *
6376 * Convenience macro that wraps PY_CLASS_FREE_METHOD_QUALIFIED_DOC_0() with s_doc = nullptr.
6377 *
6378 * @param i_cppClass C++ class you're exporting the method for
6379 * @param i_cppFreeMethod C++ function identifier to export (must be valid identifier, 0 parameters, used as Python method name, can be overloaded)
6380 * @param t_return Return type of the free function (for disambiguation)
6381 *
6382 * @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
6383 */
6384#define PY_CLASS_FREE_METHOD_QUALIFIED_0( i_cppClass, i_cppFreeMethod, t_return )\
6385 PY_CLASS_FREE_METHOD_QUALIFIED_DOC_0( i_cppClass, i_cppFreeMethod, t_return, 0 )
6386
6387/** @ingroup ClassDefinition
6388 * @brief Export a C++ free function as a Python method with type qualification for 1-parameter functions (method name derived from function name, no documentation).
6389 *
6390 * Convenience macro that wraps PY_CLASS_FREE_METHOD_QUALIFIED_DOC_1() with s_doc = nullptr.
6391 *
6392 * @param i_cppClass C++ class you're exporting the method for
6393 * @param i_cppFreeMethod C++ function identifier to export (must be valid identifier, 1 parameters, used as Python method name, can be overloaded)
6394 * @param t_return Return type of the free function (for disambiguation)
6395 * @param t_P1 Parameter types for the free function (for disambiguation)
6396 *
6397 * @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
6398 */
6399#define PY_CLASS_FREE_METHOD_QUALIFIED_1( i_cppClass, i_cppFreeMethod, t_return, t_P1 )\
6400 PY_CLASS_FREE_METHOD_QUALIFIED_DOC_1( i_cppClass, i_cppFreeMethod, t_return, t_P1, 0 )
6401
6402/** @ingroup ClassDefinition
6403 * @brief Export a C++ free function as a Python method with type qualification for 2-parameter functions (method name derived from function name, no documentation).
6404 *
6405 * Convenience macro that wraps PY_CLASS_FREE_METHOD_QUALIFIED_DOC_2() with s_doc = nullptr.
6406 *
6407 * @param i_cppClass C++ class you're exporting the method for
6408 * @param i_cppFreeMethod C++ function identifier to export (must be valid identifier, 2 parameters, used as Python method name, can be overloaded)
6409 * @param t_return Return type of the free function (for disambiguation)
6410 * @param t_P1, t_P2 Parameter types for the free function (for disambiguation)
6411 *
6412 * @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
6413 */
6414#define PY_CLASS_FREE_METHOD_QUALIFIED_2( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2 )\
6415 PY_CLASS_FREE_METHOD_QUALIFIED_DOC_2( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, 0 )
6416
6417/** @ingroup ClassDefinition
6418 * @brief Export a C++ free function as a Python method with type qualification for 3-parameter functions (method name derived from function name, no documentation).
6419 *
6420 * Convenience macro that wraps PY_CLASS_FREE_METHOD_QUALIFIED_DOC_3() with s_doc = nullptr.
6421 *
6422 * @param i_cppClass C++ class you're exporting the method for
6423 * @param i_cppFreeMethod C++ function identifier to export (must be valid identifier, 3 parameters, used as Python method name, can be overloaded)
6424 * @param t_return Return type of the free function (for disambiguation)
6425 * @param t_P1, t_P2, t_P3 Parameter types for the free function (for disambiguation)
6426 *
6427 * @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
6428 */
6429#define PY_CLASS_FREE_METHOD_QUALIFIED_3( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3 )\
6430 PY_CLASS_FREE_METHOD_QUALIFIED_DOC_3( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, 0 )
6431
6432/** @ingroup ClassDefinition
6433 * @brief Export a C++ free function as a Python method with type qualification for 4-parameter functions (method name derived from function name, no documentation).
6434 *
6435 * Convenience macro that wraps PY_CLASS_FREE_METHOD_QUALIFIED_DOC_4() with s_doc = nullptr.
6436 *
6437 * @param i_cppClass C++ class you're exporting the method for
6438 * @param i_cppFreeMethod C++ function identifier to export (must be valid identifier, 4 parameters, used as Python method name, can be overloaded)
6439 * @param t_return Return type of the free function (for disambiguation)
6440 * @param t_P1, t_P2, t_P3, t_P4 Parameter types for the free function (for disambiguation)
6441 *
6442 * @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
6443 */
6444#define PY_CLASS_FREE_METHOD_QUALIFIED_4( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4 )\
6445 PY_CLASS_FREE_METHOD_QUALIFIED_DOC_4( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, 0 )
6446
6447/** @ingroup ClassDefinition
6448 * @brief Export a C++ free function as a Python method with type qualification for 5-parameter functions (method name derived from function name, no documentation).
6449 *
6450 * Convenience macro that wraps PY_CLASS_FREE_METHOD_QUALIFIED_DOC_5() with s_doc = nullptr.
6451 *
6452 * @param i_cppClass C++ class you're exporting the method for
6453 * @param i_cppFreeMethod C++ function identifier to export (must be valid identifier, 5 parameters, used as Python method name, can be overloaded)
6454 * @param t_return Return type of the free function (for disambiguation)
6455 * @param t_P1, t_P2, t_P3, t_P4, t_P5 Parameter types for the free function (for disambiguation)
6456 *
6457 * @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
6458 */
6459#define PY_CLASS_FREE_METHOD_QUALIFIED_5( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5 )\
6460 PY_CLASS_FREE_METHOD_QUALIFIED_DOC_5( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, 0 )
6461
6462/** @ingroup ClassDefinition
6463 * @brief Export a C++ free function as a Python method with type qualification for 6-parameter functions (method name derived from function name, no documentation).
6464 *
6465 * Convenience macro that wraps PY_CLASS_FREE_METHOD_QUALIFIED_DOC_6() with s_doc = nullptr.
6466 *
6467 * @param i_cppClass C++ class you're exporting the method for
6468 * @param i_cppFreeMethod C++ function identifier to export (must be valid identifier, 6 parameters, used as Python method name, can be overloaded)
6469 * @param t_return Return type of the free function (for disambiguation)
6470 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6 Parameter types for the free function (for disambiguation)
6471 *
6472 * @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
6473 */
6474#define PY_CLASS_FREE_METHOD_QUALIFIED_6( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6 )\
6475 PY_CLASS_FREE_METHOD_QUALIFIED_DOC_6( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, 0 )
6476
6477/** @ingroup ClassDefinition
6478 * @brief Export a C++ free function as a Python method with type qualification for 7-parameter functions (method name derived from function name, no documentation).
6479 *
6480 * Convenience macro that wraps PY_CLASS_FREE_METHOD_QUALIFIED_DOC_7() with s_doc = nullptr.
6481 *
6482 * @param i_cppClass C++ class you're exporting the method for
6483 * @param i_cppFreeMethod C++ function identifier to export (must be valid identifier, 7 parameters, used as Python method name, can be overloaded)
6484 * @param t_return Return type of the free function (for disambiguation)
6485 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7 Parameter types for the free function (for disambiguation)
6486 *
6487 * @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
6488 */
6489#define PY_CLASS_FREE_METHOD_QUALIFIED_7( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7 )\
6490 PY_CLASS_FREE_METHOD_QUALIFIED_DOC_7( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, 0 )
6491
6492/** @ingroup ClassDefinition
6493 * @brief Export a C++ free function as a Python method with type qualification for 8-parameter functions (method name derived from function name, no documentation).
6494 *
6495 * Convenience macro that wraps PY_CLASS_FREE_METHOD_QUALIFIED_DOC_8() with s_doc = nullptr.
6496 *
6497 * @param i_cppClass C++ class you're exporting the method for
6498 * @param i_cppFreeMethod C++ function identifier to export (must be valid identifier, 8 parameters, used as Python method name, can be overloaded)
6499 * @param t_return Return type of the free function (for disambiguation)
6500 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8 Parameter types for the free function (for disambiguation)
6501 *
6502 * @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
6503 */
6504#define PY_CLASS_FREE_METHOD_QUALIFIED_8( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8 )\
6505 PY_CLASS_FREE_METHOD_QUALIFIED_DOC_8( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, 0 )
6506
6507/** @ingroup ClassDefinition
6508 * @brief Export a C++ free function as a Python method with type qualification for 9-parameter functions (method name derived from function name, no documentation).
6509 *
6510 * Convenience macro that wraps PY_CLASS_FREE_METHOD_QUALIFIED_DOC_9() with s_doc = nullptr.
6511 *
6512 * @param i_cppClass C++ class you're exporting the method for
6513 * @param i_cppFreeMethod C++ function identifier to export (must be valid identifier, 9 parameters, used as Python method name, can be overloaded)
6514 * @param t_return Return type of the free function (for disambiguation)
6515 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9 Parameter types for the free function (for disambiguation)
6516 *
6517 * @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
6518 */
6519#define PY_CLASS_FREE_METHOD_QUALIFIED_9( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9 )\
6520 PY_CLASS_FREE_METHOD_QUALIFIED_DOC_9( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, 0 )
6521
6522/** @ingroup ClassDefinition
6523 * @brief Export a C++ free function as a Python method with type qualification for 10-parameter functions (method name derived from function name, no documentation).
6524 *
6525 * Convenience macro that wraps PY_CLASS_FREE_METHOD_QUALIFIED_DOC_10() with s_doc = nullptr.
6526 *
6527 * @param i_cppClass C++ class you're exporting the method for
6528 * @param i_cppFreeMethod C++ function identifier to export (must be valid identifier, 10 parameters, used as Python method name, can be overloaded)
6529 * @param t_return Return type of the free function (for disambiguation)
6530 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10 Parameter types for the free function (for disambiguation)
6531 *
6532 * @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
6533 */
6534#define PY_CLASS_FREE_METHOD_QUALIFIED_10( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10 )\
6535 PY_CLASS_FREE_METHOD_QUALIFIED_DOC_10( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, 0 )
6536
6537/** @ingroup ClassDefinition
6538 * @brief Export a C++ free function as a Python method with type qualification for 11-parameter functions (method name derived from function name, no documentation).
6539 *
6540 * Convenience macro that wraps PY_CLASS_FREE_METHOD_QUALIFIED_DOC_11() with s_doc = nullptr.
6541 *
6542 * @param i_cppClass C++ class you're exporting the method for
6543 * @param i_cppFreeMethod C++ function identifier to export (must be valid identifier, 11 parameters, used as Python method name, can be overloaded)
6544 * @param t_return Return type of the free function (for disambiguation)
6545 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11 Parameter types for the free function (for disambiguation)
6546 *
6547 * @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
6548 */
6549#define PY_CLASS_FREE_METHOD_QUALIFIED_11( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11 )\
6550 PY_CLASS_FREE_METHOD_QUALIFIED_DOC_11( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, 0 )
6551
6552/** @ingroup ClassDefinition
6553 * @brief Export a C++ free function as a Python method with type qualification for 12-parameter functions (method name derived from function name, no documentation).
6554 *
6555 * Convenience macro that wraps PY_CLASS_FREE_METHOD_QUALIFIED_DOC_12() with s_doc = nullptr.
6556 *
6557 * @param i_cppClass C++ class you're exporting the method for
6558 * @param i_cppFreeMethod C++ function identifier to export (must be valid identifier, 12 parameters, used as Python method name, can be overloaded)
6559 * @param t_return Return type of the free function (for disambiguation)
6560 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12 Parameter types for the free function (for disambiguation)
6561 *
6562 * @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
6563 */
6564#define PY_CLASS_FREE_METHOD_QUALIFIED_12( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12 )\
6565 PY_CLASS_FREE_METHOD_QUALIFIED_DOC_12( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, 0 )
6566
6567/** @ingroup ClassDefinition
6568 * @brief Export a C++ free function as a Python method with type qualification for 13-parameter functions (method name derived from function name, no documentation).
6569 *
6570 * Convenience macro that wraps PY_CLASS_FREE_METHOD_QUALIFIED_DOC_13() with s_doc = nullptr.
6571 *
6572 * @param i_cppClass C++ class you're exporting the method for
6573 * @param i_cppFreeMethod C++ function identifier to export (must be valid identifier, 13 parameters, used as Python method name, can be overloaded)
6574 * @param t_return Return type of the free function (for disambiguation)
6575 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13 Parameter types for the free function (for disambiguation)
6576 *
6577 * @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
6578 */
6579#define PY_CLASS_FREE_METHOD_QUALIFIED_13( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13 )\
6580 PY_CLASS_FREE_METHOD_QUALIFIED_DOC_13( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, 0 )
6581
6582/** @ingroup ClassDefinition
6583 * @brief Export a C++ free function as a Python method with type qualification for 14-parameter functions (method name derived from function name, no documentation).
6584 *
6585 * Convenience macro that wraps PY_CLASS_FREE_METHOD_QUALIFIED_DOC_14() with s_doc = nullptr.
6586 *
6587 * @param i_cppClass C++ class you're exporting the method for
6588 * @param i_cppFreeMethod C++ function identifier to export (must be valid identifier, 14 parameters, used as Python method name, can be overloaded)
6589 * @param t_return Return type of the free function (for disambiguation)
6590 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14 Parameter types for the free function (for disambiguation)
6591 *
6592 * @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
6593 */
6594#define PY_CLASS_FREE_METHOD_QUALIFIED_14( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14 )\
6595 PY_CLASS_FREE_METHOD_QUALIFIED_DOC_14( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, 0 )
6596
6597/** @ingroup ClassDefinition
6598 * @brief Export a C++ free function as a Python method with type qualification for 15-parameter functions (method name derived from function name, no documentation).
6599 *
6600 * Convenience macro that wraps PY_CLASS_FREE_METHOD_QUALIFIED_DOC_15() with s_doc = nullptr.
6601 *
6602 * @param i_cppClass C++ class you're exporting the method for
6603 * @param i_cppFreeMethod C++ function identifier to export (must be valid identifier, 15 parameters, used as Python method name, can be overloaded)
6604 * @param t_return Return type of the free function (for disambiguation)
6605 * @param t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15 Parameter types for the free function (for disambiguation)
6606 *
6607 * @sa PY_CLASS_FREE_METHOD_QUALIFIED_EX
6608 */
6609#define PY_CLASS_FREE_METHOD_QUALIFIED_15( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15 )\
6610 PY_CLASS_FREE_METHOD_QUALIFIED_DOC_15( i_cppClass, i_cppFreeMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15, 0 )
6611
6612
6613/** @} */
6614
6615// --- "casting" methods ------------------------------------------------------------------------------
6616
6617/** @addtogroup ClassDefinition
6618 * @name Casting Method Export Macros (Deprecated)
6619 *
6620 * @deprecated These casting method macros are deprecated. Use the regular or free method export macros instead.
6621 *
6622 * Export C++ methods to Python with custom casting policies for type conversion. These macros
6623 * allow on-the-fly type conversion using casting operators like PointerCast and CopyCast.
6624 * However, these macros are deprecated and should be avoided in new code.
6625 *
6626 * @{
6627 */
6628
6629/** @ingroup ClassDefinition
6630 * @brief Export a C++ method to Python with custom casting policy and full parameter control.
6631 * @deprecated Use PY_CLASS_METHOD_EX() or PY_CLASS_FREE_METHOD_EX() instead.
6632 *
6633 * This macro exports a C++ method to Python with a custom casting policy for type conversion.
6634 * It allows on-the-fly conversion using casting operators. However, this macro is deprecated
6635 * and should not be used in new code.
6636 *
6637 * Supported casting operators:
6638 * - `PointerCast<_type>`: Interprets ownership rules as if a pointer is passed
6639 * - `CopyCast<_type>`: Interprets ownership rules as if a copy of the object is passed
6640 * - Custom casting operators can be defined following the PointerCast pattern
6641 *
6642 * @param t_cppClass C++ class you're exporting a method of
6643 * @param i_cppMethod Name of the method in C++
6644 * @param t_return Return type of the method
6645 * @param t_params lass::meta::TypeTuple of the parameter types
6646 * @param s_methodName Python method name (null-terminated C string literal or special method from lass::python::methods namespace)
6647 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
6648 * @param i_dispatcher Unique identifier for the generated dispatcher function
6649 * @param i_typename Type name for casting operations
6650 *
6651 * ```cpp
6652 * // foo.h
6653 * class Foo
6654 * {
6655 * PY_HEADER(python::PyObjectPlus)
6656 * public:
6657 * void bar(int a);
6658 * void bar(const std::string& b) const;
6659 * };
6660 *
6661 * // foo.cpp - DEPRECATED USAGE
6662 * PY_DECLARE_CLASS(Foo)
6663 * PY_CLASS_METHOD_CAST_EX_0(Foo, bar, void, CopyCast<const std::string&>, "bar", nullptr, foo_bar_a)
6664 * ```
6665 */
6666
6667
6668/** @ingroup ClassDefinition
6669 * @brief Export a C++ method with casting policy for 0-parameter methods.
6670 * @deprecated Use PY_CLASS_METHOD_EX() or PY_CLASS_FREE_METHOD_EX() instead.
6671 */
6672#define PY_CLASS_METHOD_CAST_EX_0(t_cppClass, i_cppMethod, t_return, s_methodName, s_doc, i_dispatcher, i_typename) \
6673 ::lass::python::OwnerCaster<t_return>::TCaster::TTarget LASS_CONCATENATE(i_dispatcher, _caster) ( \
6674 ::lass::python::impl::ShadowTraits< t_cppClass >::TCppClass& iThis\
6675 )\
6676 {\
6677 return iThis.i_cppMethod () ; \
6678 }\
6679 PY_CLASS_FREE_METHOD_EX( t_cppClass, LASS_CONCATENATE(i_dispatcher, _caster), s_methodName, s_doc, i_dispatcher );
6680
6681
6682
6683/** @ingroup ClassDefinition
6684 * @brief Export a C++ method with casting policy for 1-parameter methods.
6685 * @deprecated Use PY_CLASS_METHOD_EX() or PY_CLASS_FREE_METHOD_EX() instead.
6686 */
6687 #define PY_CLASS_METHOD_CAST_EX_1( t_cppClass, i_cppMethod, t_return, t_P1, s_methodName, s_doc, i_dispatcher, i_typename )\
6688 ::lass::python::OwnerCaster< t_return >::TCaster::TTarget LASS_CONCATENATE(i_dispatcher, _caster) ( \
6689 ::lass::python::impl::ShadowTraits< t_cppClass >::TCppClass& iThis,\
6690 ::lass::python::OwnerCaster< t_P1 >::TCaster::TTarget iArg1 \
6691 )\
6692 {\
6693 return iThis.i_cppMethod ( ::lass::python::OwnerCaster< t_P1 >::TCaster::cast(iArg1) );\
6694 }\
6695 PY_CLASS_FREE_METHOD_EX( t_cppClass, LASS_CONCATENATE(i_dispatcher, _caster), s_methodName, s_doc, i_dispatcher );
6696
6697/** @ingroup ClassDefinition
6698 * @brief Export a C++ method with casting policy for 2-parameter methods.
6699 * @deprecated Use PY_CLASS_METHOD_EX() or PY_CLASS_FREE_METHOD_EX() instead.
6700 */
6701 #define PY_CLASS_METHOD_CAST_EX_2( t_cppClass, i_cppMethod, t_return, t_P1, t_P2, s_methodName, s_doc, i_dispatcher, i_typename )\
6702 ::lass::python::OwnerCaster< t_return >::TCaster::TTarget LASS_CONCATENATE(i_dispatcher, _caster) ( \
6703 ::lass::python::impl::ShadowTraits< t_cppClass >::TCppClass& iThis,\
6704 ::lass::python::OwnerCaster< t_P1 >::TCaster::TTarget iArg1, ::lass::python::OwnerCaster< t_P2 >::TCaster::TTarget iArg2 \
6705 )\
6706 {\
6707 return iThis.i_cppMethod ( ::lass::python::OwnerCaster< t_P1 >::TCaster::cast(iArg1), ::lass::python::OwnerCaster< t_P2 >::TCaster::cast(iArg2) );\
6708 }\
6709 PY_CLASS_FREE_METHOD_EX( t_cppClass, LASS_CONCATENATE(i_dispatcher, _caster), s_methodName, s_doc, i_dispatcher );
6710
6711/** @ingroup ClassDefinition
6712 * @brief Export a C++ method with casting policy for 3-parameter methods.
6713 * @deprecated Use PY_CLASS_METHOD_EX() or PY_CLASS_FREE_METHOD_EX() instead.
6714 */
6715 #define PY_CLASS_METHOD_CAST_EX_3( t_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, s_methodName, s_doc, i_dispatcher, i_typename )\
6716 ::lass::python::OwnerCaster< t_return >::TCaster::TTarget LASS_CONCATENATE(i_dispatcher, _caster) ( \
6717 ::lass::python::impl::ShadowTraits< t_cppClass >::TCppClass& iThis,\
6718 ::lass::python::OwnerCaster< t_P1 >::TCaster::TTarget iArg1, ::lass::python::OwnerCaster< t_P2 >::TCaster::TTarget iArg2, ::lass::python::OwnerCaster< t_P3 >::TCaster::TTarget iArg3 \
6719 )\
6720 {\
6721 return iThis.i_cppMethod ( ::lass::python::OwnerCaster< t_P1 >::TCaster::cast(iArg1), ::lass::python::OwnerCaster< t_P2 >::TCaster::cast(iArg2), ::lass::python::OwnerCaster< t_P3 >::TCaster::cast(iArg3) );\
6722 }\
6723 PY_CLASS_FREE_METHOD_EX( t_cppClass, LASS_CONCATENATE(i_dispatcher, _caster), s_methodName, s_doc, i_dispatcher );
6724
6725/** @ingroup ClassDefinition
6726 * @brief Export a C++ method with casting policy for 4-parameter methods.
6727 * @deprecated Use PY_CLASS_METHOD_EX() or PY_CLASS_FREE_METHOD_EX() instead.
6728 */
6729 #define PY_CLASS_METHOD_CAST_EX_4( t_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, s_methodName, s_doc, i_dispatcher, i_typename )\
6730 ::lass::python::OwnerCaster< t_return >::TCaster::TTarget LASS_CONCATENATE(i_dispatcher, _caster) ( \
6731 ::lass::python::impl::ShadowTraits< t_cppClass >::TCppClass& iThis,\
6732 ::lass::python::OwnerCaster< t_P1 >::TCaster::TTarget iArg1, ::lass::python::OwnerCaster< t_P2 >::TCaster::TTarget iArg2, ::lass::python::OwnerCaster< t_P3 >::TCaster::TTarget iArg3, ::lass::python::OwnerCaster< t_P4 >::TCaster::TTarget iArg4 \
6733 )\
6734 {\
6735 return iThis.i_cppMethod ( ::lass::python::OwnerCaster< t_P1 >::TCaster::cast(iArg1), ::lass::python::OwnerCaster< t_P2 >::TCaster::cast(iArg2), ::lass::python::OwnerCaster< t_P3 >::TCaster::cast(iArg3), ::lass::python::OwnerCaster< t_P4 >::TCaster::cast(iArg4) );\
6736 }\
6737 PY_CLASS_FREE_METHOD_EX( t_cppClass, LASS_CONCATENATE(i_dispatcher, _caster), s_methodName, s_doc, i_dispatcher );
6738
6739/** @ingroup ClassDefinition
6740 * @brief Export a C++ method with casting policy for 5-parameter methods.
6741 * @deprecated Use PY_CLASS_METHOD_EX() or PY_CLASS_FREE_METHOD_EX() instead.
6742 */
6743 #define PY_CLASS_METHOD_CAST_EX_5( t_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, s_methodName, s_doc, i_dispatcher, i_typename )\
6744 ::lass::python::OwnerCaster< t_return >::TCaster::TTarget LASS_CONCATENATE(i_dispatcher, _caster) ( \
6745 ::lass::python::impl::ShadowTraits< t_cppClass >::TCppClass& iThis,\
6746 ::lass::python::OwnerCaster< t_P1 >::TCaster::TTarget iArg1, ::lass::python::OwnerCaster< t_P2 >::TCaster::TTarget iArg2, ::lass::python::OwnerCaster< t_P3 >::TCaster::TTarget iArg3, ::lass::python::OwnerCaster< t_P4 >::TCaster::TTarget iArg4, ::lass::python::OwnerCaster< t_P5 >::TCaster::TTarget iArg5 \
6747 )\
6748 {\
6749 return iThis.i_cppMethod ( ::lass::python::OwnerCaster< t_P1 >::TCaster::cast(iArg1), ::lass::python::OwnerCaster< t_P2 >::TCaster::cast(iArg2), ::lass::python::OwnerCaster< t_P3 >::TCaster::cast(iArg3), ::lass::python::OwnerCaster< t_P4 >::TCaster::cast(iArg4), ::lass::python::OwnerCaster< t_P5 >::TCaster::cast(iArg5) );\
6750 }\
6751 PY_CLASS_FREE_METHOD_EX( t_cppClass, LASS_CONCATENATE(i_dispatcher, _caster), s_methodName, s_doc, i_dispatcher );
6752
6753/** @ingroup ClassDefinition
6754 * @brief Export a C++ method with casting policy for 6-parameter methods.
6755 * @deprecated Use PY_CLASS_METHOD_EX() or PY_CLASS_FREE_METHOD_EX() instead.
6756 */
6757 #define PY_CLASS_METHOD_CAST_EX_6( t_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, s_methodName, s_doc, i_dispatcher, i_typename )\
6758 ::lass::python::OwnerCaster< t_return >::TCaster::TTarget LASS_CONCATENATE(i_dispatcher, _caster) ( \
6759 ::lass::python::impl::ShadowTraits< t_cppClass >::TCppClass& iThis,\
6760 ::lass::python::OwnerCaster< t_P1 >::TCaster::TTarget iArg1, ::lass::python::OwnerCaster< t_P2 >::TCaster::TTarget iArg2, ::lass::python::OwnerCaster< t_P3 >::TCaster::TTarget iArg3, ::lass::python::OwnerCaster< t_P4 >::TCaster::TTarget iArg4, ::lass::python::OwnerCaster< t_P5 >::TCaster::TTarget iArg5, ::lass::python::OwnerCaster< t_P6 >::TCaster::TTarget iArg6 \
6761 )\
6762 {\
6763 return iThis.i_cppMethod ( ::lass::python::OwnerCaster< t_P1 >::TCaster::cast(iArg1), ::lass::python::OwnerCaster< t_P2 >::TCaster::cast(iArg2), ::lass::python::OwnerCaster< t_P3 >::TCaster::cast(iArg3), ::lass::python::OwnerCaster< t_P4 >::TCaster::cast(iArg4), ::lass::python::OwnerCaster< t_P5 >::TCaster::cast(iArg5), ::lass::python::OwnerCaster< t_P6 >::TCaster::cast(iArg6) );\
6764 }\
6765 PY_CLASS_FREE_METHOD_EX( t_cppClass, LASS_CONCATENATE(i_dispatcher, _caster), s_methodName, s_doc, i_dispatcher );
6766
6767/** @ingroup ClassDefinition
6768 * @brief Export a C++ method with casting policy for 7-parameter methods.
6769 * @deprecated Use PY_CLASS_METHOD_EX() or PY_CLASS_FREE_METHOD_EX() instead.
6770 */
6771 #define PY_CLASS_METHOD_CAST_EX_7( t_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, s_methodName, s_doc, i_dispatcher, i_typename )\
6772 ::lass::python::OwnerCaster< t_return >::TCaster::TTarget LASS_CONCATENATE(i_dispatcher, _caster) ( \
6773 ::lass::python::impl::ShadowTraits< t_cppClass >::TCppClass& iThis,\
6774 ::lass::python::OwnerCaster< t_P1 >::TCaster::TTarget iArg1, ::lass::python::OwnerCaster< t_P2 >::TCaster::TTarget iArg2, ::lass::python::OwnerCaster< t_P3 >::TCaster::TTarget iArg3, ::lass::python::OwnerCaster< t_P4 >::TCaster::TTarget iArg4, ::lass::python::OwnerCaster< t_P5 >::TCaster::TTarget iArg5, ::lass::python::OwnerCaster< t_P6 >::TCaster::TTarget iArg6, ::lass::python::OwnerCaster< t_P7 >::TCaster::TTarget iArg7 \
6775 )\
6776 {\
6777 return iThis.i_cppMethod ( ::lass::python::OwnerCaster< t_P1 >::TCaster::cast(iArg1), ::lass::python::OwnerCaster< t_P2 >::TCaster::cast(iArg2), ::lass::python::OwnerCaster< t_P3 >::TCaster::cast(iArg3), ::lass::python::OwnerCaster< t_P4 >::TCaster::cast(iArg4), ::lass::python::OwnerCaster< t_P5 >::TCaster::cast(iArg5), ::lass::python::OwnerCaster< t_P6 >::TCaster::cast(iArg6), ::lass::python::OwnerCaster< t_P7 >::TCaster::cast(iArg7) );\
6778 }\
6779 PY_CLASS_FREE_METHOD_EX( t_cppClass, LASS_CONCATENATE(i_dispatcher, _caster), s_methodName, s_doc, i_dispatcher );
6780
6781/** @ingroup ClassDefinition
6782 * @brief Export a C++ method with casting policy for 8-parameter methods.
6783 * @deprecated Use PY_CLASS_METHOD_EX() or PY_CLASS_FREE_METHOD_EX() instead.
6784 */
6785 #define PY_CLASS_METHOD_CAST_EX_8( t_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, s_methodName, s_doc, i_dispatcher, i_typename )\
6786 ::lass::python::OwnerCaster< t_return >::TCaster::TTarget LASS_CONCATENATE(i_dispatcher, _caster) ( \
6787 ::lass::python::impl::ShadowTraits< t_cppClass >::TCppClass& iThis,\
6788 ::lass::python::OwnerCaster< t_P1 >::TCaster::TTarget iArg1, ::lass::python::OwnerCaster< t_P2 >::TCaster::TTarget iArg2, ::lass::python::OwnerCaster< t_P3 >::TCaster::TTarget iArg3, ::lass::python::OwnerCaster< t_P4 >::TCaster::TTarget iArg4, ::lass::python::OwnerCaster< t_P5 >::TCaster::TTarget iArg5, ::lass::python::OwnerCaster< t_P6 >::TCaster::TTarget iArg6, ::lass::python::OwnerCaster< t_P7 >::TCaster::TTarget iArg7, ::lass::python::OwnerCaster< t_P8 >::TCaster::TTarget iArg8 \
6789 )\
6790 {\
6791 return iThis.i_cppMethod ( ::lass::python::OwnerCaster< t_P1 >::TCaster::cast(iArg1), ::lass::python::OwnerCaster< t_P2 >::TCaster::cast(iArg2), ::lass::python::OwnerCaster< t_P3 >::TCaster::cast(iArg3), ::lass::python::OwnerCaster< t_P4 >::TCaster::cast(iArg4), ::lass::python::OwnerCaster< t_P5 >::TCaster::cast(iArg5), ::lass::python::OwnerCaster< t_P6 >::TCaster::cast(iArg6), ::lass::python::OwnerCaster< t_P7 >::TCaster::cast(iArg7), ::lass::python::OwnerCaster< t_P8 >::TCaster::cast(iArg8) );\
6792 }\
6793 PY_CLASS_FREE_METHOD_EX( t_cppClass, LASS_CONCATENATE(i_dispatcher, _caster), s_methodName, s_doc, i_dispatcher );
6794
6795/** @ingroup ClassDefinition
6796 * @brief Export a C++ method with casting policy for 9-parameter methods.
6797 * @deprecated Use PY_CLASS_METHOD_EX() or PY_CLASS_FREE_METHOD_EX() instead.
6798 */
6799 #define PY_CLASS_METHOD_CAST_EX_9( t_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, s_methodName, s_doc, i_dispatcher, i_typename )\
6800 ::lass::python::OwnerCaster< t_return >::TCaster::TTarget LASS_CONCATENATE(i_dispatcher, _caster) ( \
6801 ::lass::python::impl::ShadowTraits< t_cppClass >::TCppClass& iThis,\
6802 ::lass::python::OwnerCaster< t_P1 >::TCaster::TTarget iArg1, ::lass::python::OwnerCaster< t_P2 >::TCaster::TTarget iArg2, ::lass::python::OwnerCaster< t_P3 >::TCaster::TTarget iArg3, ::lass::python::OwnerCaster< t_P4 >::TCaster::TTarget iArg4, ::lass::python::OwnerCaster< t_P5 >::TCaster::TTarget iArg5, ::lass::python::OwnerCaster< t_P6 >::TCaster::TTarget iArg6, ::lass::python::OwnerCaster< t_P7 >::TCaster::TTarget iArg7, ::lass::python::OwnerCaster< t_P8 >::TCaster::TTarget iArg8, ::lass::python::OwnerCaster< t_P9 >::TCaster::TTarget iArg9 \
6803 )\
6804 {\
6805 return iThis.i_cppMethod ( ::lass::python::OwnerCaster< t_P1 >::TCaster::cast(iArg1), ::lass::python::OwnerCaster< t_P2 >::TCaster::cast(iArg2), ::lass::python::OwnerCaster< t_P3 >::TCaster::cast(iArg3), ::lass::python::OwnerCaster< t_P4 >::TCaster::cast(iArg4), ::lass::python::OwnerCaster< t_P5 >::TCaster::cast(iArg5), ::lass::python::OwnerCaster< t_P6 >::TCaster::cast(iArg6), ::lass::python::OwnerCaster< t_P7 >::TCaster::cast(iArg7), ::lass::python::OwnerCaster< t_P8 >::TCaster::cast(iArg8), ::lass::python::OwnerCaster< t_P9 >::TCaster::cast(iArg9) );\
6806 }\
6807 PY_CLASS_FREE_METHOD_EX( t_cppClass, LASS_CONCATENATE(i_dispatcher, _caster), s_methodName, s_doc, i_dispatcher );
6808
6809/** @ingroup ClassDefinition
6810 * @brief Export a C++ method with casting policy for 10-parameter methods.
6811 * @deprecated Use PY_CLASS_METHOD_EX() or PY_CLASS_FREE_METHOD_EX() instead.
6812 */
6813 #define PY_CLASS_METHOD_CAST_EX_10( t_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, s_methodName, s_doc, i_dispatcher, i_typename )\
6814 ::lass::python::OwnerCaster< t_return >::TCaster::TTarget LASS_CONCATENATE(i_dispatcher, _caster) ( \
6815 ::lass::python::impl::ShadowTraits< t_cppClass >::TCppClass& iThis,\
6816 ::lass::python::OwnerCaster< t_P1 >::TCaster::TTarget iArg1, ::lass::python::OwnerCaster< t_P2 >::TCaster::TTarget iArg2, ::lass::python::OwnerCaster< t_P3 >::TCaster::TTarget iArg3, ::lass::python::OwnerCaster< t_P4 >::TCaster::TTarget iArg4, ::lass::python::OwnerCaster< t_P5 >::TCaster::TTarget iArg5, ::lass::python::OwnerCaster< t_P6 >::TCaster::TTarget iArg6, ::lass::python::OwnerCaster< t_P7 >::TCaster::TTarget iArg7, ::lass::python::OwnerCaster< t_P8 >::TCaster::TTarget iArg8, ::lass::python::OwnerCaster< t_P9 >::TCaster::TTarget iArg9, ::lass::python::OwnerCaster< t_P10 >::TCaster::TTarget iArg10 \
6817 )\
6818 {\
6819 return iThis.i_cppMethod ( ::lass::python::OwnerCaster< t_P1 >::TCaster::cast(iArg1), ::lass::python::OwnerCaster< t_P2 >::TCaster::cast(iArg2), ::lass::python::OwnerCaster< t_P3 >::TCaster::cast(iArg3), ::lass::python::OwnerCaster< t_P4 >::TCaster::cast(iArg4), ::lass::python::OwnerCaster< t_P5 >::TCaster::cast(iArg5), ::lass::python::OwnerCaster< t_P6 >::TCaster::cast(iArg6), ::lass::python::OwnerCaster< t_P7 >::TCaster::cast(iArg7), ::lass::python::OwnerCaster< t_P8 >::TCaster::cast(iArg8), ::lass::python::OwnerCaster< t_P9 >::TCaster::cast(iArg9), ::lass::python::OwnerCaster< t_P10 >::TCaster::cast(iArg10) );\
6820 }\
6821 PY_CLASS_FREE_METHOD_EX( t_cppClass, LASS_CONCATENATE(i_dispatcher, _caster), s_methodName, s_doc, i_dispatcher );
6822
6823/** @ingroup ClassDefinition
6824 * @brief Export a C++ method with casting policy for 11-parameter methods.
6825 * @deprecated Use PY_CLASS_METHOD_EX() or PY_CLASS_FREE_METHOD_EX() instead.
6826 */
6827 #define PY_CLASS_METHOD_CAST_EX_11( t_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, s_methodName, s_doc, i_dispatcher, i_typename )\
6828 ::lass::python::OwnerCaster< t_return >::TCaster::TTarget LASS_CONCATENATE(i_dispatcher, _caster) ( \
6829 ::lass::python::impl::ShadowTraits< t_cppClass >::TCppClass& iThis,\
6830 ::lass::python::OwnerCaster< t_P1 >::TCaster::TTarget iArg1, ::lass::python::OwnerCaster< t_P2 >::TCaster::TTarget iArg2, ::lass::python::OwnerCaster< t_P3 >::TCaster::TTarget iArg3, ::lass::python::OwnerCaster< t_P4 >::TCaster::TTarget iArg4, ::lass::python::OwnerCaster< t_P5 >::TCaster::TTarget iArg5, ::lass::python::OwnerCaster< t_P6 >::TCaster::TTarget iArg6, ::lass::python::OwnerCaster< t_P7 >::TCaster::TTarget iArg7, ::lass::python::OwnerCaster< t_P8 >::TCaster::TTarget iArg8, ::lass::python::OwnerCaster< t_P9 >::TCaster::TTarget iArg9, ::lass::python::OwnerCaster< t_P10 >::TCaster::TTarget iArg10, ::lass::python::OwnerCaster< t_P11 >::TCaster::TTarget iArg11 \
6831 )\
6832 {\
6833 return iThis.i_cppMethod ( ::lass::python::OwnerCaster< t_P1 >::TCaster::cast(iArg1), ::lass::python::OwnerCaster< t_P2 >::TCaster::cast(iArg2), ::lass::python::OwnerCaster< t_P3 >::TCaster::cast(iArg3), ::lass::python::OwnerCaster< t_P4 >::TCaster::cast(iArg4), ::lass::python::OwnerCaster< t_P5 >::TCaster::cast(iArg5), ::lass::python::OwnerCaster< t_P6 >::TCaster::cast(iArg6), ::lass::python::OwnerCaster< t_P7 >::TCaster::cast(iArg7), ::lass::python::OwnerCaster< t_P8 >::TCaster::cast(iArg8), ::lass::python::OwnerCaster< t_P9 >::TCaster::cast(iArg9), ::lass::python::OwnerCaster< t_P10 >::TCaster::cast(iArg10), ::lass::python::OwnerCaster< t_P11 >::TCaster::cast(iArg11) );\
6834 }\
6835 PY_CLASS_FREE_METHOD_EX( t_cppClass, LASS_CONCATENATE(i_dispatcher, _caster), s_methodName, s_doc, i_dispatcher );
6836
6837/** @ingroup ClassDefinition
6838 * @brief Export a C++ method with casting policy for 12-parameter methods.
6839 * @deprecated Use PY_CLASS_METHOD_EX() or PY_CLASS_FREE_METHOD_EX() instead.
6840 */
6841 #define PY_CLASS_METHOD_CAST_EX_12( t_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, s_methodName, s_doc, i_dispatcher, i_typename )\
6842 ::lass::python::OwnerCaster< t_return >::TCaster::TTarget LASS_CONCATENATE(i_dispatcher, _caster) ( \
6843 ::lass::python::impl::ShadowTraits< t_cppClass >::TCppClass& iThis,\
6844 ::lass::python::OwnerCaster< t_P1 >::TCaster::TTarget iArg1, ::lass::python::OwnerCaster< t_P2 >::TCaster::TTarget iArg2, ::lass::python::OwnerCaster< t_P3 >::TCaster::TTarget iArg3, ::lass::python::OwnerCaster< t_P4 >::TCaster::TTarget iArg4, ::lass::python::OwnerCaster< t_P5 >::TCaster::TTarget iArg5, ::lass::python::OwnerCaster< t_P6 >::TCaster::TTarget iArg6, ::lass::python::OwnerCaster< t_P7 >::TCaster::TTarget iArg7, ::lass::python::OwnerCaster< t_P8 >::TCaster::TTarget iArg8, ::lass::python::OwnerCaster< t_P9 >::TCaster::TTarget iArg9, ::lass::python::OwnerCaster< t_P10 >::TCaster::TTarget iArg10, ::lass::python::OwnerCaster< t_P11 >::TCaster::TTarget iArg11, ::lass::python::OwnerCaster< t_P12 >::TCaster::TTarget iArg12 \
6845 )\
6846 {\
6847 return iThis.i_cppMethod ( ::lass::python::OwnerCaster< t_P1 >::TCaster::cast(iArg1), ::lass::python::OwnerCaster< t_P2 >::TCaster::cast(iArg2), ::lass::python::OwnerCaster< t_P3 >::TCaster::cast(iArg3), ::lass::python::OwnerCaster< t_P4 >::TCaster::cast(iArg4), ::lass::python::OwnerCaster< t_P5 >::TCaster::cast(iArg5), ::lass::python::OwnerCaster< t_P6 >::TCaster::cast(iArg6), ::lass::python::OwnerCaster< t_P7 >::TCaster::cast(iArg7), ::lass::python::OwnerCaster< t_P8 >::TCaster::cast(iArg8), ::lass::python::OwnerCaster< t_P9 >::TCaster::cast(iArg9), ::lass::python::OwnerCaster< t_P10 >::TCaster::cast(iArg10), ::lass::python::OwnerCaster< t_P11 >::TCaster::cast(iArg11), ::lass::python::OwnerCaster< t_P12 >::TCaster::cast(iArg12) );\
6848 }\
6849 PY_CLASS_FREE_METHOD_EX( t_cppClass, LASS_CONCATENATE(i_dispatcher, _caster), s_methodName, s_doc, i_dispatcher );
6850
6851/** @ingroup ClassDefinition
6852 * @brief Export a C++ method with casting policy for 13-parameter methods.
6853 * @deprecated Use PY_CLASS_METHOD_EX() or PY_CLASS_FREE_METHOD_EX() instead.
6854 */
6855 #define PY_CLASS_METHOD_CAST_EX_13( t_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, s_methodName, s_doc, i_dispatcher, i_typename )\
6856 ::lass::python::OwnerCaster< t_return >::TCaster::TTarget LASS_CONCATENATE(i_dispatcher, _caster) ( \
6857 ::lass::python::impl::ShadowTraits< t_cppClass >::TCppClass& iThis,\
6858 ::lass::python::OwnerCaster< t_P1 >::TCaster::TTarget iArg1, ::lass::python::OwnerCaster< t_P2 >::TCaster::TTarget iArg2, ::lass::python::OwnerCaster< t_P3 >::TCaster::TTarget iArg3, ::lass::python::OwnerCaster< t_P4 >::TCaster::TTarget iArg4, ::lass::python::OwnerCaster< t_P5 >::TCaster::TTarget iArg5, ::lass::python::OwnerCaster< t_P6 >::TCaster::TTarget iArg6, ::lass::python::OwnerCaster< t_P7 >::TCaster::TTarget iArg7, ::lass::python::OwnerCaster< t_P8 >::TCaster::TTarget iArg8, ::lass::python::OwnerCaster< t_P9 >::TCaster::TTarget iArg9, ::lass::python::OwnerCaster< t_P10 >::TCaster::TTarget iArg10, ::lass::python::OwnerCaster< t_P11 >::TCaster::TTarget iArg11, ::lass::python::OwnerCaster< t_P12 >::TCaster::TTarget iArg12, ::lass::python::OwnerCaster< t_P13 >::TCaster::TTarget iArg13 \
6859 )\
6860 {\
6861 return iThis.i_cppMethod ( ::lass::python::OwnerCaster< t_P1 >::TCaster::cast(iArg1), ::lass::python::OwnerCaster< t_P2 >::TCaster::cast(iArg2), ::lass::python::OwnerCaster< t_P3 >::TCaster::cast(iArg3), ::lass::python::OwnerCaster< t_P4 >::TCaster::cast(iArg4), ::lass::python::OwnerCaster< t_P5 >::TCaster::cast(iArg5), ::lass::python::OwnerCaster< t_P6 >::TCaster::cast(iArg6), ::lass::python::OwnerCaster< t_P7 >::TCaster::cast(iArg7), ::lass::python::OwnerCaster< t_P8 >::TCaster::cast(iArg8), ::lass::python::OwnerCaster< t_P9 >::TCaster::cast(iArg9), ::lass::python::OwnerCaster< t_P10 >::TCaster::cast(iArg10), ::lass::python::OwnerCaster< t_P11 >::TCaster::cast(iArg11), ::lass::python::OwnerCaster< t_P12 >::TCaster::cast(iArg12), ::lass::python::OwnerCaster< t_P13 >::TCaster::cast(iArg13) );\
6862 }\
6863 PY_CLASS_FREE_METHOD_EX( t_cppClass, LASS_CONCATENATE(i_dispatcher, _caster), s_methodName, s_doc, i_dispatcher );
6864
6865/** @ingroup ClassDefinition
6866 * @brief Export a C++ method with casting policy for 14-parameter methods.
6867 * @deprecated Use PY_CLASS_METHOD_EX() or PY_CLASS_FREE_METHOD_EX() instead.
6868 */
6869 #define PY_CLASS_METHOD_CAST_EX_14( t_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, s_methodName, s_doc, i_dispatcher, i_typename )\
6870 ::lass::python::OwnerCaster< t_return >::TCaster::TTarget LASS_CONCATENATE(i_dispatcher, _caster) ( \
6871 ::lass::python::impl::ShadowTraits< t_cppClass >::TCppClass& iThis,\
6872 ::lass::python::OwnerCaster< t_P1 >::TCaster::TTarget iArg1, ::lass::python::OwnerCaster< t_P2 >::TCaster::TTarget iArg2, ::lass::python::OwnerCaster< t_P3 >::TCaster::TTarget iArg3, ::lass::python::OwnerCaster< t_P4 >::TCaster::TTarget iArg4, ::lass::python::OwnerCaster< t_P5 >::TCaster::TTarget iArg5, ::lass::python::OwnerCaster< t_P6 >::TCaster::TTarget iArg6, ::lass::python::OwnerCaster< t_P7 >::TCaster::TTarget iArg7, ::lass::python::OwnerCaster< t_P8 >::TCaster::TTarget iArg8, ::lass::python::OwnerCaster< t_P9 >::TCaster::TTarget iArg9, ::lass::python::OwnerCaster< t_P10 >::TCaster::TTarget iArg10, ::lass::python::OwnerCaster< t_P11 >::TCaster::TTarget iArg11, ::lass::python::OwnerCaster< t_P12 >::TCaster::TTarget iArg12, ::lass::python::OwnerCaster< t_P13 >::TCaster::TTarget iArg13, ::lass::python::OwnerCaster< t_P14 >::TCaster::TTarget iArg14 \
6873 )\
6874 {\
6875 return iThis.i_cppMethod ( ::lass::python::OwnerCaster< t_P1 >::TCaster::cast(iArg1), ::lass::python::OwnerCaster< t_P2 >::TCaster::cast(iArg2), ::lass::python::OwnerCaster< t_P3 >::TCaster::cast(iArg3), ::lass::python::OwnerCaster< t_P4 >::TCaster::cast(iArg4), ::lass::python::OwnerCaster< t_P5 >::TCaster::cast(iArg5), ::lass::python::OwnerCaster< t_P6 >::TCaster::cast(iArg6), ::lass::python::OwnerCaster< t_P7 >::TCaster::cast(iArg7), ::lass::python::OwnerCaster< t_P8 >::TCaster::cast(iArg8), ::lass::python::OwnerCaster< t_P9 >::TCaster::cast(iArg9), ::lass::python::OwnerCaster< t_P10 >::TCaster::cast(iArg10), ::lass::python::OwnerCaster< t_P11 >::TCaster::cast(iArg11), ::lass::python::OwnerCaster< t_P12 >::TCaster::cast(iArg12), ::lass::python::OwnerCaster< t_P13 >::TCaster::cast(iArg13), ::lass::python::OwnerCaster< t_P14 >::TCaster::cast(iArg14) );\
6876 }\
6877 PY_CLASS_FREE_METHOD_EX( t_cppClass, LASS_CONCATENATE(i_dispatcher, _caster), s_methodName, s_doc, i_dispatcher );
6878
6879/** @ingroup ClassDefinition
6880 * @brief Export a C++ method with casting policy for 15-parameter methods.
6881 * @deprecated Use PY_CLASS_METHOD_EX() or PY_CLASS_FREE_METHOD_EX() instead.
6882 */
6883 #define PY_CLASS_METHOD_CAST_EX_15( t_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15, s_methodName, s_doc, i_dispatcher, i_typename )\
6884 ::lass::python::OwnerCaster< t_return >::TCaster::TTarget LASS_CONCATENATE(i_dispatcher, _caster) ( \
6885 ::lass::python::impl::ShadowTraits< t_cppClass >::TCppClass& iThis,\
6886 ::lass::python::OwnerCaster< t_P1 >::TCaster::TTarget iArg1, ::lass::python::OwnerCaster< t_P2 >::TCaster::TTarget iArg2, ::lass::python::OwnerCaster< t_P3 >::TCaster::TTarget iArg3, ::lass::python::OwnerCaster< t_P4 >::TCaster::TTarget iArg4, ::lass::python::OwnerCaster< t_P5 >::TCaster::TTarget iArg5, ::lass::python::OwnerCaster< t_P6 >::TCaster::TTarget iArg6, ::lass::python::OwnerCaster< t_P7 >::TCaster::TTarget iArg7, ::lass::python::OwnerCaster< t_P8 >::TCaster::TTarget iArg8, ::lass::python::OwnerCaster< t_P9 >::TCaster::TTarget iArg9, ::lass::python::OwnerCaster< t_P10 >::TCaster::TTarget iArg10, ::lass::python::OwnerCaster< t_P11 >::TCaster::TTarget iArg11, ::lass::python::OwnerCaster< t_P12 >::TCaster::TTarget iArg12, ::lass::python::OwnerCaster< t_P13 >::TCaster::TTarget iArg13, ::lass::python::OwnerCaster< t_P14 >::TCaster::TTarget iArg14, ::lass::python::OwnerCaster< t_P15 >::TCaster::TTarget iArg15 \
6887 )\
6888 {\
6889 return iThis.i_cppMethod ( ::lass::python::OwnerCaster< t_P1 >::TCaster::cast(iArg1), ::lass::python::OwnerCaster< t_P2 >::TCaster::cast(iArg2), ::lass::python::OwnerCaster< t_P3 >::TCaster::cast(iArg3), ::lass::python::OwnerCaster< t_P4 >::TCaster::cast(iArg4), ::lass::python::OwnerCaster< t_P5 >::TCaster::cast(iArg5), ::lass::python::OwnerCaster< t_P6 >::TCaster::cast(iArg6), ::lass::python::OwnerCaster< t_P7 >::TCaster::cast(iArg7), ::lass::python::OwnerCaster< t_P8 >::TCaster::cast(iArg8), ::lass::python::OwnerCaster< t_P9 >::TCaster::cast(iArg9), ::lass::python::OwnerCaster< t_P10 >::TCaster::cast(iArg10), ::lass::python::OwnerCaster< t_P11 >::TCaster::cast(iArg11), ::lass::python::OwnerCaster< t_P12 >::TCaster::cast(iArg12), ::lass::python::OwnerCaster< t_P13 >::TCaster::cast(iArg13), ::lass::python::OwnerCaster< t_P14 >::TCaster::cast(iArg14), ::lass::python::OwnerCaster< t_P15 >::TCaster::cast(iArg15) );\
6890 }\
6891 PY_CLASS_FREE_METHOD_EX( t_cppClass, LASS_CONCATENATE(i_dispatcher, _caster), s_methodName, s_doc, i_dispatcher );
6892
6893
6894/** @ingroup ClassDefinition
6895 * @brief Convenience wrapper for PY_CLASS_METHOD_CAST_EX_0().
6896 * @deprecated Use PY_CLASS_METHOD_NAME_DOC() or PY_CLASS_FREE_METHOD_NAME_DOC() instead.
6897 */
6898#define PY_CLASS_METHOD_CAST_NAME_DOC_0( i_cppClass, i_cppMethod, t_return, s_methodName, s_doc )\
6899 PY_CLASS_METHOD_CAST_EX_0(\
6900 i_cppClass, i_cppMethod, t_return, s_methodName, s_doc,\
6901 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)),\
6902 LASS_UNIQUENAME(LASS_CONCATENATE(TypelassPyImpl_method_, i_cppClass)))
6903
6904/** @ingroup ClassDefinition
6905 * @brief Convenience wrapper for PY_CLASS_METHOD_CAST_EX_1().
6906 * @deprecated Use PY_CLASS_METHOD_NAME_DOC() or PY_CLASS_FREE_METHOD_NAME_DOC() instead.
6907 */
6908#define PY_CLASS_METHOD_CAST_NAME_DOC_1( i_cppClass, i_cppMethod, t_return, t_P1, s_methodName, s_doc )\
6909 PY_CLASS_METHOD_CAST_EX_1(\
6910 i_cppClass, i_cppMethod, t_return, t_P1, s_methodName, s_doc,\
6911 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)),\
6912 LASS_UNIQUENAME(LASS_CONCATENATE(TypelassPyImpl_method_, i_cppClass)))
6913
6914/** @ingroup ClassDefinition
6915 * @brief Convenience wrapper for PY_CLASS_METHOD_CAST_EX_2().
6916 * @deprecated Use PY_CLASS_METHOD_NAME_DOC() or PY_CLASS_FREE_METHOD_NAME_DOC() instead.
6917 */
6918#define PY_CLASS_METHOD_CAST_NAME_DOC_2( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, s_methodName, s_doc )\
6919 PY_CLASS_METHOD_CAST_EX_2(\
6920 i_cppClass, i_cppMethod, t_return, t_P1, t_P2, s_methodName, s_doc,\
6921 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)),\
6922 LASS_UNIQUENAME(LASS_CONCATENATE(TypelassPyImpl_method_, i_cppClass)))
6923
6924/** @ingroup ClassDefinition
6925 * @brief Convenience wrapper for PY_CLASS_METHOD_CAST_EX_3().
6926 * @deprecated Use PY_CLASS_METHOD_NAME_DOC() or PY_CLASS_FREE_METHOD_NAME_DOC() instead.
6927 */
6928#define PY_CLASS_METHOD_CAST_NAME_DOC_3( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, s_methodName, s_doc )\
6929 PY_CLASS_METHOD_CAST_EX_3(\
6930 i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, s_methodName, s_doc,\
6931 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)),\
6932 LASS_UNIQUENAME(LASS_CONCATENATE(TypelassPyImpl_method_, i_cppClass)))
6933
6934/** @ingroup ClassDefinition
6935 * @brief Convenience wrapper for PY_CLASS_METHOD_CAST_EX_4().
6936 * @deprecated Use PY_CLASS_METHOD_NAME_DOC() or PY_CLASS_FREE_METHOD_NAME_DOC() instead.
6937 */
6938#define PY_CLASS_METHOD_CAST_NAME_DOC_4( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, s_methodName, s_doc )\
6939 PY_CLASS_METHOD_CAST_EX_4(\
6940 i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, s_methodName, s_doc,\
6941 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)),\
6942 LASS_UNIQUENAME(LASS_CONCATENATE(TypelassPyImpl_method_, i_cppClass)))
6943
6944/** @ingroup ClassDefinition
6945 * @brief Convenience wrapper for PY_CLASS_METHOD_CAST_EX_5().
6946 * @deprecated Use PY_CLASS_METHOD_NAME_DOC() or PY_CLASS_FREE_METHOD_NAME_DOC() instead.
6947 */
6948#define PY_CLASS_METHOD_CAST_NAME_DOC_5( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, s_methodName, s_doc )\
6949 PY_CLASS_METHOD_CAST_EX_5(\
6950 i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, s_methodName, s_doc,\
6951 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)),\
6952 LASS_UNIQUENAME(LASS_CONCATENATE(TypelassPyImpl_method_, i_cppClass)))
6953
6954/** @ingroup ClassDefinition
6955 * @brief Convenience wrapper for PY_CLASS_METHOD_CAST_EX_6().
6956 * @deprecated Use PY_CLASS_METHOD_NAME_DOC() or PY_CLASS_FREE_METHOD_NAME_DOC() instead.
6957 */
6958#define PY_CLASS_METHOD_CAST_NAME_DOC_6( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, s_methodName, s_doc )\
6959 PY_CLASS_METHOD_CAST_EX_6(\
6960 i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, s_methodName, s_doc,\
6961 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)),\
6962 LASS_UNIQUENAME(LASS_CONCATENATE(TypelassPyImpl_method_, i_cppClass)))
6963
6964/** @ingroup ClassDefinition
6965 * @brief Convenience wrapper for PY_CLASS_METHOD_CAST_EX_7().
6966 * @deprecated Use PY_CLASS_METHOD_NAME_DOC() or PY_CLASS_FREE_METHOD_NAME_DOC() instead.
6967 */
6968#define PY_CLASS_METHOD_CAST_NAME_DOC_7( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, s_methodName, s_doc )\
6969 PY_CLASS_METHOD_CAST_EX_7(\
6970 i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, s_methodName, s_doc,\
6971 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)),\
6972 LASS_UNIQUENAME(LASS_CONCATENATE(TypelassPyImpl_method_, i_cppClass)))
6973
6974/** @ingroup ClassDefinition
6975 * @brief Convenience wrapper for PY_CLASS_METHOD_CAST_EX_8().
6976 * @deprecated Use PY_CLASS_METHOD_NAME_DOC() or PY_CLASS_FREE_METHOD_NAME_DOC() instead.
6977 */
6978#define PY_CLASS_METHOD_CAST_NAME_DOC_8( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, s_methodName, s_doc )\
6979 PY_CLASS_METHOD_CAST_EX_8(\
6980 i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, s_methodName, s_doc,\
6981 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)),\
6982 LASS_UNIQUENAME(LASS_CONCATENATE(TypelassPyImpl_method_, i_cppClass)))
6983
6984/** @ingroup ClassDefinition
6985 * @brief Convenience wrapper for PY_CLASS_METHOD_CAST_EX_9().
6986 * @deprecated Use PY_CLASS_METHOD_NAME_DOC() or PY_CLASS_FREE_METHOD_NAME_DOC() instead.
6987 */
6988#define PY_CLASS_METHOD_CAST_NAME_DOC_9( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, s_methodName, s_doc )\
6989 PY_CLASS_METHOD_CAST_EX_9(\
6990 i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, s_methodName, s_doc,\
6991 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)),\
6992 LASS_UNIQUENAME(LASS_CONCATENATE(TypelassPyImpl_method_, i_cppClass)))
6993
6994/** @ingroup ClassDefinition
6995 * @brief Convenience wrapper for PY_CLASS_METHOD_CAST_EX_10().
6996 * @deprecated Use PY_CLASS_METHOD_NAME_DOC() or PY_CLASS_FREE_METHOD_NAME_DOC() instead.
6997 */
6998#define PY_CLASS_METHOD_CAST_NAME_DOC_10( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, s_methodName, s_doc )\
6999 PY_CLASS_METHOD_CAST_EX_10(\
7000 i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, s_methodName, s_doc,\
7001 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)),\
7002 LASS_UNIQUENAME(LASS_CONCATENATE(TypelassPyImpl_method_, i_cppClass)))
7003
7004/** @ingroup ClassDefinition
7005 * @brief Convenience wrapper for PY_CLASS_METHOD_CAST_EX_11().
7006 * @deprecated Use PY_CLASS_METHOD_NAME_DOC() or PY_CLASS_FREE_METHOD_NAME_DOC() instead.
7007 */
7008#define PY_CLASS_METHOD_CAST_NAME_DOC_11( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, s_methodName, s_doc )\
7009 PY_CLASS_METHOD_CAST_EX_11(\
7010 i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, s_methodName, s_doc,\
7011 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)),\
7012 LASS_UNIQUENAME(LASS_CONCATENATE(TypelassPyImpl_method_, i_cppClass)))
7013
7014/** @ingroup ClassDefinition
7015 * @brief Convenience wrapper for PY_CLASS_METHOD_CAST_EX_12().
7016 * @deprecated Use PY_CLASS_METHOD_NAME_DOC() or PY_CLASS_FREE_METHOD_NAME_DOC() instead.
7017 */
7018#define PY_CLASS_METHOD_CAST_NAME_DOC_12( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, s_methodName, s_doc )\
7019 PY_CLASS_METHOD_CAST_EX_12(\
7020 i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, s_methodName, s_doc,\
7021 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)),\
7022 LASS_UNIQUENAME(LASS_CONCATENATE(TypelassPyImpl_method_, i_cppClass)))
7023
7024/** @ingroup ClassDefinition
7025 * @brief Convenience wrapper for PY_CLASS_METHOD_CAST_EX_13().
7026 * @deprecated Use PY_CLASS_METHOD_NAME_DOC() or PY_CLASS_FREE_METHOD_NAME_DOC() instead.
7027 */
7028#define PY_CLASS_METHOD_CAST_NAME_DOC_13( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, s_methodName, s_doc )\
7029 PY_CLASS_METHOD_CAST_EX_13(\
7030 i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, s_methodName, s_doc,\
7031 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)),\
7032 LASS_UNIQUENAME(LASS_CONCATENATE(TypelassPyImpl_method_, i_cppClass)))
7033
7034/** @ingroup ClassDefinition
7035 * @brief Convenience wrapper for PY_CLASS_METHOD_CAST_EX_14().
7036 * @deprecated Use PY_CLASS_METHOD_NAME_DOC() or PY_CLASS_FREE_METHOD_NAME_DOC() instead.
7037 */
7038#define PY_CLASS_METHOD_CAST_NAME_DOC_14( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, s_methodName, s_doc )\
7039 PY_CLASS_METHOD_CAST_EX_14(\
7040 i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, s_methodName, s_doc,\
7041 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)),\
7042 LASS_UNIQUENAME(LASS_CONCATENATE(TypelassPyImpl_method_, i_cppClass)))
7043
7044/** @ingroup ClassDefinition
7045 * @brief Convenience wrapper for PY_CLASS_METHOD_CAST_EX_15().
7046 * @deprecated Use PY_CLASS_METHOD_NAME_DOC() or PY_CLASS_FREE_METHOD_NAME_DOC() instead.
7047 */
7048#define PY_CLASS_METHOD_CAST_NAME_DOC_15( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15, s_methodName, s_doc )\
7049 PY_CLASS_METHOD_CAST_EX_15(\
7050 i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15, s_methodName, s_doc,\
7051 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_method_, i_cppClass)),\
7052 LASS_UNIQUENAME(LASS_CONCATENATE(TypelassPyImpl_method_, i_cppClass)))
7053
7054
7055/** @ingroup ClassDefinition
7056 * @brief Convenience wrapper with no documentation.
7057 * @deprecated Use PY_CLASS_METHOD_NAME() or PY_CLASS_FREE_METHOD_NAME() instead.
7058 */
7059#define PY_CLASS_METHOD_CAST_NAME( i_cppClass, i_cppMethod, t_return, t_params, s_methodName )\
7060 PY_CLASS_METHOD_CAST_NAME_DOC(\
7061 i_cppClass, i_cppMethod, t_return, t_params, s_methodName, 0 )
7062
7063/** @ingroup ClassDefinition
7064 * @brief Convenience wrapper with no documentation.
7065 * @deprecated Use PY_CLASS_METHOD_NAME() or PY_CLASS_FREE_METHOD_NAME() instead.
7066 */
7067#define PY_CLASS_METHOD_CAST_NAME_0( i_cppClass, i_cppMethod, t_return, s_methodName )\
7068 PY_CLASS_METHOD_CAST_NAME_DOC_0(\
7069 i_cppClass, i_cppMethod, t_return, s_methodName, 0 )
7070
7071/** @ingroup ClassDefinition
7072 * @brief Convenience wrapper with no documentation.
7073 * @deprecated Use PY_CLASS_METHOD_NAME() or PY_CLASS_FREE_METHOD_NAME() instead.
7074 */
7075#define PY_CLASS_METHOD_CAST_NAME_1( i_cppClass, i_cppMethod, t_return, t_P1, s_methodName )\
7076 PY_CLASS_METHOD_CAST_NAME_DOC_1(\
7077 i_cppClass, i_cppMethod, t_return, t_P1, s_methodName, 0 )
7078
7079/** @ingroup ClassDefinition
7080 * @brief Convenience wrapper with no documentation.
7081 * @deprecated Use PY_CLASS_METHOD_NAME() or PY_CLASS_FREE_METHOD_NAME() instead.
7082 */
7083#define PY_CLASS_METHOD_CAST_NAME_2( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, s_methodName )\
7084 PY_CLASS_METHOD_CAST_NAME_DOC_2(\
7085 i_cppClass, i_cppMethod, t_return, t_P1, t_P2, s_methodName, 0 )
7086
7087/** @ingroup ClassDefinition
7088 * @brief Convenience wrapper with no documentation.
7089 * @deprecated Use PY_CLASS_METHOD_NAME() or PY_CLASS_FREE_METHOD_NAME() instead.
7090 */
7091#define PY_CLASS_METHOD_CAST_NAME_3( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, s_methodName )\
7092 PY_CLASS_METHOD_CAST_NAME_DOC_3(\
7093 i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, s_methodName, 0 )
7094
7095/** @ingroup ClassDefinition
7096 * @brief Convenience wrapper with no documentation.
7097 * @deprecated Use PY_CLASS_METHOD_NAME() or PY_CLASS_FREE_METHOD_NAME() instead.
7098 */
7099#define PY_CLASS_METHOD_CAST_NAME_4( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, s_methodName )\
7100 PY_CLASS_METHOD_CAST_NAME_DOC_4(\
7101 i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, s_methodName, 0 )
7102
7103/** @ingroup ClassDefinition
7104 * @brief Convenience wrapper with no documentation.
7105 * @deprecated Use PY_CLASS_METHOD_NAME() or PY_CLASS_FREE_METHOD_NAME() instead.
7106 */
7107#define PY_CLASS_METHOD_CAST_NAME_5( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, s_methodName )\
7108 PY_CLASS_METHOD_CAST_NAME_DOC_5(\
7109 i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, s_methodName, 0 )
7110
7111/** @ingroup ClassDefinition
7112 * @brief Convenience wrapper with no documentation.
7113 * @deprecated Use PY_CLASS_METHOD_NAME() or PY_CLASS_FREE_METHOD_NAME() instead.
7114 */
7115#define PY_CLASS_METHOD_CAST_NAME_6( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, s_methodName )\
7116 PY_CLASS_METHOD_CAST_NAME_DOC_6(\
7117 i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, s_methodName, 0 )
7118
7119/** @ingroup ClassDefinition
7120 * @brief Convenience wrapper with no documentation.
7121 * @deprecated Use PY_CLASS_METHOD_NAME() or PY_CLASS_FREE_METHOD_NAME() instead.
7122 */
7123#define PY_CLASS_METHOD_CAST_NAME_7( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, s_methodName )\
7124 PY_CLASS_METHOD_CAST_NAME_DOC_7(\
7125 i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, s_methodName, 0 )
7126
7127/** @ingroup ClassDefinition
7128 * @brief Convenience wrapper with no documentation.
7129 * @deprecated Use PY_CLASS_METHOD_NAME() or PY_CLASS_FREE_METHOD_NAME() instead.
7130 */
7131#define PY_CLASS_METHOD_CAST_NAME_8( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, s_methodName )\
7132 PY_CLASS_METHOD_CAST_NAME_DOC_8(\
7133 i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, s_methodName, 0 )
7134
7135/** @ingroup ClassDefinition
7136 * @brief Convenience wrapper with no documentation.
7137 * @deprecated Use PY_CLASS_METHOD_NAME() or PY_CLASS_FREE_METHOD_NAME() instead.
7138 */
7139#define PY_CLASS_METHOD_CAST_NAME_9( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, s_methodName )\
7140 PY_CLASS_METHOD_CAST_NAME_DOC_9(\
7141 i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, s_methodName, 0 )
7142
7143/** @ingroup ClassDefinition
7144 * @brief Convenience wrapper with no documentation.
7145 * @deprecated Use PY_CLASS_METHOD_NAME() or PY_CLASS_FREE_METHOD_NAME() instead.
7146 */
7147#define PY_CLASS_METHOD_CAST_NAME_10( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, s_methodName )\
7148 PY_CLASS_METHOD_CAST_NAME_DOC_10(\
7149 i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, s_methodName, 0 )
7150
7151/** @ingroup ClassDefinition
7152 * @brief Convenience wrapper with no documentation.
7153 * @deprecated Use PY_CLASS_METHOD_NAME() or PY_CLASS_FREE_METHOD_NAME() instead.
7154 */
7155#define PY_CLASS_METHOD_CAST_NAME_11( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, s_methodName )\
7156 PY_CLASS_METHOD_CAST_NAME_DOC_11(\
7157 i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, s_methodName, 0 )
7158
7159/** @ingroup ClassDefinition
7160 * @brief Convenience wrapper with no documentation.
7161 * @deprecated Use PY_CLASS_METHOD_NAME() or PY_CLASS_FREE_METHOD_NAME() instead.
7162 */
7163#define PY_CLASS_METHOD_CAST_NAME_12( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, s_methodName )\
7164 PY_CLASS_METHOD_CAST_NAME_DOC_12(\
7165 i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, s_methodName, 0 )
7166
7167/** @ingroup ClassDefinition
7168 * @brief Convenience wrapper with no documentation.
7169 * @deprecated Use PY_CLASS_METHOD_NAME() or PY_CLASS_FREE_METHOD_NAME() instead.
7170 */
7171#define PY_CLASS_METHOD_CAST_NAME_13( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, s_methodName )\
7172 PY_CLASS_METHOD_CAST_NAME_DOC_13(\
7173 i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, s_methodName, 0 )
7174
7175/** @ingroup ClassDefinition
7176 * @brief Convenience wrapper with no documentation.
7177 * @deprecated Use PY_CLASS_METHOD_NAME() or PY_CLASS_FREE_METHOD_NAME() instead.
7178 */
7179#define PY_CLASS_METHOD_CAST_NAME_14( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, s_methodName )\
7180 PY_CLASS_METHOD_CAST_NAME_DOC_14(\
7181 i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, s_methodName, 0 )
7182
7183/** @ingroup ClassDefinition
7184 * @brief Convenience wrapper with no documentation.
7185 * @deprecated Use PY_CLASS_METHOD_NAME() or PY_CLASS_FREE_METHOD_NAME() instead.
7186 */
7187#define PY_CLASS_METHOD_CAST_NAME_15( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15, s_methodName )\
7188 PY_CLASS_METHOD_CAST_NAME_DOC_15(\
7189 i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15, s_methodName, 0 )
7190
7191
7192/** @ingroup ClassDefinition
7193 * @brief Convenience wrapper with method name derived from C++ method.
7194 * @deprecated Use PY_CLASS_METHOD_DOC() or PY_CLASS_FREE_METHOD_DOC() instead.
7195 */
7196#define PY_CLASS_METHOD_CAST_DOC( i_cppClass, i_cppMethod, t_return, t_params, s_doc )\
7197 PY_CLASS_METHOD_CAST_NAME_DOC(\
7198 i_cppClass, i_cppMethod, t_return, t_params, LASS_STRINGIFY(i_cppMethod), s_doc )
7199
7200/** @ingroup ClassDefinition
7201 * @brief Convenience wrapper with method name derived from C++ method.
7202 * @deprecated Use PY_CLASS_METHOD_DOC() or PY_CLASS_FREE_METHOD_DOC() instead.
7203 */
7204#define PY_CLASS_METHOD_CAST_DOC_0( i_cppClass, i_cppMethod, t_return, s_doc )\
7205 PY_CLASS_METHOD_CAST_NAME_DOC_0(\
7206 i_cppClass, i_cppMethod, t_return, LASS_STRINGIFY(i_cppMethod), s_doc )
7207
7208/** @ingroup ClassDefinition
7209 * @brief Convenience wrapper with method name derived from C++ method.
7210 * @deprecated Use PY_CLASS_METHOD_DOC() or PY_CLASS_FREE_METHOD_DOC() instead.
7211 */
7212#define PY_CLASS_METHOD_CAST_DOC_1( i_cppClass, i_cppMethod, t_return, t_P1, s_doc )\
7213 PY_CLASS_METHOD_CAST_NAME_DOC_1(\
7214 i_cppClass, i_cppMethod, t_return, t_P1, LASS_STRINGIFY(i_cppMethod), s_doc )
7215
7216/** @ingroup ClassDefinition
7217 * @brief Convenience wrapper with method name derived from C++ method.
7218 * @deprecated Use PY_CLASS_METHOD_DOC() or PY_CLASS_FREE_METHOD_DOC() instead.
7219 */
7220#define PY_CLASS_METHOD_CAST_DOC_2( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, s_doc )\
7221 PY_CLASS_METHOD_CAST_NAME_DOC_2(\
7222 i_cppClass, i_cppMethod, t_return, t_P1, t_P2, LASS_STRINGIFY(i_cppMethod), s_doc )
7223
7224/** @ingroup ClassDefinition
7225 * @brief Convenience wrapper with method name derived from C++ method.
7226 * @deprecated Use PY_CLASS_METHOD_DOC() or PY_CLASS_FREE_METHOD_DOC() instead.
7227 */
7228#define PY_CLASS_METHOD_CAST_DOC_3( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, s_doc )\
7229 PY_CLASS_METHOD_CAST_NAME_DOC_3(\
7230 i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, LASS_STRINGIFY(i_cppMethod), s_doc )
7231
7232/** @ingroup ClassDefinition
7233 * @brief Convenience wrapper with method name derived from C++ method.
7234 * @deprecated Use PY_CLASS_METHOD_DOC() or PY_CLASS_FREE_METHOD_DOC() instead.
7235 */
7236#define PY_CLASS_METHOD_CAST_DOC_4( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, s_doc )\
7237 PY_CLASS_METHOD_CAST_NAME_DOC_4(\
7238 i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, LASS_STRINGIFY(i_cppMethod), s_doc )
7239
7240/** @ingroup ClassDefinition
7241 * @brief Convenience wrapper with method name derived from C++ method.
7242 * @deprecated Use PY_CLASS_METHOD_DOC() or PY_CLASS_FREE_METHOD_DOC() instead.
7243 */
7244#define PY_CLASS_METHOD_CAST_DOC_5( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, s_doc )\
7245 PY_CLASS_METHOD_CAST_NAME_DOC_5(\
7246 i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, LASS_STRINGIFY(i_cppMethod), s_doc )
7247
7248/** @ingroup ClassDefinition
7249 * @brief Convenience wrapper with method name derived from C++ method.
7250 * @deprecated Use PY_CLASS_METHOD_DOC() or PY_CLASS_FREE_METHOD_DOC() instead.
7251 */
7252#define PY_CLASS_METHOD_CAST_DOC_6( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, s_doc )\
7253 PY_CLASS_METHOD_CAST_NAME_DOC_6(\
7254 i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, LASS_STRINGIFY(i_cppMethod), s_doc )
7255
7256/** @ingroup ClassDefinition
7257 * @brief Convenience wrapper with method name derived from C++ method.
7258 * @deprecated Use PY_CLASS_METHOD_DOC() or PY_CLASS_FREE_METHOD_DOC() instead.
7259 */
7260#define PY_CLASS_METHOD_CAST_DOC_7( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, s_doc )\
7261 PY_CLASS_METHOD_CAST_NAME_DOC_7(\
7262 i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, LASS_STRINGIFY(i_cppMethod), s_doc )
7263
7264/** @ingroup ClassDefinition
7265 * @brief Convenience wrapper with method name derived from C++ method.
7266 * @deprecated Use PY_CLASS_METHOD_DOC() or PY_CLASS_FREE_METHOD_DOC() instead.
7267 */
7268#define PY_CLASS_METHOD_CAST_DOC_8( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, s_doc )\
7269 PY_CLASS_METHOD_CAST_NAME_DOC_8(\
7270 i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, LASS_STRINGIFY(i_cppMethod), s_doc )
7271
7272/** @ingroup ClassDefinition
7273 * @brief Convenience wrapper with method name derived from C++ method.
7274 * @deprecated Use PY_CLASS_METHOD_DOC() or PY_CLASS_FREE_METHOD_DOC() instead.
7275 */
7276#define PY_CLASS_METHOD_CAST_DOC_9( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, s_doc )\
7277 PY_CLASS_METHOD_CAST_NAME_DOC_9(\
7278 i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, LASS_STRINGIFY(i_cppMethod), s_doc )
7279
7280/** @ingroup ClassDefinition
7281 * @brief Convenience wrapper with method name derived from C++ method.
7282 * @deprecated Use PY_CLASS_METHOD_DOC() or PY_CLASS_FREE_METHOD_DOC() instead.
7283 */
7284#define PY_CLASS_METHOD_CAST_DOC_10( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, s_doc )\
7285 PY_CLASS_METHOD_CAST_NAME_DOC_10(\
7286 i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, LASS_STRINGIFY(i_cppMethod), s_doc )
7287
7288/** @ingroup ClassDefinition
7289 * @brief Convenience wrapper with method name derived from C++ method.
7290 * @deprecated Use PY_CLASS_METHOD_DOC() or PY_CLASS_FREE_METHOD_DOC() instead.
7291 */
7292#define PY_CLASS_METHOD_CAST_DOC_11( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, s_doc )\
7293 PY_CLASS_METHOD_CAST_NAME_DOC_11(\
7294 i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, LASS_STRINGIFY(i_cppMethod), s_doc )
7295
7296/** @ingroup ClassDefinition
7297 * @brief Convenience wrapper with method name derived from C++ method.
7298 * @deprecated Use PY_CLASS_METHOD_DOC() or PY_CLASS_FREE_METHOD_DOC() instead.
7299 */
7300#define PY_CLASS_METHOD_CAST_DOC_12( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, s_doc )\
7301 PY_CLASS_METHOD_CAST_NAME_DOC_12(\
7302 i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, LASS_STRINGIFY(i_cppMethod), s_doc )
7303
7304/** @ingroup ClassDefinition
7305 * @brief Convenience wrapper with method name derived from C++ method.
7306 * @deprecated Use PY_CLASS_METHOD_DOC() or PY_CLASS_FREE_METHOD_DOC() instead.
7307 */
7308#define PY_CLASS_METHOD_CAST_DOC_13( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, s_doc )\
7309 PY_CLASS_METHOD_CAST_NAME_DOC_13(\
7310 i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, LASS_STRINGIFY(i_cppMethod), s_doc )
7311
7312/** @ingroup ClassDefinition
7313 * @brief Convenience wrapper with method name derived from C++ method.
7314 * @deprecated Use PY_CLASS_METHOD_DOC() or PY_CLASS_FREE_METHOD_DOC() instead.
7315 */
7316#define PY_CLASS_METHOD_CAST_DOC_14( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, s_doc )\
7317 PY_CLASS_METHOD_CAST_NAME_DOC_14(\
7318 i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, LASS_STRINGIFY(i_cppMethod), s_doc )
7319
7320/** @ingroup ClassDefinition
7321 * @brief Convenience wrapper with method name derived from C++ method.
7322 * @deprecated Use PY_CLASS_METHOD_DOC() or PY_CLASS_FREE_METHOD_DOC() instead.
7323 */
7324#define PY_CLASS_METHOD_CAST_DOC_15( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15, s_doc )\
7325 PY_CLASS_METHOD_CAST_NAME_DOC_15(\
7326 i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15, LASS_STRINGIFY(i_cppMethod), s_doc )
7327
7328
7329/** @ingroup ClassDefinition
7330 * @brief Basic convenience wrapper with minimal parameters.
7331 * @deprecated Use PY_CLASS_METHOD() or PY_CLASS_FREE_METHOD() instead.
7332 */
7333#define PY_CLASS_METHOD_CAST( i_cppClass, i_cppMethod, t_return, t_params )\
7334 PY_CLASS_METHOD_CAST_DOC( i_cppClass, i_cppMethod, t_return, t_params, 0 )
7335
7336/** @ingroup ClassDefinition
7337 * @brief Basic convenience wrapper with minimal parameters.
7338 * @deprecated Use PY_CLASS_METHOD() or PY_CLASS_FREE_METHOD() instead.
7339 */
7340#define PY_CLASS_METHOD_CAST_0( i_cppClass, i_cppMethod, t_return )\
7341 PY_CLASS_METHOD_CAST_DOC_0( i_cppClass, i_cppMethod, t_return, 0 )
7342
7343/** @ingroup ClassDefinition
7344 * @brief Basic convenience wrapper with minimal parameters.
7345 * @deprecated Use PY_CLASS_METHOD() or PY_CLASS_FREE_METHOD() instead.
7346 */
7347#define PY_CLASS_METHOD_CAST_1( i_cppClass, i_cppMethod, t_return, t_P1 )\
7348 PY_CLASS_METHOD_CAST_DOC_1( i_cppClass, i_cppMethod, t_return, t_P1, 0 )
7349
7350/** @ingroup ClassDefinition
7351 * @brief Basic convenience wrapper with minimal parameters.
7352 * @deprecated Use PY_CLASS_METHOD() or PY_CLASS_FREE_METHOD() instead.
7353 */
7354#define PY_CLASS_METHOD_CAST_2( i_cppClass, i_cppMethod, t_return, t_P1, t_P2 )\
7355 PY_CLASS_METHOD_CAST_DOC_2( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, 0 )
7356
7357/** @ingroup ClassDefinition
7358 * @brief Basic convenience wrapper with minimal parameters.
7359 * @deprecated Use PY_CLASS_METHOD() or PY_CLASS_FREE_METHOD() instead.
7360 */
7361#define PY_CLASS_METHOD_CAST_3( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3 )\
7362 PY_CLASS_METHOD_CAST_DOC_3( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, 0 )
7363
7364/** @ingroup ClassDefinition
7365 * @brief Basic convenience wrapper with minimal parameters.
7366 * @deprecated Use PY_CLASS_METHOD() or PY_CLASS_FREE_METHOD() instead.
7367 */
7368#define PY_CLASS_METHOD_CAST_4( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4 )\
7369 PY_CLASS_METHOD_CAST_DOC_4( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, 0 )
7370
7371/** @ingroup ClassDefinition
7372 * @brief Basic convenience wrapper with minimal parameters.
7373 * @deprecated Use PY_CLASS_METHOD() or PY_CLASS_FREE_METHOD() instead.
7374 */
7375#define PY_CLASS_METHOD_CAST_5( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5 )\
7376 PY_CLASS_METHOD_CAST_DOC_5( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, 0 )
7377
7378/** @ingroup ClassDefinition
7379 * @brief Basic convenience wrapper with minimal parameters.
7380 * @deprecated Use PY_CLASS_METHOD() or PY_CLASS_FREE_METHOD() instead.
7381 */
7382#define PY_CLASS_METHOD_CAST_6( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6 )\
7383 PY_CLASS_METHOD_CAST_DOC_6( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, 0 )
7384
7385/** @ingroup ClassDefinition
7386 * @brief Basic convenience wrapper with minimal parameters.
7387 * @deprecated Use PY_CLASS_METHOD() or PY_CLASS_FREE_METHOD() instead.
7388 */
7389#define PY_CLASS_METHOD_CAST_7( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7 )\
7390 PY_CLASS_METHOD_CAST_DOC_7( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, 0 )
7391
7392/** @ingroup ClassDefinition
7393 * @brief Basic convenience wrapper with minimal parameters.
7394 * @deprecated Use PY_CLASS_METHOD() or PY_CLASS_FREE_METHOD() instead.
7395 */
7396#define PY_CLASS_METHOD_CAST_8( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8 )\
7397 PY_CLASS_METHOD_CAST_DOC_8( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, 0 )
7398
7399/** @ingroup ClassDefinition
7400 * @brief Basic convenience wrapper with minimal parameters.
7401 * @deprecated Use PY_CLASS_METHOD() or PY_CLASS_FREE_METHOD() instead.
7402 */
7403#define PY_CLASS_METHOD_CAST_9( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9 )\
7404 PY_CLASS_METHOD_CAST_DOC_9( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, 0 )
7405
7406/** @ingroup ClassDefinition
7407 * @brief Basic convenience wrapper with minimal parameters.
7408 * @deprecated Use PY_CLASS_METHOD() or PY_CLASS_FREE_METHOD() instead.
7409 */
7410#define PY_CLASS_METHOD_CAST_10( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10 )\
7411 PY_CLASS_METHOD_CAST_DOC_10( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, 0 )
7412
7413/** @ingroup ClassDefinition
7414 * @brief Basic convenience wrapper with minimal parameters.
7415 * @deprecated Use PY_CLASS_METHOD() or PY_CLASS_FREE_METHOD() instead.
7416 */
7417#define PY_CLASS_METHOD_CAST_11( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11 )\
7418 PY_CLASS_METHOD_CAST_DOC_11( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, 0 )
7419
7420/** @ingroup ClassDefinition
7421 * @brief Basic convenience wrapper with minimal parameters.
7422 * @deprecated Use PY_CLASS_METHOD() or PY_CLASS_FREE_METHOD() instead.
7423 */
7424#define PY_CLASS_METHOD_CAST_12( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12 )\
7425 PY_CLASS_METHOD_CAST_DOC_12( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, 0 )
7426
7427/** @ingroup ClassDefinition
7428 * @brief Basic convenience wrapper with minimal parameters.
7429 * @deprecated Use PY_CLASS_METHOD() or PY_CLASS_FREE_METHOD() instead.
7430 */
7431#define PY_CLASS_METHOD_CAST_13( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13 )\
7432 PY_CLASS_METHOD_CAST_DOC_13( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, 0 )
7433
7434/** @ingroup ClassDefinition
7435 * @brief Basic convenience wrapper with minimal parameters.
7436 * @deprecated Use PY_CLASS_METHOD() or PY_CLASS_FREE_METHOD() instead.
7437 */
7438#define PY_CLASS_METHOD_CAST_14( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14 )\
7439 PY_CLASS_METHOD_CAST_DOC_14( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, 0 )
7440
7441/** @ingroup ClassDefinition
7442 * @brief Basic convenience wrapper with minimal parameters.
7443 * @deprecated Use PY_CLASS_METHOD() or PY_CLASS_FREE_METHOD() instead.
7444 */
7445#define PY_CLASS_METHOD_CAST_15( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15 )\
7446 PY_CLASS_METHOD_CAST_DOC_15( i_cppClass, i_cppMethod, t_return, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15, 0 )
7447
7448
7449/** @} */
7450
7451// --- static methods ------------------------------------------------------------------------------
7452
7453/** @addtogroup ClassDefinition
7454 * @name Static Method Export Macros
7455 *
7456 * Export C++ static methods or free functions as Python static methods (class methods).
7457 * Static methods are called on the class itself rather than on instances, and do not
7458 * receive an implicit 'self' parameter. Both C++ static member functions and free
7459 * functions can be exported as static methods.
7460 *
7461 * @{
7462 */
7463
7464
7465/** @ingroup ClassDefinition
7466 * @brief Export a C++ function as a Python static method with full parameter control.
7467 *
7468 * This macro exports a C++ static method or free function as a Python static method (class method).
7469 * Static methods are called on the class itself rather than on instances, and can access class
7470 * attributes but not instance attributes. Both C++ static member functions and free functions
7471 * can be exported as static methods.
7472 *
7473 * @param t_cppClass C++ class to add the static method to
7474 * @param f_cppFunction Full name of the C++ function that implements the static method
7475 * @param s_methodName Python method name (null-terminated C string literal)
7476 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
7477 * @param i_dispatcher Unique identifier for the generated dispatcher function
7478 *
7479 * ```cpp
7480 * // foo.h
7481 * class Foo
7482 * {
7483 * PY_HEADER(python::PyObjectPlus)
7484 * public:
7485 * static void bar(int iA);
7486 * };
7487 *
7488 * int spam(int iB, int iC);
7489 *
7490 * // foo.cpp
7491 * PY_DECLARE_CLASS(Foo)
7492 * PY_CLASS_STATIC_METHOD_EX(Foo, Foo::bar, "bar", "a regular C++ static method", foo_bar)
7493 * PY_CLASS_STATIC_METHOD_EX(Foo, spam, "spam", "free function as static method", foo_spam)
7494 * ```
7495 */
7496#define PY_CLASS_STATIC_METHOD_EX( t_cppClass, f_cppFunction, s_methodName, s_doc, i_dispatcher )\
7497 static PyCFunction LASS_CONCATENATE(i_dispatcher, _overloadChain) = 0;\
7498 extern "C" LASS_DLL_LOCAL PyObject* i_dispatcher( PyObject* iIgnore, PyObject* iArgs )\
7499 {\
7500 if (LASS_CONCATENATE(i_dispatcher, _overloadChain))\
7501 {\
7502 PyObject* result = LASS_CONCATENATE(i_dispatcher, _overloadChain)(iIgnore, iArgs);\
7503 if (!(PyErr_Occurred() && PyErr_ExceptionMatches(PyExc_TypeError)))\
7504 {\
7505 return result;\
7506 }\
7507 PyErr_Clear();\
7508 Py_XDECREF(result);\
7509 }\
7510 return ::lass::python::impl::callFunction( iArgs, f_cppFunction );\
7511 }\
7512 LASS_EXECUTE_BEFORE_MAIN_EX\
7513 ( LASS_CONCATENATE(i_dispatcher, _excecuteBeforeMain ),\
7514 t_cppClass ::_lassPyClassDef.addStaticMethod(\
7515 s_methodName, s_doc, i_dispatcher, LASS_CONCATENATE(i_dispatcher, _overloadChain));\
7516 )
7517
7518/** @ingroup ClassDefinition
7519 * @brief Export a C++ static method with custom documentation (method name derived from C++ method).
7520 *
7521 * Convenience macro that wraps PY_CLASS_STATIC_METHOD_EX() for C++ static member functions
7522 * with automatically generated dispatcher name and method name derived from C++ method name.
7523 *
7524 * @param i_cppClass C++ class to add the static method to
7525 * @param i_cppMethod Name of the C++ static method to export
7526 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
7527 *
7528 * @sa PY_CLASS_STATIC_METHOD_EX
7529 */
7530#define PY_CLASS_STATIC_METHOD_DOC( i_cppClass, i_cppMethod, s_doc )\
7531 PY_CLASS_STATIC_METHOD_EX(\
7532 i_cppClass,\
7533 &::lass::python::impl::ShadowTraits<i_cppClass>::TCppClass::i_cppMethod,\
7534 LASS_STRINGIFY(i_cppMethod), s_doc,\
7535 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_staticMethod_, i_cppClass)))
7536
7537/** @ingroup ClassDefinition
7538 * @brief Export a C++ static method with custom name and documentation.
7539 *
7540 * Convenience macro that wraps PY_CLASS_STATIC_METHOD_EX() for C++ static member functions
7541 * with automatically generated dispatcher name.
7542 *
7543 * @param i_cppClass C++ class to add the static method to
7544 * @param i_cppMethod Name of the C++ static method to export
7545 * @param s_methodName Python method name (null-terminated C string literal)
7546 * @param s_doc Method documentation string (null-terminated C string literal, may be nullptr)
7547 *
7548 * @sa PY_CLASS_STATIC_METHOD_EX
7549 */
7550#define PY_CLASS_STATIC_METHOD_NAME_DOC( i_cppClass, i_cppMethod, s_methodName, s_doc )\
7551 PY_CLASS_STATIC_METHOD_EX(\
7552 i_cppClass,\
7553 &::lass::python::impl::ShadowTraits<i_cppClass>::TCppClass::i_cppMethod,\
7554 s_methodName, s_doc,\
7555 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_staticMethod_, i_cppClass)))
7556
7557
7558/** @ingroup ClassDefinition
7559 * @brief Export a C++ static method with custom name (no documentation).
7560 *
7561 * Convenience macro that wraps PY_CLASS_STATIC_METHOD_EX() for C++ static member functions
7562 * with automatically generated dispatcher name and no documentation.
7563 *
7564 * @param i_cppClass C++ class to add the static method to
7565 * @param i_cppMethod Name of the C++ static method to export
7566 * @param s_methodName Python method name (null-terminated C string literal)
7567 *
7568 * @sa PY_CLASS_STATIC_METHOD_EX
7569 */
7570#define PY_CLASS_STATIC_METHOD_NAME( i_cppClass, i_cppMethod, s_methodName)\
7571 PY_CLASS_STATIC_METHOD_EX(\
7572 i_cppClass,\
7573 &::lass::python::impl::ShadowTraits<i_cppClass>::TCppClass::i_cppMethod,\
7574 s_methodName, "",\
7575 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_staticMethod_, i_cppClass)))
7576
7577
7578/** @ingroup ClassDefinition
7579 * @brief Export a C++ static method (method name derived from C++ method, no documentation).
7580 *
7581 * Convenience macro that wraps PY_CLASS_STATIC_METHOD_DOC() with no documentation.
7582 *
7583 * @param i_cppClass C++ class to add the static method to
7584 * @param i_cppMethod Name of the C++ static method to export (used as Python method name)
7585 *
7586 * @sa PY_CLASS_STATIC_METHOD_EX
7587 */
7588#define PY_CLASS_STATIC_METHOD( i_cppClass, i_cppMethod )\
7589 PY_CLASS_STATIC_METHOD_DOC( i_cppClass, i_cppMethod, 0 )
7590
7591/** @} */
7592
7593// --- data members --------------------------------------------------------------------------------
7594
7595/** @addtogroup ClassDefinition
7596 * @name Data Member Export Macros
7597 *
7598 * Export C++ class data members as Python properties/attributes.
7599 * These macros create Python properties that provide access to C++ class
7600 * data through various access patterns: getter/setter methods, free functions,
7601 * or direct public member access.
7602 *
7603 * | Member Methods (Read/Write) | Member Methods (Read-only) | Free Functions (Read/Write) | Free Functions (Read-only) | Public Member (Read/Write) | Public Member (Read-only) |
7604 * |-------------------------------|------------------------------|------------------------------------|-----------------------------------|-----------------------------------|-------------------------------------|
7605 * | PY_CLASS_MEMBER_RW_EX() | PY_CLASS_MEMBER_R_EX() | PY_CLASS_FREE_MEMBER_RW_EX() | PY_CLASS_FREE_MEMBER_R_EX() | PY_CLASS_PUBLIC_MEMBER_EX() | PY_CLASS_PUBLIC_MEMBER_R_EX() |
7606 * | PY_CLASS_MEMBER_RW_NAME_DOC() | PY_CLASS_MEMBER_R_NAME_DOC() | PY_CLASS_FREE_MEMBER_RW_NAME_DOC() | PY_CLASS_FREE_MEMBER_R_NAME_DOC() | PY_CLASS_PUBLIC_MEMBER_NAME_DOC() | PY_CLASS_PUBLIC_MEMBER_R_NAME_DOC() |
7607 * | PY_CLASS_MEMBER_RW_NAME() | PY_CLASS_MEMBER_R_NAME() | PY_CLASS_FREE_MEMBER_RW_NAME() | PY_CLASS_FREE_MEMBER_R_NAME() | PY_CLASS_PUBLIC_MEMBER_NAME() | PY_CLASS_PUBLIC_MEMBER_R_NAME() |
7608 * | PY_CLASS_MEMBER_RW_DOC() | PY_CLASS_MEMBER_R_DOC() | PY_CLASS_FREE_MEMBER_RW_DOC() | PY_CLASS_FREE_MEMBER_R_DOC() | PY_CLASS_PUBLIC_MEMBER_DOC() | PY_CLASS_PUBLIC_MEMBER_R_DOC() |
7609 * | PY_CLASS_MEMBER_RW() | PY_CLASS_MEMBER_R() | PY_CLASS_FREE_MEMBER_RW() | PY_CLASS_FREE_MEMBER_R() | PY_CLASS_PUBLIC_MEMBER() | PY_CLASS_PUBLIC_MEMBER_R() |
7610 *
7611 * @{
7612 */
7613
7614
7615/** @ingroup ClassDefinition
7616 * @brief Export getter/setter method pair as read/write Python property with full control.
7617 *
7618 * This is the most flexible read-write member export macro, allowing manual dispatcher naming.
7619 * Exports a pair of C++ getter and setter methods as a Python read/write property.
7620 *
7621 * @param t_cppClass C++ class containing the getter and setter methods
7622 * @param i_cppGetter C++ method name used to get the attribute value
7623 * @param i_cppSetter C++ method name used to set the attribute value
7624 * @param s_memberName Python property name (null-terminated C string literal)
7625 * @param s_doc Property documentation string (null-terminated C string literal, may be nullptr)
7626 * @param i_dispatcher Unique identifier for the generated dispatcher functions
7627 *
7628 * ```cpp
7629 * // foo.h
7630 * class Foo
7631 * {
7632 * PY_HEADER(python::PyObjectPlus)
7633 * public:
7634 * const int getBar() const { return bar_; }
7635 * int setBar(int iBar) { bar_ = iBar; }
7636 * const std::string& spam() const { return spam_; }
7637 * std::string& spam() const { return spam_; }
7638 * private:
7639 * int bar_;
7640 * std::string spam_;
7641 * };
7642 *
7643 * // foo.cpp
7644 * PY_DECLARE_CLASS(Foo)
7645 * PY_CLASS_MEMBER_RW_EX(Foo, getBar, setBar, "bar", "regular get and setter", foo_bar)
7646 * PY_CLASS_MEMBER_RW_EX(Foo, spam, spam, "spam", "cool get and setter", foo_spam)
7647 *
7648 * // Python: foo_instance.bar = 42; print(foo_instance.bar)
7649 * // Python: foo_instance.spam = "hello"; print(foo_instance.spam)
7650 * ```
7651 */
7652#define PY_CLASS_MEMBER_RW_EX( t_cppClass, i_cppGetter, i_cppSetter, s_memberName, s_doc, i_dispatcher)\
7653 extern "C" LASS_DLL_LOCAL PyObject* LASS_CONCATENATE(i_dispatcher, _getter)( PyObject* iObject, void* )\
7654 {\
7655 try \
7656 { \
7657 typedef ::lass::python::impl::ShadowTraits< t_cppClass > TShadowTraits;\
7658 TShadowTraits::TCppClassPtr self; \
7659 if (TShadowTraits::getObject(iObject, self) == 0)\
7660 { \
7661 return ::lass::python::pyBuildSimpleObject(self->i_cppGetter()); \
7662 } \
7663 PyErr_Clear(); \
7664 TShadowTraits::TConstCppClassPtr constSelf; \
7665 if (TShadowTraits::getObject(iObject, constSelf) == 0)\
7666 { \
7667 return ::lass::python::pyBuildSimpleObject(constSelf->i_cppGetter()); \
7668 } \
7669 return 0; \
7670 } \
7671 LASS_PYTHON_CATCH_AND_RETURN \
7672 }\
7673 extern "C" LASS_DLL_LOCAL int LASS_CONCATENATE(i_dispatcher, _setter)( PyObject* iObject, PyObject* iArgs, void* )\
7674 {\
7675 typedef ::lass::python::impl::ShadowTraits< t_cppClass > TShadowTraits;\
7676 typedef TShadowTraits::TCppClass TCppClass;\
7677 return ::lass::python::impl::CallMethod<TShadowTraits>::set( iArgs, iObject, &TCppClass::i_cppSetter );\
7678 }\
7679 LASS_EXECUTE_BEFORE_MAIN_EX\
7680 ( LASS_CONCATENATE(i_dispatcher, _executeBeforeMain),\
7681 t_cppClass::_lassPyClassDef.addGetSetter(\
7682 s_memberName, s_doc,\
7683 LASS_CONCATENATE(i_dispatcher, _getter), LASS_CONCATENATE(i_dispatcher, _setter));\
7684 )
7685
7686/** @ingroup ClassDefinition
7687 * @brief Export getter/setter method pair as read/write Python property with custom name and documentation.
7688 *
7689 * Convenience macro that wraps PY_CLASS_MEMBER_RW_EX() with auto-generated dispatcher name.
7690 *
7691 * @param t_cppClass C++ class containing the getter and setter methods
7692 * @param i_cppGetter C++ method name used to get the attribute value
7693 * @param i_cppSetter C++ method name used to set the attribute value
7694 * @param s_memberName Python property name (null-terminated C string literal)
7695 * @param s_doc Property documentation string (null-terminated C string literal, may be nullptr)
7696 *
7697 * @sa PY_CLASS_MEMBER_RW_EX
7698 */
7699#define PY_CLASS_MEMBER_RW_NAME_DOC(t_cppClass, i_cppGetter, i_cppSetter, s_memberName, s_doc)\
7700 PY_CLASS_MEMBER_RW_EX(t_cppClass, i_cppGetter, i_cppSetter, s_memberName, s_doc,\
7701 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_memberRW, t_cppClass)))
7702
7703/** @ingroup ClassDefinition
7704 * @brief Export getter/setter method pair as read/write Python property with custom name (no documentation).
7705 *
7706 * Convenience macro that wraps PY_CLASS_MEMBER_RW_NAME_DOC() with s_doc = nullptr.
7707 *
7708 * @param t_cppClass C++ class containing the getter and setter methods
7709 * @param i_cppGetter C++ method name used to get the attribute value
7710 * @param i_cppSetter C++ method name used to set the attribute value
7711 * @param s_memberName Python property name (null-terminated C string literal)
7712 *
7713 * @sa PY_CLASS_MEMBER_RW_EX
7714 */
7715#define PY_CLASS_MEMBER_RW_NAME(t_cppClass, i_cppGetter, i_cppSetter, s_memberName)\
7716 PY_CLASS_MEMBER_RW_NAME_DOC(t_cppClass, i_cppGetter, i_cppSetter, s_memberName, 0)
7717
7718/** @ingroup ClassDefinition
7719 * @brief Export getter/setter method pair as read/write Python property (name derived from getter, with documentation).
7720 *
7721 * Convenience macro that wraps PY_CLASS_MEMBER_RW_NAME_DOC() with s_memberName derived from i_cppGetter.
7722 *
7723 * @param t_cppClass C++ class containing the getter and setter methods
7724 * @param i_cppGetter C++ method name used to get the attribute value (also used as Python property name)
7725 * @param i_cppSetter C++ method name used to set the attribute value
7726 * @param s_doc Property documentation string (null-terminated C string literal, may be nullptr)
7727 *
7728 * @sa PY_CLASS_MEMBER_RW_EX
7729 */
7730#define PY_CLASS_MEMBER_RW_DOC(t_cppClass, i_cppGetter, i_cppSetter, s_doc)\
7731 PY_CLASS_MEMBER_RW_NAME_DOC(t_cppClass, i_cppGetter, i_cppSetter, LASS_STRINGIFY(i_cppGetter), s_doc)
7732
7733/** @ingroup ClassDefinition
7734 * @brief Export getter/setter method pair as read/write Python property (name derived from getter, no documentation).
7735 *
7736 * Convenience macro that wraps PY_CLASS_MEMBER_RW_DOC() with s_doc = nullptr.
7737 *
7738 * @param t_cppClass C++ class containing the getter and setter methods
7739 * @param i_cppGetter C++ method name used to get the attribute value (also used as Python property name)
7740 * @param i_cppSetter C++ method name used to set the attribute value
7741 *
7742 * @sa PY_CLASS_MEMBER_RW_EX
7743 */
7744#define PY_CLASS_MEMBER_RW(t_cppClass, i_cppGetter, i_cppSetter)\
7745 PY_CLASS_MEMBER_RW_DOC(t_cppClass, i_cppGetter, i_cppSetter, 0)
7746
7747
7748
7749/** @ingroup ClassDefinition
7750 * @brief Export getter method as read-only Python property with full control.
7751 *
7752 * This is the most flexible read-only member export macro, allowing manual dispatcher naming.
7753 * Exports a C++ getter method as a Python read-only property (no setter provided).
7754 *
7755 * @param t_cppClass C++ class containing the getter method
7756 * @param i_cppGetter C++ method name used to get the attribute value
7757 * @param s_memberName Python property name (null-terminated C string literal)
7758 * @param s_doc Property documentation string (null-terminated C string literal, may be nullptr)
7759 * @param i_dispatcher Unique identifier for the generated dispatcher function
7760 *
7761 * ```cpp
7762 * // foo.h
7763 * class Foo
7764 * {
7765 * PY_HEADER(python::PyObjectPlus)
7766 * public:
7767 * const int getBar() const { return bar_; }
7768 * private:
7769 * int bar_;
7770 * };
7771 *
7772 * // foo.cpp
7773 * PY_DECLARE_CLASS(Foo)
7774 * PY_CLASS_MEMBER_R_EX(Foo, getBar, "bar", "read-only property", foo_bar_getter)
7775 *
7776 * // Python: print(foo_instance.bar) # Read-only access
7777 * ```
7778 */
7779#define PY_CLASS_MEMBER_R_EX( t_cppClass, i_cppGetter, s_memberName, s_doc, i_dispatcher )\
7780 extern "C" LASS_DLL_LOCAL PyObject* LASS_CONCATENATE(i_dispatcher, _getter)( PyObject* iObject, void* )\
7781 {\
7782 try \
7783 { \
7784 typedef ::lass::python::impl::ShadowTraits< t_cppClass > TShadowTraits;\
7785 TShadowTraits::TCppClassPtr self; \
7786 if (TShadowTraits::getObject(iObject, self) == 0)\
7787 { \
7788 return ::lass::python::pyBuildSimpleObject(self->i_cppGetter()); \
7789 } \
7790 PyErr_Clear(); \
7791 TShadowTraits::TConstCppClassPtr constSelf; \
7792 if (TShadowTraits::getObject(iObject, constSelf) == 0)\
7793 { \
7794 return ::lass::python::pyBuildSimpleObject(constSelf->i_cppGetter()); \
7795 } \
7796 return 0; \
7797 } \
7798 LASS_PYTHON_CATCH_AND_RETURN \
7799 }\
7800 LASS_EXECUTE_BEFORE_MAIN_EX\
7801 ( LASS_CONCATENATE(i_dispatcher, _executeBeforeMain),\
7802 t_cppClass::_lassPyClassDef.addGetSetter(\
7803 s_memberName, s_doc,\
7804 LASS_CONCATENATE(i_dispatcher, _getter), 0);\
7805 )
7806
7807
7808/** @ingroup ClassDefinition
7809 * @brief Export getter method as read-only Python property with custom name and documentation.
7810 *
7811 * Convenience macro that wraps PY_CLASS_MEMBER_R_EX() with auto-generated dispatcher name.
7812 *
7813 * @param t_cppClass C++ class containing the getter method
7814 * @param i_cppGetter C++ method name used to get the attribute value
7815 * @param s_memberName Python property name (null-terminated C string literal)
7816 * @param s_doc Property documentation string (null-terminated C string literal, may be nullptr)
7817 *
7818 * @sa PY_CLASS_MEMBER_R_EX
7819 */
7820#define PY_CLASS_MEMBER_R_NAME_DOC(t_cppClass, i_cppGetter, s_memberName, s_doc)\
7821 PY_CLASS_MEMBER_R_EX(t_cppClass, i_cppGetter, s_memberName, s_doc,\
7822 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_memberR, t_cppClass)))
7823
7824/** @ingroup ClassDefinition
7825 * @brief Export getter method as read-only Python property with custom name (no documentation).
7826 *
7827 * Convenience macro that wraps PY_CLASS_MEMBER_R_NAME_DOC() with s_doc = nullptr.
7828 *
7829 * @param t_cppClass C++ class containing the getter method
7830 * @param i_cppGetter C++ method name used to get the attribute value
7831 * @param s_memberName Python property name (null-terminated C string literal)
7832 *
7833 * @sa PY_CLASS_MEMBER_R_EX
7834 */
7835#define PY_CLASS_MEMBER_R_NAME(t_cppClass, i_cppGetter, s_memberName)\
7836 PY_CLASS_MEMBER_R_NAME_DOC(t_cppClass, i_cppGetter, s_memberName, 0)
7837
7838/** @ingroup ClassDefinition
7839 * @brief Export getter method as read-only Python property (name derived from getter, with documentation).
7840 *
7841 * Convenience macro that wraps PY_CLASS_MEMBER_R_NAME_DOC() with s_memberName derived from i_cppGetter.
7842 *
7843 * @param t_cppClass C++ class containing the getter method
7844 * @param i_cppGetter C++ method name used to get the attribute value (also used as Python property name)
7845 * @param s_doc Property documentation string (null-terminated C string literal, may be nullptr)
7846 *
7847 * @sa PY_CLASS_MEMBER_R_EX
7848 */
7849#define PY_CLASS_MEMBER_R_DOC(t_cppClass, i_cppGetter, s_doc)\
7850 PY_CLASS_MEMBER_R_NAME_DOC(t_cppClass, i_cppGetter, LASS_STRINGIFY(i_cppGetter), s_doc)
7851
7852/** @ingroup ClassDefinition
7853 * @brief Export getter method as read-only Python property using method name.
7854 *
7855 * Convenience macro that wraps PY_CLASS_MEMBER_R_DOC() with method name as property name
7856 * and no documentation.
7857 *
7858 * @param t_cppClass C++ class containing the getter method
7859 * @param i_cppGetter C++ method name used to get the attribute value (also used as Python property name)
7860 *
7861 * @sa PY_CLASS_MEMBER_R_EX
7862 */
7863#define PY_CLASS_MEMBER_R(t_cppClass, i_cppGetter)\
7864 PY_CLASS_MEMBER_R_DOC(t_cppClass, i_cppGetter, 0)
7865
7866// --- data members --------------------------------------------------------------------------------
7867
7868/** @ingroup ClassDefinition
7869 * @brief Export free function accessors as read-write Python property.
7870 *
7871 * @deprecated Use member method-based macros like PY_CLASS_MEMBER_RW_EX() instead.
7872 *
7873 * Exports a pair of free functions as read/write Python property. Unlike member method-based
7874 * macros, this uses standalone functions that take the object as their first parameter.
7875 *
7876 * @param t_cppClass C++ class to add the property to
7877 * @param i_cppFreeGetter Free function name used to get the attribute value
7878 * @param i_cppFreeSetter Free function name used to set the attribute value
7879 * @param s_memberName Python property name (null-terminated C string literal)
7880 * @param s_doc Property documentation string (null-terminated C string literal, may be nullptr)
7881 * @param i_dispatcher Unique identifier for the generated dispatcher functions
7882 *
7883 * @code
7884 * // foo.h
7885 * class Foo
7886 * {
7887 * PY_HEADER(python::PyObjectPlus)
7888 * public:
7889 * int bar;
7890 * };
7891 *
7892 * int getBar(const Foo const* iThis)
7893 * {
7894 * return iThis->bar;
7895 * }
7896 * void setBar(Foo* iThis, int iBar)
7897 * {
7898 * iBar->bar = abar;
7899 * }
7900 *
7901 * // foo.cpp
7902 * PY_DECLARE_CLASS(Foo)
7903 * PY_CLASS_FREE_MEMBER_RW_EX(Foo, getBar, setBar, "bar", "regular get and setter")
7904 * @endcode
7905 */
7906#define PY_CLASS_FREE_MEMBER_RW_EX( t_cppClass, i_cppFreeGetter, i_cppFreeSetter, s_memberName, s_doc, i_dispatcher)\
7907 extern "C" LASS_DLL_LOCAL PyObject* LASS_CONCATENATE(i_dispatcher, _getter)( PyObject* iObject, void* )\
7908 {\
7909 typedef ::lass::python::impl::ShadowTraits< t_cppClass > TShadowTraits;\
7910 return ::lass::python::impl::CallMethod<TShadowTraits>::freeGet( iObject, i_cppFreeGetter );\
7911 }\
7912 extern "C" int LASS_CONCATENATE(i_dispatcher, _setter)( PyObject* iObject, PyObject* iArgs, void* )\
7913 {\
7914 typedef ::lass::python::impl::ShadowTraits< t_cppClass > TShadowTraits;\
7915 return ::lass::python::impl::CallMethod<TShadowTraits>::freeSet( iArgs, iObject, i_cppFreeSetter );\
7916 }\
7917 LASS_EXECUTE_BEFORE_MAIN_EX\
7918 ( LASS_CONCATENATE(i_dispatcher, _executeBeforeMain),\
7919 t_cppClass ::_lassPyClassDef.addGetSetter(\
7920 s_memberName, s_doc,\
7921 LASS_CONCATENATE(i_dispatcher, _getter), LASS_CONCATENATE(i_dispatcher, _setter));\
7922 )
7923
7924/** @ingroup ClassDefinition
7925 * @brief Export free function accessors as read-write Python property with custom name and documentation.
7926 *
7927 * @deprecated Use member method-based macros like PY_CLASS_MEMBER_RW_NAME_DOC() instead.
7928 *
7929 * Convenience macro that wraps PY_CLASS_FREE_MEMBER_RW_EX() with auto-generated dispatcher name.
7930 *
7931 * @param t_cppClass C++ class to add the property to
7932 * @param i_cppFreeGetter Free function name used to get the attribute value
7933 * @param i_cppFreeSetter Free function name used to set the attribute value
7934 * @param s_memberName Python property name (null-terminated C string literal)
7935 * @param s_doc Property documentation string (null-terminated C string literal, may be nullptr)
7936 *
7937 * @sa PY_CLASS_FREE_MEMBER_RW_EX
7938 */
7939#define PY_CLASS_FREE_MEMBER_RW_NAME_DOC(t_cppClass, i_cppFreeGetter, i_cppFreeSetter, s_memberName, s_doc)\
7940 PY_CLASS_FREE_MEMBER_RW_EX(t_cppClass, i_cppFreeGetter, i_cppFreeSetter, s_memberName, s_doc,\
7941 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_freeMemberRW, t_cppClass)))
7942
7943/** @ingroup ClassDefinition
7944 * @brief Export free function accessors as read-write Python property with custom name.
7945 *
7946 * @deprecated Use member method-based macros like PY_CLASS_MEMBER_RW_NAME() instead.
7947 *
7948 * Convenience macro that wraps PY_CLASS_FREE_MEMBER_RW_NAME_DOC() with no documentation.
7949 *
7950 * @param t_cppClass C++ class to add the property to
7951 * @param i_cppFreeGetter Free function name used to get the attribute value
7952 * @param i_cppFreeSetter Free function name used to set the attribute value
7953 * @param s_memberName Python property name (null-terminated C string literal)
7954 *
7955 * @sa PY_CLASS_FREE_MEMBER_RW_EX
7956 */
7957#define PY_CLASS_FREE_MEMBER_RW_NAME(t_cppClass, i_cppFreeGetter, i_cppFreeSetter, s_memberName)\
7958 PY_CLASS_FREE_MEMBER_RW_NAME_DOC(t_cppClass, i_cppFreeGetter, i_cppFreeSetter, s_memberName, 0)
7959
7960/** @ingroup ClassDefinition
7961 * @brief Export free function accessors as read-write Python property using function name.
7962 *
7963 * @deprecated Use member method-based macros like PY_CLASS_MEMBER_RW_DOC() instead.
7964 *
7965 * Convenience macro that wraps PY_CLASS_FREE_MEMBER_RW_NAME_DOC() with function name as property name.
7966 *
7967 * @param t_cppClass C++ class to add the property to
7968 * @param i_cppFreeGetter Free function name used to get the attribute value (also used as Python property name)
7969 * @param i_cppFreeSetter Free function name used to set the attribute value
7970 * @param s_doc Property documentation string (null-terminated C string literal, may be nullptr)
7971 *
7972 * @sa PY_CLASS_FREE_MEMBER_RW_EX
7973 */
7974#define PY_CLASS_FREE_MEMBER_RW_DOC(t_cppClass, i_cppFreeGetter, i_cppFreeSetter, s_doc)\
7975 PY_CLASS_FREE_MEMBER_RW_NAME_DOC(t_cppClass, i_cppFreeGetter, i_cppFreeSetter, LASS_STRINGIFY(i_cppFreeGetter), s_doc)
7976
7977/** @ingroup ClassDefinition
7978 * @brief Export free function accessors as read-write Python property using function name.
7979 *
7980 * @deprecated Use member method-based macros like PY_CLASS_MEMBER_RW() instead.
7981 *
7982 * Convenience macro that wraps PY_CLASS_FREE_MEMBER_RW_DOC() with function name as property name
7983 * and no documentation.
7984 *
7985 * @param t_cppClass C++ class to add the property to
7986 * @param i_cppFreeGetter Free function name used to get the attribute value (also used as Python property name)
7987 * @param i_cppFreeSetter Free function name used to set the attribute value
7988 *
7989 * @sa PY_CLASS_FREE_MEMBER_RW_EX
7990 */
7991#define PY_CLASS_FREE_MEMBER_RW(t_cppClass, i_cppFreeGetter, i_cppFreeSetter)\
7992 PY_CLASS_FREE_MEMBER_RW_DOC(t_cppClass, i_cppFreeGetter, i_cppFreeSetter, 0)
7993
7994
7995
7996/** @ingroup ClassDefinition
7997 * @brief Export free function accessor as read-only Python property.
7998 *
7999 * @deprecated Use member method-based macros like PY_CLASS_MEMBER_R_EX() instead.
8000 *
8001 * Exports a free function as read-only Python property. Unlike member method-based
8002 * macros, this uses a standalone function that takes the object as its first parameter.
8003 *
8004 * @param t_cppClass C++ class to add the property to
8005 * @param i_freeCppGetter Free function name used to get the attribute value
8006 * @param s_memberName Python property name (null-terminated C string literal)
8007 * @param s_doc Property documentation string (null-terminated C string literal, may be nullptr)
8008 * @param i_dispatcher Unique identifier for the generated dispatcher functions
8009 *
8010 * @code
8011 * // foo.h
8012 * class Foo
8013 * {
8014 * PY_HEADER(python::PyObjectPlus)
8015 * public:
8016 * int bar;
8017 * };
8018 *
8019 * int getBar(const Foo const* iThis)
8020 * {
8021 * return iThis->bar;
8022 * }
8023 *
8024 * // foo.cpp
8025 * PY_DECLARE_CLASS(Foo)
8026 * PY_CLASS_FREE_MEMBER_R_EX(Foo, getBar, "bar", "regular get and setter")
8027 * @endcode
8028 */
8029#define PY_CLASS_FREE_MEMBER_R_EX( t_cppClass, i_freeCppGetter, s_memberName, s_doc, i_dispatcher )\
8030 extern "C" LASS_DLL_LOCAL PyObject* LASS_CONCATENATE(i_dispatcher, _getter)( PyObject* iObject, void* )\
8031 {\
8032 typedef ::lass::python::impl::ShadowTraits< t_cppClass > TShadowTraits;\
8033 return ::lass::python::impl::CallMethod<TShadowTraits>::freeGet( iObject, i_freeCppGetter );\
8034 }\
8035 LASS_EXECUTE_BEFORE_MAIN_EX\
8036 ( LASS_CONCATENATE(i_dispatcher, _executeBeforeMain),\
8037 t_cppClass ::_lassPyClassDef.addGetSetter(\
8038 s_memberName, s_doc,\
8039 LASS_CONCATENATE(i_dispatcher, _getter), 0);\
8040 )
8041
8042/** @ingroup ClassDefinition
8043 * @brief Export free function accessor as read-only Python property with custom name and documentation.
8044 *
8045 * @deprecated Use member method-based macros like PY_CLASS_MEMBER_R_NAME_DOC() instead.
8046 *
8047 * Convenience macro that wraps PY_CLASS_FREE_MEMBER_R_EX() with auto-generated dispatcher name.
8048 *
8049 * @param t_cppClass C++ class to add the property to
8050 * @param i_freeCppGetter Free function name used to get the attribute value
8051 * @param s_memberName Python property name (null-terminated C string literal)
8052 * @param s_doc Property documentation string (null-terminated C string literal, may be nullptr)
8053 *
8054 * @sa PY_CLASS_FREE_MEMBER_R_EX
8055 */
8056#define PY_CLASS_FREE_MEMBER_R_NAME_DOC(t_cppClass, i_freeCppGetter, s_memberName, s_doc)\
8057 PY_CLASS_FREE_MEMBER_R_EX(t_cppClass, i_freeCppGetter, s_memberName, s_doc,\
8058 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_freeMemberR, t_cppClass)))
8059
8060/** @ingroup ClassDefinition
8061 * @brief Export free function accessor as read-only Python property with custom name.
8062 *
8063 * @deprecated Use member method-based macros like PY_CLASS_MEMBER_R_NAME() instead.
8064 *
8065 * Convenience macro that wraps PY_CLASS_FREE_MEMBER_R_NAME_DOC() with no documentation.
8066 *
8067 * @param t_cppClass C++ class to add the property to
8068 * @param i_freeCppGetter Free function name used to get the attribute value
8069 * @param s_memberName Python property name (null-terminated C string literal)
8070 *
8071 * @sa PY_CLASS_FREE_MEMBER_R_EX
8072 */
8073#define PY_CLASS_FREE_MEMBER_R_NAME(t_cppClass, i_freeCppGetter, s_memberName)\
8074 PY_CLASS_FREE_MEMBER_R_NAME_DOC(t_cppClass, i_freeCppGetter, s_memberName, 0)
8075
8076/** @ingroup ClassDefinition
8077 * @brief Export free function accessor as read-only Python property using function name.
8078 *
8079 * @deprecated Use member method-based macros like PY_CLASS_MEMBER_R_DOC() instead.
8080 *
8081 * Convenience macro that wraps PY_CLASS_FREE_MEMBER_R_NAME_DOC() with function name as property name.
8082 *
8083 * @param t_cppClass C++ class to add the property to
8084 * @param i_freeCppGetter Free function name used to get the attribute value (also used as Python property name)
8085 * @param s_doc Property documentation string (null-terminated C string literal, may be nullptr)
8086 *
8087 * @sa PY_CLASS_FREE_MEMBER_R_EX
8088 */
8089#define PY_CLASS_FREE_MEMBER_R_DOC(t_cppClass, i_freeCppGetter, s_doc)\
8090 PY_CLASS_FREE_MEMBER_R_NAME_DOC(t_cppClass, i_freeCppGetter, LASS_STRINGIFY(i_freeCppGetter), s_doc)
8091
8092/** @ingroup ClassDefinition
8093 * @brief Export free function accessor as read-only Python property using function name.
8094 *
8095 * @deprecated Use member method-based macros like PY_CLASS_MEMBER_R() instead.
8096 *
8097 * Convenience macro that wraps PY_CLASS_FREE_MEMBER_R_DOC() with function name as property name
8098 * and no documentation.
8099 *
8100 * @param t_cppClass C++ class to add the property to
8101 * @param i_freeCppGetter Free function name used to get the attribute value (also used as Python property name)
8102 *
8103 * @sa PY_CLASS_FREE_MEMBER_R_EX
8104 */
8105#define PY_CLASS_FREE_MEMBER_R(t_cppClass, i_freeCppGetter)\
8106 PY_CLASS_FREE_MEMBER_R_DOC(t_cppClass, i_freeCppGetter, 0)
8107
8108/** @ingroup ClassDefinition
8109 * @brief Export public data member as read-write Python property.
8110 *
8111 * Exports a public data member directly as a Python property, allowing both read and write access.
8112 * This provides direct access to the C++ member variable without requiring getter/setter methods.
8113 *
8114 * @param t_cppClass C++ class containing the public member
8115 * @param i_cppMember C++ public data member name to export
8116 * @param s_memberName Python property name (null-terminated C string literal)
8117 * @param s_doc Property documentation string (null-terminated C string literal, may be nullptr)
8118 * @param i_dispatcher Unique identifier for the generated dispatcher functions
8119 *
8120 * @code
8121 * // foo.h
8122 * class Foo
8123 * {
8124 * PY_HEADER(python::PyObjectPlus)
8125 * public:
8126 * int bar;
8127 * };
8128 *
8129 * // foo.cpp
8130 * PY_DECLARE_CLASS(Foo)
8131 * PY_CLASS_PUBLIC_MEMBER_EX(Foo, bar, "bar", "blablabla")
8132 * @endcode
8133 */
8134#define PY_CLASS_PUBLIC_MEMBER_EX(t_cppClass, i_cppMember, s_memberName, s_doc, i_dispatcher)\
8135 extern "C" LASS_DLL_LOCAL PyObject* LASS_CONCATENATE(i_dispatcher, _getter)(PyObject* obj, void* )\
8136 {\
8137 typedef ::lass::python::impl::ShadowTraits< t_cppClass > TShadowTraits;\
8138 TShadowTraits::TConstCppClassPtr self;\
8139 if (TShadowTraits::getObject(obj, self) != 0)\
8140 {\
8141 return 0;\
8142 }\
8143 return lass::python::pyBuildSimpleObject(self->i_cppMember);\
8144 }\
8145 extern "C" LASS_DLL_LOCAL int LASS_CONCATENATE(i_dispatcher, _setter)(PyObject* obj,PyObject* args, void* )\
8146 {\
8147 typedef ::lass::python::impl::ShadowTraits< t_cppClass > TShadowTraits;\
8148 TShadowTraits::TCppClassPtr self;\
8149 if (TShadowTraits::getObject(obj, self) != 0)\
8150 {\
8151 return -1;\
8152 }\
8153 return -::lass::python::pyGetSimpleObject(args, self->i_cppMember);\
8154 }\
8155 LASS_EXECUTE_BEFORE_MAIN_EX\
8156 ( LASS_CONCATENATE(i_dispatcher, _executeBeforeMain),\
8157 t_cppClass ::_lassPyClassDef.addGetSetter(\
8158 s_memberName, s_doc,\
8159 LASS_CONCATENATE(i_dispatcher, _getter), LASS_CONCATENATE(i_dispatcher, _setter));\
8160 )
8161
8162/** @ingroup ClassDefinition
8163 * @brief Export public data member as read-write Python property with custom name and documentation.
8164 *
8165 * Convenience macro that wraps PY_CLASS_PUBLIC_MEMBER_EX() with auto-generated dispatcher name.
8166 *
8167 * @param i_cppClass C++ class containing the public member
8168 * @param i_cppMember C++ public data member name to export
8169 * @param s_memberName Python property name (null-terminated C string literal)
8170 * @param s_doc Property documentation string (null-terminated C string literal, may be nullptr)
8171 *
8172 * @sa PY_CLASS_PUBLIC_MEMBER_EX
8173 */
8174#define PY_CLASS_PUBLIC_MEMBER_NAME_DOC( i_cppClass, i_cppMember, s_memberName, s_doc )\
8175 PY_CLASS_PUBLIC_MEMBER_EX( i_cppClass, i_cppMember, s_memberName, s_doc,\
8176 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_publicMember_, i_cppClass)))
8177
8178/** @ingroup ClassDefinition
8179 * @brief Export public data member as read-write Python property with custom name.
8180 *
8181 * Convenience macro that wraps PY_CLASS_PUBLIC_MEMBER_NAME_DOC() with no documentation.
8182 *
8183 * @param i_cppClass C++ class containing the public member
8184 * @param i_cppMember C++ public data member name to export
8185 * @param s_memberName Python property name (null-terminated C string literal)
8186 *
8187 * @sa PY_CLASS_PUBLIC_MEMBER_EX
8188 */
8189#define PY_CLASS_PUBLIC_MEMBER_NAME( i_cppClass, i_cppMember, s_memberName )\
8190 PY_CLASS_PUBLIC_MEMBER_NAME_DOC( i_cppClass, i_cppMember, s_memberName, 0 )
8191
8192/** @ingroup ClassDefinition
8193 * @brief Export public data member as read-write Python property using member name.
8194 *
8195 * Convenience macro that wraps PY_CLASS_PUBLIC_MEMBER_NAME_DOC() with member name as property name.
8196 *
8197 * @param i_cppClass C++ class containing the public member
8198 * @param i_cppMember C++ public data member name to export (also used as Python property name)
8199 * @param s_doc Property documentation string (null-terminated C string literal, may be nullptr)
8200 *
8201 * @sa PY_CLASS_PUBLIC_MEMBER_EX
8202 */
8203#define PY_CLASS_PUBLIC_MEMBER_DOC( i_cppClass, i_cppMember , s_doc)\
8204 PY_CLASS_PUBLIC_MEMBER_NAME_DOC( i_cppClass, i_cppMember, LASS_STRINGIFY(i_cppMember), s_doc )
8205
8206/** @ingroup ClassDefinition
8207 * @brief Export public data member as read-write Python property using member name.
8208 *
8209 * Convenience macro that wraps PY_CLASS_PUBLIC_MEMBER_NAME_DOC() with member name as property name
8210 * and no documentation.
8211 *
8212 * @param i_cppClass C++ class containing the public member
8213 * @param i_cppMember C++ public data member name to export (also used as Python property name)
8214 *
8215 * @sa PY_CLASS_PUBLIC_MEMBER_EX
8216 */
8217#define PY_CLASS_PUBLIC_MEMBER( i_cppClass, i_cppMember )\
8218 PY_CLASS_PUBLIC_MEMBER_NAME_DOC( i_cppClass, i_cppMember, LASS_STRINGIFY(i_cppMember), 0 )
8219
8220
8221
8222
8223/** @ingroup ClassDefinition
8224 * @brief Export public data member as read-only Python property.
8225 *
8226 * Exports a public data member directly as a read-only Python property, allowing only read access.
8227 * This provides direct read access to the C++ member variable without requiring a getter method.
8228 * Useful for const members or when write access should be restricted.
8229 *
8230 * @param t_cppClass C++ class containing the public member
8231 * @param i_cppMember C++ public data member name to export
8232 * @param s_memberName Python property name (null-terminated C string literal)
8233 * @param s_doc Property documentation string (null-terminated C string literal, may be nullptr)
8234 * @param i_dispatcher Unique identifier for the generated dispatcher functions
8235 *
8236 * @code
8237 * // foo.h
8238 * class Foo
8239 * {
8240 * PY_HEADER(python::PyObjectPlus)
8241 * public:
8242 * const int bar;
8243 * };
8244 *
8245 * // foo.cpp
8246 * PY_DECLARE_CLASS(Foo)
8247 * PY_CLASS_PUBLIC_MEMBER_R_EX(Foo, bar, "bar", "read-only member")
8248 * @endcode
8249 */
8250#define PY_CLASS_PUBLIC_MEMBER_R_EX( t_cppClass, i_cppMember, s_memberName, s_doc, i_dispatcher )\
8251 extern "C" LASS_DLL_LOCAL PyObject* LASS_CONCATENATE(i_dispatcher, _getter)(PyObject* obj, void* )\
8252 {\
8253 typedef ::lass::python::impl::ShadowTraits< t_cppClass > TShadowTraits;\
8254 TShadowTraits::TConstCppClassPtr self;\
8255 if (TShadowTraits::getObject(obj, self) != 0)\
8256 {\
8257 return 0;\
8258 }\
8259 return lass::python::pyBuildSimpleObject(self->i_cppMember);\
8260 }\
8261 LASS_EXECUTE_BEFORE_MAIN_EX\
8262 ( LASS_CONCATENATE(i_dispatcher, _executeBeforeMain),\
8263 t_cppClass ::_lassPyClassDef.addGetSetter(\
8264 s_memberName, s_doc,\
8265 LASS_CONCATENATE(i_dispatcher, _getter), nullptr);\
8266 )
8267
8268/** @ingroup ClassDefinition
8269 * @brief Export public data member as read-only Python property with custom name and documentation.
8270 *
8271 * Convenience macro that wraps PY_CLASS_PUBLIC_MEMBER_R_EX() with auto-generated dispatcher name.
8272 *
8273 * @param i_cppClass C++ class containing the public member
8274 * @param i_cppMember C++ public data member name to export
8275 * @param s_memberName Python property name (null-terminated C string literal)
8276 * @param s_doc Property documentation string (null-terminated C string literal, may be nullptr)
8277 *
8278 * @sa PY_CLASS_PUBLIC_MEMBER_R_EX
8279 */
8280#define PY_CLASS_PUBLIC_MEMBER_R_NAME_DOC(i_cppClass, i_cppMember, s_memberName, s_doc)\
8281 PY_CLASS_PUBLIC_MEMBER_R_EX(i_cppClass, i_cppMember, s_memberName, s_doc,\
8282 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_publicMemberR_, i_cppClass)))
8283
8284/** @ingroup ClassDefinition
8285 * @brief Export public data member as read-only Python property with custom name.
8286 *
8287 * Convenience macro that wraps PY_CLASS_PUBLIC_MEMBER_R_NAME_DOC() with no documentation.
8288 *
8289 * @param i_cppClass C++ class containing the public member
8290 * @param i_cppMember C++ public data member name to export
8291 * @param s_memberName Python property name (null-terminated C string literal)
8292 *
8293 * @sa PY_CLASS_PUBLIC_MEMBER_R_EX
8294 */
8295#define PY_CLASS_PUBLIC_MEMBER_R_NAME(i_cppClass, i_cppMember, s_memberName)\
8296 PY_CLASS_PUBLIC_MEMBER_R_NAME_DOC(i_cppClass, i_cppMember, s_memberName, 0 )
8297
8298/** @ingroup ClassDefinition
8299 * @brief Export public data member as read-only Python property using member name.
8300 *
8301 * Convenience macro that wraps PY_CLASS_PUBLIC_MEMBER_R_NAME_DOC() with member name as property name.
8302 *
8303 * @param i_cppClass C++ class containing the public member
8304 * @param i_cppMember C++ public data member name to export (also used as Python property name)
8305 * @param s_doc Property documentation string (null-terminated C string literal, may be nullptr)
8306 *
8307 * @sa PY_CLASS_PUBLIC_MEMBER_R_EX
8308 */
8309#define PY_CLASS_PUBLIC_MEMBER_R_DOC(i_cppClass, i_cppMember , s_doc)\
8310 PY_CLASS_PUBLIC_MEMBER_R_NAME_DOC(i_cppClass, i_cppMember, LASS_STRINGIFY(i_cppMember), s_doc)
8311
8312/** @ingroup ClassDefinition
8313 * @brief Export public data member as read-only Python property using member name.
8314 *
8315 * Convenience macro that wraps PY_CLASS_PUBLIC_MEMBER_R_NAME_DOC() with member name as property name
8316 * and no documentation.
8317 *
8318 * @param i_cppClass C++ class containing the public member
8319 * @param i_cppMember C++ public data member name to export (also used as Python property name)
8320 *
8321 * @sa PY_CLASS_PUBLIC_MEMBER_R_EX
8322 */
8323#define PY_CLASS_PUBLIC_MEMBER_R(i_cppClass, i_cppMember)\
8324 PY_CLASS_PUBLIC_MEMBER_R_NAME_DOC(i_cppClass, i_cppMember, LASS_STRINGIFY(i_cppMember), 0)
8325
8326/** @} */
8327
8328// --- constructors --------------------------------------------------------------------------------
8329
8330/** @addtogroup ClassDefinition
8331 * @name Constructor Export Macros
8332 *
8333 * Export C++ constructors directly as Python class constructors.
8334 * These macros make abstract Python classes concrete by adding constructors
8335 * that can create instances from Python code using the actual C++ constructors.
8336 *
8337 * **Standard Constructor Export:**
8338 * - PY_CLASS_CONSTRUCTOR_EX() - Full control with manual dispatcher naming
8339 * - PY_CLASS_CONSTRUCTOR() - Auto-generated dispatcher name
8340 *
8341 * **Convenience Macros by Parameter Count:**
8342 * - PY_CLASS_CONSTRUCTOR_0() - Constructor with no parameters
8343 * - PY_CLASS_CONSTRUCTOR_1() - Constructor with 1 parameter
8344 * - PY_CLASS_CONSTRUCTOR_2() - Constructor with 2 parameters
8345 * - ... (up to PY_CLASS_CONSTRUCTOR_15()) - Constructor with up to 15 parameters
8346 *
8347 * @{
8348 */
8349
8350
8351/** @ingroup ClassDefinition
8352 * @brief Export C++ constructor as Python class constructor with full control.
8353 *
8354 * Makes an abstract Python class concrete by adding a constructor. All Python classes
8355 * are abstract by default with no constructors to create instances. This macro provides
8356 * the most flexible constructor export with manual dispatcher naming.
8357 *
8358 * @param t_cppClass C++ class to add the constructor to
8359 * @param t_params lass::meta::TypeTuple of constructor parameter types (use meta::TypeTuple<> for no parameters)
8360 * @param i_dispatcher Unique identifier for the generated dispatcher functions
8361 *
8362 * @code
8363 * // foo.h
8364 * class Foo
8365 * {
8366 * PY_HEADER(python::PyObjectPlus)
8367 * public:
8368 * Foo();
8369 * Foo(int iA, const std::string& iB);
8370 * };
8371 *
8372 * // foo.cpp
8373 * PY_DECLARE_CLASS(Foo)
8374 * PY_CLASS_CONSTRUCTOR(Foo, meta::TypeTuple<>) // constructor without arguments.
8375 * typedef meta::TypeTuple<int, std::string> TArguments;
8376 * PY_CLASS_CONSTRUCTOR(Foo, TArguments) // constructor with some arguments. *
8377 * @endcode
8378 */
8379#define PY_CLASS_CONSTRUCTOR_EX( t_cppClass, t_params, i_dispatcher )\
8380 static newfunc LASS_CONCATENATE(i_dispatcher, _overloadChain) = 0;\
8381 extern "C" LASS_DLL_LOCAL PyObject* i_dispatcher(PyTypeObject *iSubtype, PyObject *iArgs, PyObject *iKwds)\
8382 {\
8383 if (LASS_CONCATENATE(i_dispatcher, _overloadChain))\
8384 {\
8385 PyObject* result = LASS_CONCATENATE(i_dispatcher, _overloadChain)(\
8386 iSubtype, iArgs, iKwds);\
8387 if (!(PyErr_Occurred() && PyErr_ExceptionMatches(PyExc_TypeError)))\
8388 {\
8389 return result;\
8390 }\
8391 PyErr_Clear();\
8392 Py_XDECREF(result);\
8393 }\
8394 return ::lass::python::impl::ExplicitResolver\
8395 <\
8396 ::lass::python::impl::ShadowTraits< t_cppClass >,\
8397 ::lass::meta::NullType,\
8398 t_params\
8399 >\
8400 ::callConstructor(iSubtype, iArgs);\
8401 }\
8402 LASS_EXECUTE_BEFORE_MAIN_EX( LASS_CONCATENATE(i_dispatcher, _executeBeforeMain),\
8403 t_cppClass::_lassPyClassDef.addConstructor( \
8404 i_dispatcher, \
8405 LASS_CONCATENATE(i_dispatcher, _overloadChain) \
8406 ); \
8407 )
8408
8409/** @ingroup ClassDefinition
8410 * @brief Export C++ constructor as Python class constructor.
8411 *
8412 * Convenience macro that wraps PY_CLASS_CONSTRUCTOR_EX() with auto-generated dispatcher name.
8413 * Makes an abstract Python class concrete by adding a constructor.
8414 *
8415 * @param i_cppClass C++ class to add the constructor to
8416 * @param t_params lass::meta::TypeTuple of constructor parameter types
8417 *
8418 * @sa PY_CLASS_CONSTRUCTOR_EX
8419 */
8420#define PY_CLASS_CONSTRUCTOR( i_cppClass, t_params )\
8421 PY_CLASS_CONSTRUCTOR_EX(i_cppClass, t_params,\
8422 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_constructor_, i_cppClass)))
8423
8424/** @ingroup ClassDefinition
8425 * @brief Export C++ default constructor as Python class constructor.
8426 *
8427 * Convenience macro for exporting a parameterless C++ constructor.
8428 * Equivalent to PY_CLASS_CONSTRUCTOR(t_cppClass, meta::TypeTuple<>).
8429 *
8430 * @param t_cppClass C++ class to add the default constructor to
8431 *
8432 * @sa PY_CLASS_CONSTRUCTOR_EX
8433 */
8434#define PY_CLASS_CONSTRUCTOR_0( t_cppClass )\
8435 PY_CLASS_CONSTRUCTOR( t_cppClass, ::lass::meta::TypeTuple<> )
8436
8437/** @ingroup ClassDefinition
8438 * @brief Export C++ constructor as Python class constructor with 1 parameters.
8439 *
8440 * Convenience macro for exporting a C++ constructor with exactly 1 parameters.
8441 * Automatically creates the required meta::TypeTuple from the parameter types.
8442 *
8443 * @param t_cppClass C++ class to add the constructor to
8444 * @param t_P1 Type of parameter 1
8445 *
8446 * @sa PY_CLASS_CONSTRUCTOR_EX
8447 */
8448#define PY_CLASS_CONSTRUCTOR_1( t_cppClass, t_P1 )\
8449 typedef ::lass::meta::TypeTuple< t_P1 > \
8450 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_TParams_, t_cppClass));\
8451 PY_CLASS_CONSTRUCTOR(\
8452 t_cppClass, LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_TParams_, t_cppClass)))
8453
8454/** @ingroup ClassDefinition
8455 * @brief Export C++ constructor as Python class constructor with 2 parameters.
8456 *
8457 * Convenience macro for exporting a C++ constructor with exactly 2 parameters.
8458 * Automatically creates the required meta::TypeTuple from the parameter types.
8459 *
8460 * @param t_cppClass C++ class to add the constructor to
8461 * @param t_P1 Type of parameter 1, @param t_P2 Type of parameter 2
8462 *
8463 * @sa PY_CLASS_CONSTRUCTOR_EX
8464 */
8465#define PY_CLASS_CONSTRUCTOR_2( t_cppClass, t_P1, t_P2 )\
8466 typedef ::lass::meta::TypeTuple< t_P1, t_P2 > \
8467 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_TParams_, t_cppClass));\
8468 PY_CLASS_CONSTRUCTOR(\
8469 t_cppClass, LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_TParams_, t_cppClass)))
8470
8471/** @ingroup ClassDefinition
8472 * @brief Export C++ constructor as Python class constructor with 3 parameters.
8473 *
8474 * Convenience macro for exporting a C++ constructor with exactly 3 parameters.
8475 * Automatically creates the required meta::TypeTuple from the parameter types.
8476 *
8477 * @param t_cppClass C++ class to add the constructor to
8478 * @param t_P1 Type of parameter 1, @param t_P2 Type of parameter 2, @param t_P3 Type of parameter 3
8479 *
8480 * @sa PY_CLASS_CONSTRUCTOR_EX
8481 */
8482#define PY_CLASS_CONSTRUCTOR_3( t_cppClass, t_P1, t_P2, t_P3 )\
8483 typedef ::lass::meta::TypeTuple< t_P1, t_P2, t_P3 > \
8484 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_TParams_, t_cppClass));\
8485 PY_CLASS_CONSTRUCTOR(\
8486 t_cppClass, LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_TParams_, t_cppClass)))
8487
8488/** @ingroup ClassDefinition
8489 * @brief Export C++ constructor as Python class constructor with 4 parameters.
8490 *
8491 * Convenience macro for exporting a C++ constructor with exactly 4 parameters.
8492 * Automatically creates the required meta::TypeTuple from the parameter types.
8493 *
8494 * @param t_cppClass C++ class to add the constructor to
8495 * @param t_P1 Type of parameter 1, @param t_P2 Type of parameter 2, @param t_P3 Type of parameter 3, @param t_P4 Type of parameter 4
8496 *
8497 * @sa PY_CLASS_CONSTRUCTOR_EX
8498 */
8499#define PY_CLASS_CONSTRUCTOR_4( t_cppClass, t_P1, t_P2, t_P3, t_P4 )\
8500 typedef ::lass::meta::TypeTuple< t_P1, t_P2, t_P3, t_P4 > \
8501 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_TParams_, t_cppClass));\
8502 PY_CLASS_CONSTRUCTOR(\
8503 t_cppClass, LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_TParams_, t_cppClass)))
8504
8505/** @ingroup ClassDefinition
8506 * @brief Export C++ constructor as Python class constructor with 5 parameters.
8507 *
8508 * Convenience macro for exporting a C++ constructor with exactly 5 parameters.
8509 * Automatically creates the required meta::TypeTuple from the parameter types.
8510 *
8511 * @param t_cppClass C++ class to add the constructor to
8512 * @param t_P1 Type of parameter 1, @param t_P2 Type of parameter 2, @param t_P3 Type of parameter 3, @param t_P4 Type of parameter 4, @param t_P5 Type of parameter 5
8513 *
8514 * @sa PY_CLASS_CONSTRUCTOR_EX
8515 */
8516#define PY_CLASS_CONSTRUCTOR_5( t_cppClass, t_P1, t_P2, t_P3, t_P4, t_P5 )\
8517 typedef ::lass::meta::TypeTuple< t_P1, t_P2, t_P3, t_P4, t_P5 > \
8518 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_TParams_, t_cppClass));\
8519 PY_CLASS_CONSTRUCTOR(\
8520 t_cppClass, LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_TParams_, t_cppClass)))
8521
8522/** @ingroup ClassDefinition
8523 * @brief Export C++ constructor as Python class constructor with 6 parameters.
8524 *
8525 * Convenience macro for exporting a C++ constructor with exactly 6 parameters.
8526 * Automatically creates the required meta::TypeTuple from the parameter types.
8527 *
8528 * @param t_cppClass C++ class to add the constructor to
8529 * @param t_P1 Type of parameter 1, @param t_P2 Type of parameter 2, @param t_P3 Type of parameter 3, @param t_P4 Type of parameter 4, @param t_P5 Type of parameter 5, @param t_P6 Type of parameter 6
8530 *
8531 * @sa PY_CLASS_CONSTRUCTOR_EX
8532 */
8533#define PY_CLASS_CONSTRUCTOR_6( t_cppClass, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6 )\
8534 typedef ::lass::meta::TypeTuple< t_P1, t_P2, t_P3, t_P4, t_P5, t_P6 > \
8535 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_TParams_, t_cppClass));\
8536 PY_CLASS_CONSTRUCTOR(\
8537 t_cppClass, LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_TParams_, t_cppClass)))
8538
8539/** @ingroup ClassDefinition
8540 * @brief Export C++ constructor as Python class constructor with 7 parameters.
8541 *
8542 * Convenience macro for exporting a C++ constructor with exactly 7 parameters.
8543 * Automatically creates the required meta::TypeTuple from the parameter types.
8544 *
8545 * @param t_cppClass C++ class to add the constructor to
8546 * @param t_P1 Type of parameter 1, @param t_P2 Type of parameter 2, @param t_P3 Type of parameter 3, @param t_P4 Type of parameter 4, @param t_P5 Type of parameter 5, @param t_P6 Type of parameter 6, @param t_P7 Type of parameter 7
8547 *
8548 * @sa PY_CLASS_CONSTRUCTOR_EX
8549 */
8550#define PY_CLASS_CONSTRUCTOR_7( t_cppClass, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7 )\
8551 typedef ::lass::meta::TypeTuple< t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7 > \
8552 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_TParams_, t_cppClass));\
8553 PY_CLASS_CONSTRUCTOR(\
8554 t_cppClass, LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_TParams_, t_cppClass)))
8555
8556/** @ingroup ClassDefinition
8557 * @brief Export C++ constructor as Python class constructor with 8 parameters.
8558 *
8559 * Convenience macro for exporting a C++ constructor with exactly 8 parameters.
8560 * Automatically creates the required meta::TypeTuple from the parameter types.
8561 *
8562 * @param t_cppClass C++ class to add the constructor to
8563 * @param t_P1 Type of parameter 1, @param t_P2 Type of parameter 2, @param t_P3 Type of parameter 3, @param t_P4 Type of parameter 4, @param t_P5 Type of parameter 5, @param t_P6 Type of parameter 6, @param t_P7 Type of parameter 7, @param t_P8 Type of parameter 8
8564 *
8565 * @sa PY_CLASS_CONSTRUCTOR_EX
8566 */
8567#define PY_CLASS_CONSTRUCTOR_8( t_cppClass, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8 )\
8568 typedef ::lass::meta::TypeTuple< t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8 > \
8569 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_TParams_, t_cppClass));\
8570 PY_CLASS_CONSTRUCTOR(\
8571 t_cppClass, LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_TParams_, t_cppClass)))
8572
8573/** @ingroup ClassDefinition
8574 * @brief Export C++ constructor as Python class constructor with 9 parameters.
8575 *
8576 * Convenience macro for exporting a C++ constructor with exactly 9 parameters.
8577 * Automatically creates the required meta::TypeTuple from the parameter types.
8578 *
8579 * @param t_cppClass C++ class to add the constructor to
8580 * @param t_P1 Type of parameter 1, @param t_P2 Type of parameter 2, @param t_P3 Type of parameter 3, @param t_P4 Type of parameter 4, @param t_P5 Type of parameter 5, @param t_P6 Type of parameter 6, @param t_P7 Type of parameter 7, @param t_P8 Type of parameter 8, @param t_P9 Type of parameter 9
8581 *
8582 * @sa PY_CLASS_CONSTRUCTOR_EX
8583 */
8584#define PY_CLASS_CONSTRUCTOR_9( t_cppClass, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9 )\
8585 typedef ::lass::meta::TypeTuple< t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9 > \
8586 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_TParams_, t_cppClass));\
8587 PY_CLASS_CONSTRUCTOR(\
8588 t_cppClass, LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_TParams_, t_cppClass)))
8589
8590/** @ingroup ClassDefinition
8591 * @brief Export C++ constructor as Python class constructor with 10 parameters.
8592 *
8593 * Convenience macro for exporting a C++ constructor with exactly 10 parameters.
8594 * Automatically creates the required meta::TypeTuple from the parameter types.
8595 *
8596 * @param t_cppClass C++ class to add the constructor to
8597 * @param t_P1 Type of parameter 1, @param t_P2 Type of parameter 2, @param t_P3 Type of parameter 3, @param t_P4 Type of parameter 4, @param t_P5 Type of parameter 5, @param t_P6 Type of parameter 6, @param t_P7 Type of parameter 7, @param t_P8 Type of parameter 8, @param t_P9 Type of parameter 9, @param t_P10 Type of parameter 10
8598 *
8599 * @sa PY_CLASS_CONSTRUCTOR_EX
8600 */
8601#define PY_CLASS_CONSTRUCTOR_10( t_cppClass, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10 )\
8602 typedef ::lass::meta::TypeTuple< t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10 > \
8603 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_TParams_, t_cppClass));\
8604 PY_CLASS_CONSTRUCTOR(\
8605 t_cppClass, LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_TParams_, t_cppClass)))
8606
8607/** @ingroup ClassDefinition
8608 * @brief Export C++ constructor as Python class constructor with 11 parameters.
8609 *
8610 * Convenience macro for exporting a C++ constructor with exactly 11 parameters.
8611 * Automatically creates the required meta::TypeTuple from the parameter types.
8612 *
8613 * @param t_cppClass C++ class to add the constructor to
8614 * @param t_P1 Type of parameter 1, @param t_P2 Type of parameter 2, @param t_P3 Type of parameter 3, @param t_P4 Type of parameter 4, @param t_P5 Type of parameter 5, @param t_P6 Type of parameter 6, @param t_P7 Type of parameter 7, @param t_P8 Type of parameter 8, @param t_P9 Type of parameter 9, @param t_P10 Type of parameter 10, @param t_P11 Type of parameter 11
8615 *
8616 * @sa PY_CLASS_CONSTRUCTOR_EX
8617 */
8618#define PY_CLASS_CONSTRUCTOR_11( t_cppClass, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11 )\
8619 typedef ::lass::meta::TypeTuple< t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11 > \
8620 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_TParams_, t_cppClass));\
8621 PY_CLASS_CONSTRUCTOR(\
8622 t_cppClass, LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_TParams_, t_cppClass)))
8623
8624/** @ingroup ClassDefinition
8625 * @brief Export C++ constructor as Python class constructor with 12 parameters.
8626 *
8627 * Convenience macro for exporting a C++ constructor with exactly 12 parameters.
8628 * Automatically creates the required meta::TypeTuple from the parameter types.
8629 *
8630 * @param t_cppClass C++ class to add the constructor to
8631 * @param t_P1 Type of parameter 1, @param t_P2 Type of parameter 2, @param t_P3 Type of parameter 3, @param t_P4 Type of parameter 4, @param t_P5 Type of parameter 5, @param t_P6 Type of parameter 6, @param t_P7 Type of parameter 7, @param t_P8 Type of parameter 8, @param t_P9 Type of parameter 9, @param t_P10 Type of parameter 10, @param t_P11 Type of parameter 11, @param t_P12 Type of parameter 12
8632 *
8633 * @sa PY_CLASS_CONSTRUCTOR_EX
8634 */
8635#define PY_CLASS_CONSTRUCTOR_12( t_cppClass, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12 )\
8636 typedef ::lass::meta::TypeTuple< t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12 > \
8637 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_TParams_, t_cppClass));\
8638 PY_CLASS_CONSTRUCTOR(\
8639 t_cppClass, LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_TParams_, t_cppClass)))
8640
8641/** @ingroup ClassDefinition
8642 * @brief Export C++ constructor as Python class constructor with 13 parameters.
8643 *
8644 * Convenience macro for exporting a C++ constructor with exactly 13 parameters.
8645 * Automatically creates the required meta::TypeTuple from the parameter types.
8646 *
8647 * @param t_cppClass C++ class to add the constructor to
8648 * @param t_P1 Type of parameter 1, @param t_P2 Type of parameter 2, @param t_P3 Type of parameter 3, @param t_P4 Type of parameter 4, @param t_P5 Type of parameter 5, @param t_P6 Type of parameter 6, @param t_P7 Type of parameter 7, @param t_P8 Type of parameter 8, @param t_P9 Type of parameter 9, @param t_P10 Type of parameter 10, @param t_P11 Type of parameter 11, @param t_P12 Type of parameter 12, @param t_P13 Type of parameter 13
8649 *
8650 * @sa PY_CLASS_CONSTRUCTOR_EX
8651 */
8652#define PY_CLASS_CONSTRUCTOR_13( t_cppClass, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13 )\
8653 typedef ::lass::meta::TypeTuple< t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13 > \
8654 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_TParams_, t_cppClass));\
8655 PY_CLASS_CONSTRUCTOR(\
8656 t_cppClass, LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_TParams_, t_cppClass)))
8657
8658/** @ingroup ClassDefinition
8659 * @brief Export C++ constructor as Python class constructor with 14 parameters.
8660 *
8661 * Convenience macro for exporting a C++ constructor with exactly 14 parameters.
8662 * Automatically creates the required meta::TypeTuple from the parameter types.
8663 *
8664 * @param t_cppClass C++ class to add the constructor to
8665 * @param t_P1 Type of parameter 1, @param t_P2 Type of parameter 2, @param t_P3 Type of parameter 3, @param t_P4 Type of parameter 4, @param t_P5 Type of parameter 5, @param t_P6 Type of parameter 6, @param t_P7 Type of parameter 7, @param t_P8 Type of parameter 8, @param t_P9 Type of parameter 9, @param t_P10 Type of parameter 10, @param t_P11 Type of parameter 11, @param t_P12 Type of parameter 12, @param t_P13 Type of parameter 13, @param t_P14 Type of parameter 14
8666 *
8667 * @sa PY_CLASS_CONSTRUCTOR_EX
8668 */
8669#define PY_CLASS_CONSTRUCTOR_14( t_cppClass, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14 )\
8670 typedef ::lass::meta::TypeTuple< t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14 > \
8671 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_TParams_, t_cppClass));\
8672 PY_CLASS_CONSTRUCTOR(\
8673 t_cppClass, LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_TParams_, t_cppClass)))
8674
8675/** @ingroup ClassDefinition
8676 * @brief Export C++ constructor as Python class constructor with 15 parameters.
8677 *
8678 * Convenience macro for exporting a C++ constructor with exactly 15 parameters.
8679 * Automatically creates the required meta::TypeTuple from the parameter types.
8680 *
8681 * @param t_cppClass C++ class to add the constructor to
8682 * @param t_P1 Type of parameter 1, @param t_P2 Type of parameter 2, @param t_P3 Type of parameter 3, @param t_P4 Type of parameter 4, @param t_P5 Type of parameter 5, @param t_P6 Type of parameter 6, @param t_P7 Type of parameter 7, @param t_P8 Type of parameter 8, @param t_P9 Type of parameter 9, @param t_P10 Type of parameter 10, @param t_P11 Type of parameter 11, @param t_P12 Type of parameter 12, @param t_P13 Type of parameter 13, @param t_P14 Type of parameter 14, @param t_P15 Type of parameter 15
8683 *
8684 * @sa PY_CLASS_CONSTRUCTOR_EX
8685 */
8686#define PY_CLASS_CONSTRUCTOR_15( t_cppClass, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15 )\
8687 typedef ::lass::meta::TypeTuple< t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15 > \
8688 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_TParams_, t_cppClass));\
8689 PY_CLASS_CONSTRUCTOR(\
8690 t_cppClass, LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_TParams_, t_cppClass)))
8691
8692
8693/** @} */
8694
8695
8696/** @addtogroup ClassDefinition
8697 * @name Free Function Constructor Export Macros
8698 *
8699 * Export factory functions as Python class constructors. These macros allow C++
8700 * functions that return instances of a class to be used as Python constructors.
8701 * This is useful when you need special construction logic or when the actual
8702 * constructor is not accessible from Python.
8703 *
8704 * These factory function constructors appear as regular constructors to Python
8705 * code, but are implemented using C++ functions rather than actual constructors.
8706 * The functions must return an instance of the target class.
8707 *
8708 * @{
8709 */
8710
8711/** @ingroup ClassDefinition
8712 * @brief Export C++ factory function as Python constructor with full control.
8713 *
8714 * The most detailed macro for exporting factory functions as constructors. Allows
8715 * manual specification of all parameters including the dispatcher name for
8716 * maximum control over the export process.
8717 *
8718 * @param t_cppClass
8719 * the C++ class you want to add the constructor method to.
8720 * @param f_cppFunction
8721 * the full name of the C++ function that implements the constructor method
8722 * if the return argument is not of type t_cppClass the compiler will flag this as an error.
8723 * This is a design decision to protect against runtime surprises.
8724 * @param i_dispatcher
8725 * A unique name of the static C++ dispatcher function to be generated. This name will be
8726 * used for the names of automatic generated variables and functions and should be unique
8727 * per exported C++ class/method pair.
8728 * @remark No documentation can be provided for constructors, this is a limitation of Python. Although
8729 * the automatic function prototype matching could resolve without specifying the number of arguments
8730 * of the constructor like function for the sake of uniformity with PY_CLASS_CONSTRUCTOR the same
8731 * format of macro is employed. This also means that there is no need for a QUALIFIED version.
8732 *
8733 * @code
8734 * // foo.h
8735 * class Foo
8736 * {
8737 * public:
8738 * };
8739 *
8740 * Foo spam(int iB);
8741 * Foo spamming(int iB, int iC);
8742 *
8743 * // foo.cpp
8744 * PY_DECLARE_CLASS(Foo)
8745 * PY_CLASS_FREE_CONSTRUCTOR_1(Foo, spam, int )
8746 * PY_CLASS_FREE_CONSTRUCTOR_2(Foo, spamming, int, int )
8747 * @endcode
8748 */
8749#define PY_CLASS_FREE_CONSTRUCTOR_EX( t_cppClass, f_cppFunction, t_params, i_dispatcher )\
8750 static newfunc LASS_CONCATENATE(i_dispatcher, _overloadChain) = 0;\
8751 extern "C" LASS_DLL_LOCAL PyObject* i_dispatcher( PyTypeObject *iSubtype, PyObject *iArgs, PyObject *iKwds )\
8752 {\
8753 if (LASS_CONCATENATE(i_dispatcher, _overloadChain))\
8754 {\
8755 PyObject* result = LASS_CONCATENATE(i_dispatcher, _overloadChain)(iSubtype, iArgs, iKwds);\
8756 if (!(PyErr_Occurred() && PyErr_ExceptionMatches(PyExc_TypeError)))\
8757 {\
8758 return result;\
8759 }\
8760 PyErr_Clear();\
8761 Py_XDECREF(result);\
8762 }\
8763 return ::lass::python::impl::callFunction( iArgs, f_cppFunction );\
8764 }\
8765 LASS_EXECUTE_BEFORE_MAIN_EX(LASS_CONCATENATE(i_dispatcher, _executeBeforeMain), \
8766 t_cppClass::_lassPyClassDef.addConstructor(\
8767 i_dispatcher, \
8768 LASS_CONCATENATE(i_dispatcher, _overloadChain) \
8769 ); \
8770 )
8771/** @ingroup ClassDefinition
8772 * @brief Convenience wrapper for PY_CLASS_FREE_CONSTRUCTOR_EX.
8773 *
8774 * Automatically generates a unique dispatcher name.
8775 *
8776 * @param i_cppClass C++ class to add the constructor to
8777 * @param f_cppFunction Factory function that creates the class instance
8778 * @param t_params meta::TypeTuple containing parameter types
8779 *
8780 * @sa PY_CLASS_FREE_CONSTRUCTOR_EX
8781 */
8782#define PY_CLASS_FREE_CONSTRUCTOR( i_cppClass, f_cppFunction, t_params )\
8783 PY_CLASS_FREE_CONSTRUCTOR_EX(i_cppClass, f_cppFunction, t_params,\
8784 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_constructor_, i_cppClass)))
8785
8786/** @ingroup ClassDefinition
8787 * @brief Export C++ factory function as Python constructor with 0 parameters.
8788 *
8789 * Convenience macro for exporting a factory function that takes no parameters.
8790 *
8791 * @param t_cppClass C++ class to add the constructor to
8792 * @param f_cppFunction Factory function that creates the class instance
8793 *
8794 * @sa PY_CLASS_FREE_CONSTRUCTOR_EX
8795 */
8796#define PY_CLASS_FREE_CONSTRUCTOR_0( t_cppClass, f_cppFunction)\
8797 PY_CLASS_FREE_CONSTRUCTOR( t_cppClass, f_cppFunction, ::lass::meta::TypeTuple<> )
8798
8799/** @ingroup ClassDefinition
8800 * @brief Export C++ factory function as Python constructor with 1 parameters.
8801 *
8802 * Convenience macro for exporting a factory function with exactly 1 parameters.
8803 * Automatically creates the required meta::TypeTuple from the parameter types.
8804 *
8805 * @param t_cppClass C++ class to add the constructor to
8806 * @param f_cppFunction Factory function that creates the class instance
8807 * @param t_P1 Type of parameter 1
8808 *
8809 * @sa PY_CLASS_FREE_CONSTRUCTOR_EX
8810 */
8811#define PY_CLASS_FREE_CONSTRUCTOR_1( t_cppClass, f_cppFunction, t_P1 )\
8812 typedef ::lass::meta::TypeTuple< t_P1 > \
8813 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_TParams_, t_cppClass));\
8814 PY_CLASS_FREE_CONSTRUCTOR(\
8815 t_cppClass, f_cppFunction, LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_TParams_, t_cppClass)))
8816
8817/** @ingroup ClassDefinition
8818 * @brief Export C++ factory function as Python constructor with 2 parameters.
8819 *
8820 * Convenience macro for exporting a factory function with exactly 2 parameters.
8821 * Automatically creates the required meta::TypeTuple from the parameter types.
8822 *
8823 * @param t_cppClass C++ class to add the constructor to
8824 * @param f_cppFunction Factory function that creates the class instance
8825 * @param t_P1 Type of parameter 1, @param t_P2 Type of parameter 2
8826 *
8827 * @sa PY_CLASS_FREE_CONSTRUCTOR_EX
8828 */
8829#define PY_CLASS_FREE_CONSTRUCTOR_2( t_cppClass, f_cppFunction, t_P1, t_P2 )\
8830 typedef ::lass::meta::TypeTuple< t_P1, t_P2 > \
8831 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_TParams_, t_cppClass));\
8832 PY_CLASS_FREE_CONSTRUCTOR(\
8833 t_cppClass, f_cppFunction, LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_TParams_, t_cppClass)))
8834
8835/** @ingroup ClassDefinition
8836 * @brief Export C++ factory function as Python constructor with 3 parameters.
8837 *
8838 * Convenience macro for exporting a factory function with exactly 3 parameters.
8839 * Automatically creates the required meta::TypeTuple from the parameter types.
8840 *
8841 * @param t_cppClass C++ class to add the constructor to
8842 * @param f_cppFunction Factory function that creates the class instance
8843 * @param t_P1 Type of parameter 1, @param t_P2 Type of parameter 2, @param t_P3 Type of parameter 3
8844 *
8845 * @sa PY_CLASS_FREE_CONSTRUCTOR_EX
8846 */
8847#define PY_CLASS_FREE_CONSTRUCTOR_3( t_cppClass, f_cppFunction, t_P1, t_P2, t_P3 )\
8848 typedef ::lass::meta::TypeTuple< t_P1, t_P2, t_P3 > \
8849 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_TParams_, t_cppClass));\
8850 PY_CLASS_FREE_CONSTRUCTOR(\
8851 t_cppClass, f_cppFunction, LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_TParams_, t_cppClass)))
8852
8853/** @ingroup ClassDefinition
8854 * @brief Export C++ factory function as Python constructor with 4 parameters.
8855 *
8856 * Convenience macro for exporting a factory function with exactly 4 parameters.
8857 * Automatically creates the required meta::TypeTuple from the parameter types.
8858 *
8859 * @param t_cppClass C++ class to add the constructor to
8860 * @param f_cppFunction Factory function that creates the class instance
8861 * @param t_P1 Type of parameter 1, @param t_P2 Type of parameter 2, @param t_P3 Type of parameter 3, @param t_P4 Type of parameter 4
8862 *
8863 * @sa PY_CLASS_FREE_CONSTRUCTOR_EX
8864 */
8865#define PY_CLASS_FREE_CONSTRUCTOR_4( t_cppClass, f_cppFunction, t_P1, t_P2, t_P3, t_P4 )\
8866 typedef ::lass::meta::TypeTuple< t_P1, t_P2, t_P3, t_P4 > \
8867 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_TParams_, t_cppClass));\
8868 PY_CLASS_FREE_CONSTRUCTOR(\
8869 t_cppClass, f_cppFunction, LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_TParams_, t_cppClass)))
8870
8871/** @ingroup ClassDefinition
8872 * @brief Export C++ factory function as Python constructor with 5 parameters.
8873 *
8874 * Convenience macro for exporting a factory function with exactly 5 parameters.
8875 * Automatically creates the required meta::TypeTuple from the parameter types.
8876 *
8877 * @param t_cppClass C++ class to add the constructor to
8878 * @param f_cppFunction Factory function that creates the class instance
8879 * @param t_P1 Type of parameter 1, @param t_P2 Type of parameter 2, @param t_P3 Type of parameter 3, @param t_P4 Type of parameter 4, @param t_P5 Type of parameter 5
8880 *
8881 * @sa PY_CLASS_FREE_CONSTRUCTOR_EX
8882 */
8883#define PY_CLASS_FREE_CONSTRUCTOR_5( t_cppClass, f_cppFunction, t_P1, t_P2, t_P3, t_P4, t_P5 )\
8884 typedef ::lass::meta::TypeTuple< t_P1, t_P2, t_P3, t_P4, t_P5 > \
8885 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_TParams_, t_cppClass));\
8886 PY_CLASS_FREE_CONSTRUCTOR(\
8887 t_cppClass, f_cppFunction, LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_TParams_, t_cppClass)))
8888
8889/** @ingroup ClassDefinition
8890 * @brief Export C++ factory function as Python constructor with 6 parameters.
8891 *
8892 * Convenience macro for exporting a factory function with exactly 6 parameters.
8893 * Automatically creates the required meta::TypeTuple from the parameter types.
8894 *
8895 * @param t_cppClass C++ class to add the constructor to
8896 * @param f_cppFunction Factory function that creates the class instance
8897 * @param t_P1 Type of parameter 1, @param t_P2 Type of parameter 2, @param t_P3 Type of parameter 3, @param t_P4 Type of parameter 4, @param t_P5 Type of parameter 5, @param t_P6 Type of parameter 6
8898 *
8899 * @sa PY_CLASS_FREE_CONSTRUCTOR_EX
8900 */
8901#define PY_CLASS_FREE_CONSTRUCTOR_6( t_cppClass, f_cppFunction, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6 )\
8902 typedef ::lass::meta::TypeTuple< t_P1, t_P2, t_P3, t_P4, t_P5, t_P6 > \
8903 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_TParams_, t_cppClass));\
8904 PY_CLASS_FREE_CONSTRUCTOR(\
8905 t_cppClass, f_cppFunction, LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_TParams_, t_cppClass)))
8906
8907/** @ingroup ClassDefinition
8908 * @brief Export C++ factory function as Python constructor with 7 parameters.
8909 *
8910 * Convenience macro for exporting a factory function with exactly 7 parameters.
8911 * Automatically creates the required meta::TypeTuple from the parameter types.
8912 *
8913 * @param t_cppClass C++ class to add the constructor to
8914 * @param f_cppFunction Factory function that creates the class instance
8915 * @param t_P1 Type of parameter 1, @param t_P2 Type of parameter 2, @param t_P3 Type of parameter 3, @param t_P4 Type of parameter 4, @param t_P5 Type of parameter 5, @param t_P6 Type of parameter 6, @param t_P7 Type of parameter 7
8916 *
8917 * @sa PY_CLASS_FREE_CONSTRUCTOR_EX
8918 */
8919#define PY_CLASS_FREE_CONSTRUCTOR_7( t_cppClass, f_cppFunction, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7 )\
8920 typedef ::lass::meta::TypeTuple< t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7 > \
8921 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_TParams_, t_cppClass));\
8922 PY_CLASS_FREE_CONSTRUCTOR(\
8923 t_cppClass, f_cppFunction, LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_TParams_, t_cppClass)))
8924
8925/** @ingroup ClassDefinition
8926 * @brief Export C++ factory function as Python constructor with 8 parameters.
8927 *
8928 * Convenience macro for exporting a factory function with exactly 8 parameters.
8929 * Automatically creates the required meta::TypeTuple from the parameter types.
8930 *
8931 * @param t_cppClass C++ class to add the constructor to
8932 * @param f_cppFunction Factory function that creates the class instance
8933 * @param t_P1 Type of parameter 1, @param t_P2 Type of parameter 2, @param t_P3 Type of parameter 3, @param t_P4 Type of parameter 4, @param t_P5 Type of parameter 5, @param t_P6 Type of parameter 6, @param t_P7 Type of parameter 7, @param t_P8 Type of parameter 8
8934 *
8935 * @sa PY_CLASS_FREE_CONSTRUCTOR_EX
8936 */
8937#define PY_CLASS_FREE_CONSTRUCTOR_8( t_cppClass, f_cppFunction, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8 )\
8938 typedef ::lass::meta::TypeTuple< t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8 > \
8939 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_TParams_, t_cppClass));\
8940 PY_CLASS_FREE_CONSTRUCTOR(\
8941 t_cppClass, f_cppFunction, LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_TParams_, t_cppClass)))
8942
8943/** @ingroup ClassDefinition
8944 * @brief Export C++ factory function as Python constructor with 9 parameters.
8945 *
8946 * Convenience macro for exporting a factory function with exactly 9 parameters.
8947 * Automatically creates the required meta::TypeTuple from the parameter types.
8948 *
8949 * @param t_cppClass C++ class to add the constructor to
8950 * @param f_cppFunction Factory function that creates the class instance
8951 * @param t_P1 Type of parameter 1, @param t_P2 Type of parameter 2, @param t_P3 Type of parameter 3, @param t_P4 Type of parameter 4, @param t_P5 Type of parameter 5, @param t_P6 Type of parameter 6, @param t_P7 Type of parameter 7, @param t_P8 Type of parameter 8, @param t_P9 Type of parameter 9
8952 *
8953 * @sa PY_CLASS_FREE_CONSTRUCTOR_EX
8954 */
8955#define PY_CLASS_FREE_CONSTRUCTOR_9( t_cppClass, f_cppFunction, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9 )\
8956 typedef ::lass::meta::TypeTuple< t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9 > \
8957 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_TParams_, t_cppClass));\
8958 PY_CLASS_FREE_CONSTRUCTOR(\
8959 t_cppClass, f_cppFunction, LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_TParams_, t_cppClass)))
8960
8961/** @ingroup ClassDefinition
8962 * @brief Export C++ factory function as Python constructor with 10 parameters.
8963 *
8964 * Convenience macro for exporting a factory function with exactly 10 parameters.
8965 * Automatically creates the required meta::TypeTuple from the parameter types.
8966 *
8967 * @param t_cppClass C++ class to add the constructor to
8968 * @param f_cppFunction Factory function that creates the class instance
8969 * @param t_P1 Type of parameter 1, @param t_P2 Type of parameter 2, @param t_P3 Type of parameter 3, @param t_P4 Type of parameter 4, @param t_P5 Type of parameter 5, @param t_P6 Type of parameter 6, @param t_P7 Type of parameter 7, @param t_P8 Type of parameter 8, @param t_P9 Type of parameter 9, @param t_P10 Type of parameter 10
8970 *
8971 * @sa PY_CLASS_FREE_CONSTRUCTOR_EX
8972 */
8973#define PY_CLASS_FREE_CONSTRUCTOR_10( t_cppClass, f_cppFunction, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10 )\
8974 typedef ::lass::meta::TypeTuple< t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10 > \
8975 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_TParams_, t_cppClass));\
8976 PY_CLASS_FREE_CONSTRUCTOR(\
8977 t_cppClass, f_cppFunction, LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_TParams_, t_cppClass)))
8978
8979/** @ingroup ClassDefinition
8980 * @brief Export C++ factory function as Python constructor with 11 parameters.
8981 *
8982 * Convenience macro for exporting a factory function with exactly 11 parameters.
8983 * Automatically creates the required meta::TypeTuple from the parameter types.
8984 *
8985 * @param t_cppClass C++ class to add the constructor to
8986 * @param f_cppFunction Factory function that creates the class instance
8987 * @param t_P1 Type of parameter 1, @param t_P2 Type of parameter 2, @param t_P3 Type of parameter 3, @param t_P4 Type of parameter 4, @param t_P5 Type of parameter 5, @param t_P6 Type of parameter 6, @param t_P7 Type of parameter 7, @param t_P8 Type of parameter 8, @param t_P9 Type of parameter 9, @param t_P10 Type of parameter 10, @param t_P11 Type of parameter 11
8988 *
8989 * @sa PY_CLASS_FREE_CONSTRUCTOR_EX
8990 */
8991#define PY_CLASS_FREE_CONSTRUCTOR_11( t_cppClass, f_cppFunction, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11 )\
8992 typedef ::lass::meta::TypeTuple< t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11 > \
8993 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_TParams_, t_cppClass));\
8994 PY_CLASS_FREE_CONSTRUCTOR(\
8995 t_cppClass, f_cppFunction, LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_TParams_, t_cppClass)))
8996
8997/** @ingroup ClassDefinition
8998 * @brief Export C++ factory function as Python constructor with 12 parameters.
8999 *
9000 * Convenience macro for exporting a factory function with exactly 12 parameters.
9001 * Automatically creates the required meta::TypeTuple from the parameter types.
9002 *
9003 * @param t_cppClass C++ class to add the constructor to
9004 * @param f_cppFunction Factory function that creates the class instance
9005 * @param t_P1 Type of parameter 1, @param t_P2 Type of parameter 2, @param t_P3 Type of parameter 3, @param t_P4 Type of parameter 4, @param t_P5 Type of parameter 5, @param t_P6 Type of parameter 6, @param t_P7 Type of parameter 7, @param t_P8 Type of parameter 8, @param t_P9 Type of parameter 9, @param t_P10 Type of parameter 10, @param t_P11 Type of parameter 11, @param t_P12 Type of parameter 12
9006 *
9007 * @sa PY_CLASS_FREE_CONSTRUCTOR_EX
9008 */
9009#define PY_CLASS_FREE_CONSTRUCTOR_12( t_cppClass, f_cppFunction, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12 )\
9010 typedef ::lass::meta::TypeTuple< t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12 > \
9011 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_TParams_, t_cppClass));\
9012 PY_CLASS_FREE_CONSTRUCTOR(\
9013 t_cppClass, f_cppFunction, LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_TParams_, t_cppClass)))
9014
9015/** @ingroup ClassDefinition
9016 * @brief Export C++ factory function as Python constructor with 13 parameters.
9017 *
9018 * Convenience macro for exporting a factory function with exactly 13 parameters.
9019 * Automatically creates the required meta::TypeTuple from the parameter types.
9020 *
9021 * @param t_cppClass C++ class to add the constructor to
9022 * @param f_cppFunction Factory function that creates the class instance
9023 * @param t_P1 Type of parameter 1, @param t_P2 Type of parameter 2, @param t_P3 Type of parameter 3, @param t_P4 Type of parameter 4, @param t_P5 Type of parameter 5, @param t_P6 Type of parameter 6, @param t_P7 Type of parameter 7, @param t_P8 Type of parameter 8, @param t_P9 Type of parameter 9, @param t_P10 Type of parameter 10, @param t_P11 Type of parameter 11, @param t_P12 Type of parameter 12, @param t_P13 Type of parameter 13
9024 *
9025 * @sa PY_CLASS_FREE_CONSTRUCTOR_EX
9026 */
9027#define PY_CLASS_FREE_CONSTRUCTOR_13( t_cppClass, f_cppFunction, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13 )\
9028 typedef ::lass::meta::TypeTuple< t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13 > \
9029 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_TParams_, t_cppClass));\
9030 PY_CLASS_FREE_CONSTRUCTOR(\
9031 t_cppClass, f_cppFunction, LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_TParams_, t_cppClass)))
9032
9033/** @ingroup ClassDefinition
9034 * @brief Export C++ factory function as Python constructor with 14 parameters.
9035 *
9036 * Convenience macro for exporting a factory function with exactly 14 parameters.
9037 * Automatically creates the required meta::TypeTuple from the parameter types.
9038 *
9039 * @param t_cppClass C++ class to add the constructor to
9040 * @param f_cppFunction Factory function that creates the class instance
9041 * @param t_P1 Type of parameter 1, @param t_P2 Type of parameter 2, @param t_P3 Type of parameter 3, @param t_P4 Type of parameter 4, @param t_P5 Type of parameter 5, @param t_P6 Type of parameter 6, @param t_P7 Type of parameter 7, @param t_P8 Type of parameter 8, @param t_P9 Type of parameter 9, @param t_P10 Type of parameter 10, @param t_P11 Type of parameter 11, @param t_P12 Type of parameter 12, @param t_P13 Type of parameter 13, @param t_P14 Type of parameter 14
9042 *
9043 * @sa PY_CLASS_FREE_CONSTRUCTOR_EX
9044 */
9045#define PY_CLASS_FREE_CONSTRUCTOR_14( t_cppClass, f_cppFunction, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14 )\
9046 typedef ::lass::meta::TypeTuple< t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14 > \
9047 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_TParams_, t_cppClass));\
9048 PY_CLASS_FREE_CONSTRUCTOR(\
9049 t_cppClass, f_cppFunction, LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_TParams_, t_cppClass)))
9050
9051/** @ingroup ClassDefinition
9052 * @brief Export C++ factory function as Python constructor with 15 parameters.
9053 *
9054 * Convenience macro for exporting a factory function with exactly 15 parameters.
9055 * Automatically creates the required meta::TypeTuple from the parameter types.
9056 *
9057 * @param t_cppClass C++ class to add the constructor to
9058 * @param f_cppFunction Factory function that creates the class instance
9059 * @param t_P1 Type of parameter 1, @param t_P2 Type of parameter 2, @param t_P3 Type of parameter 3, @param t_P4 Type of parameter 4, @param t_P5 Type of parameter 5, @param t_P6 Type of parameter 6, @param t_P7 Type of parameter 7, @param t_P8 Type of parameter 8, @param t_P9 Type of parameter 9, @param t_P10 Type of parameter 10, @param t_P11 Type of parameter 11, @param t_P12 Type of parameter 12, @param t_P13 Type of parameter 13, @param t_P14 Type of parameter 14, @param t_P15 Type of parameter 15
9060 *
9061 * @sa PY_CLASS_FREE_CONSTRUCTOR_EX
9062 */
9063#define PY_CLASS_FREE_CONSTRUCTOR_15( t_cppClass, f_cppFunction, t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15 )\
9064 typedef ::lass::meta::TypeTuple< t_P1, t_P2, t_P3, t_P4, t_P5, t_P6, t_P7, t_P8, t_P9, t_P10, t_P11, t_P12, t_P13, t_P14, t_P15 > \
9065 LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_TParams_, t_cppClass));\
9066 PY_CLASS_FREE_CONSTRUCTOR(\
9067 t_cppClass, f_cppFunction, LASS_UNIQUENAME(LASS_CONCATENATE(lassPyImpl_TParams_, t_cppClass)))
9068
9069
9070/** @} */
9071
9072
9073
9074// --- internals -----------------------------------------------------------------------------------
9075
9076/** @internal
9077 */
9078#define PY_CLASS_METHOD_IMPL(t_cppClass, i_cppMethod, s_methodName, s_doc, i_dispatcher, i_caller)\
9079 static ::lass::python::impl::OverloadLink LASS_CONCATENATE(i_dispatcher, _overloadChain);\
9080 extern "C" LASS_DLL_LOCAL PyObject* i_dispatcher(PyObject* iSelf, PyObject* iArgs)\
9081 {\
9082 PyObject* result = 0;\
9083 if (LASS_CONCATENATE(i_dispatcher, _overloadChain)(iSelf, iArgs, result))\
9084 {\
9085 return result;\
9086 }\
9087 typedef ::lass::python::impl::ShadowTraits< t_cppClass > LASS_UNUSED(TShadowTraits);\
9088 typedef TShadowTraits::TCppClass LASS_UNUSED(TCppClass);\
9089 LASS_ASSERT(result == 0);\
9090 return i_caller(iArgs, iSelf, i_cppMethod);\
9091 }\
9092 LASS_EXECUTE_BEFORE_MAIN_EX(LASS_CONCATENATE(i_dispatcher, _executeBeforeMain),\
9093 t_cppClass ::_lassPyClassDef.addMethod(\
9094 s_methodName, s_doc, \
9095 ::lass::python::impl::FunctionTypeDispatcher< SPECIAL_SLOT_TYPE(s_methodName) , i_dispatcher>::fun,\
9096 LASS_CONCATENATE(i_dispatcher, _overloadChain));\
9097 )
9098#endif
9099
9100// EOF