Patch from Mark Lee (Bug #144360): add support for more basic types (unsigned int, char, string)

This commit is contained in:
Gustavo J. A. M. Carneiro committed 2007-09-24 14:12:03 +01:00
1 parent 2709085732
commit dafcb0712f
2 files changed
+73

No files matched your search

+30
View File
@@ -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,
+43
View File
@@ -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']