From dafcb0712ffbb78cb29fe1d53612f101c5aa49e0 Mon Sep 17 00:00:00 2001 From: "Gustavo J. A. M. Carneiro" Date: Mon, 24 Sep 2007 14:12:03 +0100 Subject: [PATCH] Patch from Mark Lee (Bug #144360): add support for more basic types (unsigned int, char, string) --- pybindgen/typehandlers/inttype.py | 30 +++++++++++++++++++ pybindgen/typehandlers/stringtype.py | 43 ++++++++++++++++++++++++++++ 2 files changed, 73 insertions(+) diff --git a/pybindgen/typehandlers/inttype.py b/pybindgen/typehandlers/inttype.py index d97dcf2..bd3d325 100644 --- a/pybindgen/typehandlers/inttype.py +++ b/pybindgen/typehandlers/inttype.py @@ -21,6 +21,22 @@ class IntParam(Parameter): wrapper.call_params.append(name) +class UnsignedIntParam(Parameter): + + DIRECTIONS = [Parameter.DIRECTION_IN] + CTYPES = ['unsigned int'] + + def convert_c_to_python(self, wrapper): + assert isinstance(wrapper, ReverseWrapperBase) + wrapper.build_params.add_parameter('I', [self.value]) + + 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('I', ['&'+name], self.name) + wrapper.call_params.append(name) + + class IntReturn(ReturnValue): CTYPES = ['int'] @@ -35,6 +51,20 @@ class IntReturn(ReturnValue): wrapper.build_params.add_parameter("i", [self.value], prepend=True) +class UnsignedIntReturn(ReturnValue): + + CTYPES = ['unsigned int'] + + def get_c_error_return(self): + return "return 0;" + + def convert_python_to_c(self, wrapper): + wrapper.parse_params.add_parameter("I", ["&"+self.value], prepend=True) + + def convert_c_to_python(self, wrapper): + wrapper.build_params.add_parameter("I", [self.value], prepend=True) + + class IntPtrParam(Parameter): DIRECTIONS = [Parameter.DIRECTION_IN, Parameter.DIRECTION_OUT, diff --git a/pybindgen/typehandlers/stringtype.py b/pybindgen/typehandlers/stringtype.py index 2e52d44..f8333d8 100644 --- a/pybindgen/typehandlers/stringtype.py +++ b/pybindgen/typehandlers/stringtype.py @@ -20,6 +20,22 @@ class StringParam(Parameter): wrapper.call_params.append(name) +class CharParam(Parameter): + + DIRECTIONS = [Parameter.DIRECTION_IN] + CTYPES = ['char'] + + def convert_c_to_python(self, wrapper): + assert isinstance(wrapper, ReverseWrapperBase) + wrapper.build_params.add_parameter('c', [self.value]) + + 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('c', ['&'+name], self.value) + wrapper.call_params.append(name) + + class StdStringParam(Parameter): DIRECTIONS = [Parameter.DIRECTION_IN] @@ -87,6 +103,33 @@ class StdStringRefParam(Parameter): wrapper.build_params.add_parameter("s#", [name_std+'.c_str()', name_std+'.size()']) +class CharReturn(ReturnValue): + + CTYPES = ['char'] + + def get_c_error_return(self): + return "return '\\0';" + + def convert_python_to_c(self, wrapper): + name = wrapper.declarations.declare_variable("char*", "retval_ptr") + wrapper.parse_params.add_parameter("c", ['&'+name], self.value) + + def convert_c_to_python(self, wrapper): + wrapper.build_params.add_parameter("c", [self.value]) + + +class StringReturn(ReturnValue): + + CTYPES = ['char*', 'const char*'] + + def convert_python_to_c(self, wrapper): + name = wrapper.declarations.declare_variable(self.ctype, "retval_ptr") + wrapper.parse_params.add_parameter("s", ['&'+name], self.value) + + def convert_c_to_python(self, wrapper): + wrapper.build_params.add_parameter("s", [self.value]) + + class StdStringReturn(ReturnValue): CTYPES = ['std::string']