Files
pybindgen/pybindgen/typehandlers/doubletype.py
T
Gustavo J. A. M. Carneiro bf2fb3313c bool, double
2007-05-31 00:17:28 +01:00

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])