Example #1
0
    def register_ptr_alias_parameter_and_return(self, cls, alias):
        alias_ptr = '::ns3::Ptr< %s >' % alias
        cls.ThisClassNs3PtrParameter.CTYPES.append(alias_ptr)
        try:
            param_type_matcher.register(alias_ptr, cls.ThisClassNs3PtrParameter)
        except ValueError: pass

        cls.ThisClassNs3PtrReturn.CTYPES.append(alias_ptr)
        try:
            return_type_matcher.register(alias_ptr, cls.ThisClassNs3PtrReturn)
        except ValueError: pass
Example #2
0
    def register_ptr_alias_parameter_and_return(self, cls, alias):
        alias_ptr = '::ns3::Ptr< %s >' % alias
        cls.ThisClassNs3PtrParameter.CTYPES.append(alias_ptr)
        try:
            param_type_matcher.register(alias_ptr,
                                        cls.ThisClassNs3PtrParameter)
        except ValueError:
            pass

        cls.ThisClassNs3PtrReturn.CTYPES.append(alias_ptr)
        try:
            return_type_matcher.register(alias_ptr, cls.ThisClassNs3PtrReturn)
        except ValueError:
            pass
Example #3
0
    def register_ptr_parameter_and_return(self, cls, name):
        class ThisClassNs3PtrParameter(CppClassNs3PtrParameter):
            """Register this C++ class as pass-by-pointer parameter"""
            CTYPES = []
            cpp_class = cls
        cls.ThisClassNs3PtrParameter = ThisClassNs3PtrParameter
        try:
            param_type_matcher.register(self.get_pointer_name(cls.full_name), cls.ThisClassNs3PtrParameter)
        except ValueError:
            pass

        class ThisClassNs3PtrReturn(CppClassNs3PtrReturnValue):
            """Register this C++ class as pointer return"""
            CTYPES = []
            cpp_class = cls
        cls.ThisClassNs3PtrReturn = ThisClassNs3PtrReturn
        try:
            return_type_matcher.register(self.get_pointer_name(cls.full_name), cls.ThisClassNs3PtrReturn)
        except ValueError:
            pass
Example #4
0
    def register_ptr_parameter_and_return(self, cls, name):
        class ThisClassNs3PtrParameter(CppClassNs3PtrParameter):
            """Register this C++ class as pass-by-pointer parameter"""
            CTYPES = []
            cpp_class = cls

        cls.ThisClassNs3PtrParameter = ThisClassNs3PtrParameter
        try:
            param_type_matcher.register(self.get_pointer_name(cls.full_name),
                                        cls.ThisClassNs3PtrParameter)
        except ValueError:
            pass

        class ThisClassNs3PtrReturn(CppClassNs3PtrReturnValue):
            """Register this C++ class as pointer return"""
            CTYPES = []
            cpp_class = cls

        cls.ThisClassNs3PtrReturn = ThisClassNs3PtrReturn
        try:
            return_type_matcher.register(self.get_pointer_name(cls.full_name),
                                         cls.ThisClassNs3PtrReturn)
        except ValueError:
            pass
Example #5
0
    def set_module(self, module):
        """Set the Module object this class belongs to; can only be set once"""
        assert self._module is None
        self._module = module

        if not self.name:
            return

        if self.outer_class is None:
            if self._module.cpp_namespace_prefix:
                if self._module.cpp_namespace_prefix == '::':
                    self.full_name = '::' + self.name
                else:
                    self.full_name = self._module.cpp_namespace_prefix + '::' + self.name
            else:
                self.full_name = self.name
        else:
            self.full_name = '::'.join([self.outer_class.full_name, self.name])

        ## Register type handlers for the enum type
        assert self.name
        assert self.full_name
        class ThisEnumParameter(inttype.IntParam):
            CTYPES = []
            full_type_name = self.full_name
            def __init__(self, ctype, name, *args, **kwargs):
                super(ThisEnumParameter, self).__init__(self.full_type_name, name, *args, **kwargs)

        class ThisEnumReturn(inttype.IntReturn):
            CTYPES = []
            full_type_name = self.full_name
            def __init__(self, ctype, *args, **kwargs):
                super(ThisEnumReturn, self).__init__(self.full_type_name, *args, **kwargs)

        class ThisEnumRefParameter(inttype.IntRefParam):
            CTYPES = []
            full_type_name = self.full_name + " &"
            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:
                param_type_matcher.register(self.name, self.ThisEnumParameter)
            except ValueError:
                pass
            try:
                return_type_matcher.register(self.name, self.ThisEnumReturn)
            except ValueError:
                pass
            try:
                param_type_matcher.register(self.name+' &', self.ThisEnumRefParameter)
            except ValueError:
                pass
            try:
                param_type_matcher.register(self.name+' *', self.ThisEnumPtrParameter)
            except ValueError:
                pass
