81 lines
2.8 KiB
Python
81 lines
2.8 KiB
Python
# docstrings not neede here (the type handler doubleerfaces are fully
|
|
# documented in base.py) pylint: disable-msg=C0111
|
|
|
|
from base import ReturnValue, Parameter, \
|
|
ReverseWrapperBase, ForwardWrapperBase
|
|
|
|
|
|
class DoubleParam(Parameter):
|
|
|
|
DIRECTIONS = [Parameter.DIRECTION_IN]
|
|
CTYPES = ['double']
|
|
|
|
def convert_c_to_python(self, wrapper):
|
|
assert isinstance(wrapper, ReverseWrapperBase)
|
|
wrapper.build_params.add_parameter('d', [self.name])
|
|
|
|
def convert_python_to_c(self, wrapper):
|
|
assert isinstance(wrapper, ForwardWrapperBase)
|
|
name = wrapper.declarations.declare_variable(self.ctype, self.name)
|
|
wrapper.parse_params.add_parameter('d', ['&'+name])
|
|
wrapper.call_params.append(name)
|
|
|
|
|
|
class DoubleReturn(ReturnValue):
|
|
|
|
CTYPES = ['double']
|
|
|
|
def get_c_error_return(self):
|
|
return "return 0;"
|
|
|
|
def convert_python_to_c(self, wrapper):
|
|
wrapper.parse_params.add_parameter("d", ["&retval"], prepend=True)
|
|
|
|
def convert_c_to_python(self, wrapper):
|
|
wrapper.build_params.add_parameter("d", ["retval"], prepend=True)
|
|
|
|
|
|
class DoublePtrParam(Parameter):
|
|
|
|
DIRECTIONS = [Parameter.DIRECTION_IN, Parameter.DIRECTION_OUT,
|
|
Parameter.DIRECTION_IN|Parameter.DIRECTION_OUT]
|
|
CTYPES = ['double*']
|
|
|
|
def convert_c_to_python(self, wrapper):
|
|
if self.direction & self.DIRECTION_IN:
|
|
wrapper.build_params.add_parameter('d', ['*'+self.name])
|
|
if self.direction & self.DIRECTION_OUT:
|
|
wrapper.parse_params.add_parameter("d", [self.name])
|
|
|
|
def convert_python_to_c(self, wrapper):
|
|
assert self.ctype == 'double*'
|
|
name = wrapper.declarations.declare_variable(self.ctype[:-1], self.name)
|
|
wrapper.call_params.append('&'+name)
|
|
if self.direction & self.DIRECTION_IN:
|
|
wrapper.parse_params.add_parameter('d', ['&'+name])
|
|
if self.direction & self.DIRECTION_OUT:
|
|
wrapper.build_params.add_parameter("d", [name])
|
|
|
|
|
|
|
|
class DoubleRefParam(Parameter):
|
|
|
|
DIRECTIONS = [Parameter.DIRECTION_IN, Parameter.DIRECTION_OUT,
|
|
Parameter.DIRECTION_IN|Parameter.DIRECTION_OUT]
|
|
CTYPES = ['double&']
|
|
|
|
def convert_c_to_python(self, wrapper):
|
|
if self.direction & self.DIRECTION_IN:
|
|
wrapper.build_params.add_parameter('d', [self.name])
|
|
if self.direction & self.DIRECTION_OUT:
|
|
wrapper.parse_params.add_parameter("d", [self.name])
|
|
|
|
def convert_python_to_c(self, wrapper):
|
|
assert self.ctype == 'double&'
|
|
name = wrapper.declarations.declare_variable(self.ctype[:-1], self.name)
|
|
wrapper.call_params.append(name)
|
|
if self.direction & self.DIRECTION_IN:
|
|
wrapper.parse_params.add_parameter('d', ['&'+name])
|
|
if self.direction & self.DIRECTION_OUT:
|
|
wrapper.build_params.add_parameter("d", [name])
|