Wrap enum pointer params
This commit is contained in:
1 parent
cdbc237f3a
commit
225436e711
6 files changed
+29
-1
No files matched your search
@@ -88,13 +88,21 @@ class Enum(object):
|
||||
def __init__(self, ctype, name, *args, **kwargs):
|
||||
super(ThisEnumRefParameter, self).__init__(self.full_type_name, name, *args, **kwargs)
|
||||
|
||||
class ThisEnumPtrParameter(inttype.IntPtrParam):
|
||||
CTYPES = []
|
||||
full_type_name = self.full_name + " *"
|
||||
def __init__(self, ctype, name, *args, **kwargs):
|
||||
super(ThisEnumPtrParameter, self).__init__(self.full_type_name, name, *args, **kwargs)
|
||||
|
||||
self.ThisEnumParameter = ThisEnumParameter
|
||||
self.ThisEnumReturn = ThisEnumReturn
|
||||
self.ThisEnumRefParameter = ThisEnumRefParameter
|
||||
self.ThisEnumPtrParameter = ThisEnumPtrParameter
|
||||
|
||||
param_type_matcher.register(self.full_name, self.ThisEnumParameter)
|
||||
return_type_matcher.register(self.full_name, self.ThisEnumReturn)
|
||||
param_type_matcher.register(self.full_name + ' &', self.ThisEnumRefParameter)
|
||||
param_type_matcher.register(self.full_name + ' *', self.ThisEnumPtrParameter)
|
||||
|
||||
if self.name != self.full_name:
|
||||
try:
|
||||
@@ -109,6 +117,10 @@ class Enum(object):
|
||||
param_type_matcher.register(self.name+' &', self.ThisEnumRefParameter)
|
||||
except ValueError:
|
||||
pass
|
||||
try:
|
||||
param_type_matcher.register(self.name+' *', self.ThisEnumPtrParameter)
|
||||
except ValueError:
|
||||
pass
|
||||
|
||||
|
||||
module = property(get_module, set_module)
|
||||
|
||||
@@ -163,7 +163,7 @@ class IntPtrParam(PointerParameter):
|
||||
wrapper.parse_params.add_parameter("i", [self.value], self.name)
|
||||
|
||||
def convert_python_to_c(self, wrapper):
|
||||
name = wrapper.declarations.declare_variable('int', self.name)
|
||||
name = wrapper.declarations.declare_variable(self.ctype_no_const[:-1], self.name)
|
||||
wrapper.call_params.append('&'+name)
|
||||
if self.direction & self.DIRECTION_IN:
|
||||
wrapper.parse_params.add_parameter('i', ['&'+name], self.name)
|
||||
|
||||
@@ -237,6 +237,13 @@ namespace xpto
|
||||
type = oldfooType;
|
||||
}
|
||||
|
||||
void set_foo_type_ptr (FooType *type)
|
||||
{
|
||||
FooType oldfooType = g_fooType;
|
||||
g_fooType = *type;
|
||||
*type = oldfooType;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -499,6 +499,9 @@ namespace xpto
|
||||
FooType get_foo_type ();
|
||||
void set_foo_type (FooType type);
|
||||
|
||||
// -#- @type(direction=inout) -#-
|
||||
void set_foo_type_ptr (FooType *type);
|
||||
|
||||
// -#- @type(direction=inout) -#-
|
||||
void set_foo_type_inout (FooType &type);
|
||||
|
||||
|
||||
@@ -280,6 +280,8 @@ int %s::custom_method_added_by_a_hook(int x)
|
||||
xpto.add_function('set_foo_type', ReturnValue.new('void'), [Parameter.new("FooType", 'type')])
|
||||
xpto.add_function('set_foo_type_inout', ReturnValue.new('void'),
|
||||
[Parameter.new("FooType&", 'type', direction=Parameter.DIRECTION_INOUT)])
|
||||
xpto.add_function('set_foo_type_ptr', ReturnValue.new('void'),
|
||||
[Parameter.new("FooType*", 'type', direction=Parameter.DIRECTION_INOUT)])
|
||||
|
||||
|
||||
xpto_SomeClass = xpto.add_class('SomeClass', docstring="This is the docstring for SomeClass")
|
||||
|
||||
@@ -597,9 +597,13 @@ class TestFoo(unittest.TestCase):
|
||||
def test_enum(self):
|
||||
foo.xpto.set_foo_type(foo.xpto.FOO_TYPE_BBB)
|
||||
self.assertEqual(foo.xpto.get_foo_type(), foo.xpto.FOO_TYPE_BBB)
|
||||
|
||||
old = foo.xpto.set_foo_type_inout(foo.xpto.FOO_TYPE_CCC)
|
||||
self.assertEqual(old, foo.xpto.FOO_TYPE_BBB)
|
||||
|
||||
old = foo.xpto.set_foo_type_ptr(foo.xpto.FOO_TYPE_AAA)
|
||||
self.assertEqual(old, foo.xpto.FOO_TYPE_CCC)
|
||||
|
||||
def test_virtual_overload(self):
|
||||
## first test the plain object
|
||||
obj = foo.SomeObject("")
|
||||
|
||||
Reference in new issue
Block a user