Implement parameter default value for CppClass parameters
This commit is contained in:
1 parent
49b0a6a26b
commit
eb8d2551f6
1 file changed
+16
-8
+16
-8
@@ -1368,7 +1368,7 @@ class CppClassParameterBase(Parameter):
|
||||
cpp_class = CppClass('dummy') # CppClass instance
|
||||
DIRECTIONS = [Parameter.DIRECTION_IN]
|
||||
|
||||
def __init__(self, ctype, name, direction=Parameter.DIRECTION_IN, is_const=False):
|
||||
def __init__(self, ctype, name, direction=Parameter.DIRECTION_IN, is_const=False, default_value=None):
|
||||
"""
|
||||
ctype -- C type, normally 'MyClass*'
|
||||
name -- parameter name
|
||||
@@ -1376,7 +1376,7 @@ class CppClassParameterBase(Parameter):
|
||||
if ctype == self.cpp_class.name:
|
||||
ctype = self.cpp_class.full_name
|
||||
super(CppClassParameterBase, self).__init__(
|
||||
ctype, name, direction, is_const)
|
||||
ctype, name, direction, is_const, default_value)
|
||||
|
||||
## name of the PyFoo * variable used in parameter parsing
|
||||
self.py_name = None
|
||||
@@ -1416,12 +1416,20 @@ class CppClassParameter(CppClassParameterBase):
|
||||
else:
|
||||
implicit_conversion_sources = self.cpp_class.get_all_implicit_conversions()
|
||||
if not implicit_conversion_sources:
|
||||
self.py_name = wrapper.declarations.declare_variable(
|
||||
self.cpp_class.pystruct+'*', self.name)
|
||||
wrapper.parse_params.add_parameter(
|
||||
'O!', ['&'+self.cpp_class.pytypestruct, '&'+self.py_name], self.name)
|
||||
wrapper.call_params.append(
|
||||
'*((%s *) %s)->obj' % (self.cpp_class.pystruct, self.py_name))
|
||||
if self.default_value:
|
||||
self.py_name = wrapper.declarations.declare_variable(
|
||||
self.cpp_class.pystruct+'*', self.name, 'NULL')
|
||||
wrapper.parse_params.add_parameter(
|
||||
'O!', ['&'+self.cpp_class.pytypestruct, '&'+self.py_name], self.name, optional=True)
|
||||
wrapper.call_params.append(
|
||||
'(%s ? (*((%s *) %s)->obj) : %s)' % (self.py_name, self.cpp_class.pystruct, self.py_name, self.default_value))
|
||||
else:
|
||||
self.py_name = wrapper.declarations.declare_variable(
|
||||
self.cpp_class.pystruct+'*', self.name)
|
||||
wrapper.parse_params.add_parameter(
|
||||
'O!', ['&'+self.cpp_class.pytypestruct, '&'+self.py_name], self.name)
|
||||
wrapper.call_params.append(
|
||||
'*((%s *) %s)->obj' % (self.cpp_class.pystruct, self.py_name))
|
||||
else:
|
||||
self.py_name = wrapper.declarations.declare_variable(
|
||||
'PyObject*', self.name)
|
||||
|
||||
Reference in new issue
Block a user