Example #6
0
    def set_module(self, module):
        """Set the Module object this class belongs to; can only be set once"""
        assert self._module is None
        self._module = module

        if not self.name:
            return

        if self.outer_class is None:
            if self._module.cpp_namespace_prefix:
                if self._module.cpp_namespace_prefix == '::':
                    self.full_name = '::' + self.name
                else:
                    self.full_name = self._module.cpp_namespace_prefix + '::' + self.name
            else:
                self.full_name = self.name
        else:
            self.full_name = '::'.join([self.outer_class.full_name, self.name])

        ## Register type handlers for the enum type
        assert self.name
        assert self.full_name

        class ThisEnumParameter(inttype.IntParam):
            CTYPES = []
            full_type_name = self.full_name

            def __init__(self, ctype, name, *args, **kwargs):
                super(ThisEnumParameter,
                      self).__init__(self.full_type_name, name, *args,
                                     **kwargs)

        class ThisEnumReturn(inttype.IntReturn):
            CTYPES = []
            full_type_name = self.full_name

            def __init__(self, ctype, *args, **kwargs):
                super(ThisEnumReturn, self).__init__(self.full_type_name,
                                                     *args, **kwargs)

        class ThisEnumRefParameter(inttype.IntRefParam):
            CTYPES = []
            full_type_name = self.full_name + " &"

            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:
                param_type_matcher.register(self.name, self.ThisEnumParameter)
            except ValueError:
                pass
            try:
                return_type_matcher.register(self.name, self.ThisEnumReturn)
            except ValueError:
                pass
            try:
                param_type_matcher.register(self.name + ' &',
                                            self.ThisEnumRefParameter)
            except ValueError:
                pass
            try:
                param_type_matcher.register(self.name + ' *',
                                            self.ThisEnumPtrParameter)
            except ValueError:
                pass
    DIRECTIONS = [Parameter.DIRECTION_OUT]
    CTYPES = ['SmlError * *']
    def __init__(self, ctype, name):
        super(SmlErrorParam, self).__init__(
            ctype, name, direction=Parameter.DIRECTION_OUT)

    def convert_python_to_c(self, wrapper):
        name = wrapper.declarations.declare_variable("SmlError*", "error", initializer="NULL")
        wrapper.call_params.append('&'+name)
        wrapper.after_call.write_error_check("smlErrorIsSet(&%s)" % name,
                                             'PyErr_SetString(PyExc_RuntimeError, smlErrorPrint(&%s));\n'
                                             'smlErrorDeref(&%s);' % (name, name))
                
    def convert_c_to_python(self, wrapper):
        raise NotImplementedError
param_type_matcher.register("SmlError", SmlErrorParam)

#because syncml.h does
#    typedef int SmlBool;
param_type_matcher.register("SmlBool", IntParam)
return_type_matcher.register("SmlBool", IntReturn)

#smlMD5ToString
param_type_matcher.register("unsigned char *", CStringParam)

#smlTransportDataNew
param_type_matcher.register("long unsigned int", IntParam)

def callback_customizations(module):
    #write the callbacks with c compatible apis
    #typedef void (* SmlManagerEventCb) (SmlManager *manager, SmlManagerEventType type, SmlSession *session, SmlError *error, void *userdata);