Exemplo n.º 1
0
 def transform_to_c(self):
     C.Helper('jobject_callback_wrapper_destroy')
     return TypeTransform([
         C.Decl(self.c_type, self.c_name),
     ], [
         C.Assign(self.c_name, 'jobject_callback_wrapper_destroy'),
     ])
Exemplo n.º 2
0
 def transform_to_jni(self):
     return TypeTransform([
         C.Decl(self.jni_type, self.jni_name),
     ], [
         C.Assign(
             self.jni_name,
             C.Helper(self.gir_type + '_to_java_enum', 'env', self.c_name)),
     ])
Exemplo n.º 3
0
    def transform_to_c(self):
        create = None
        if self.scope is None:
            create = C.Helper('jobject_wrapper_create', self.closure.jni_name,
                              'FALSE')
        else:
            create = C.Helper('jobject_callback_wrapper_create',
                              self.closure.jni_name,
                              'TRUE' if self.scope == 'async' else 'FALSE')

        return TypeTransform([
            C.Decl(self.c_type, self.c_name),
        ], [
            C.Assign(self.c_name, create),
        ], self.scope == 'call' and [
            C.Helper('jobject_callback_wrapper_destroy', self.c_name),
        ])
Exemplo n.º 4
0
 def transform_to_jni(self):
     return TypeTransform([
         C.Decl(self.jni_type, self.jni_name),
     ], [
         C.Assign(self.jni_name,
                  C.Helper('gvalue_to_jobject', 'env', self.c_name)),
     ], self.transfer_ownership and [
         C.Call('g_value_reset', self.c_name),
     ])
Exemplo n.º 5
0
 def transform_to_c(self):
     return TypeTransform([
         C.Decl(self.c_type, self.c_name),
     ], [
         C.Assign(self.c_name,
                  C.Helper('jobject_to_gobject', 'env', self.jni_name)),
         C.Call('g_object_ref', self.c_name)
         if self.transfer_ownership else [],
     ])
Exemplo n.º 6
0
 def transform_to_jni(self):
     return TypeTransform([
         C.Decl(self.jni_type, self.jni_name),
     ], [
         C.Assign(self.jni_name,
                  '((JObjectWrapper*) ' + self.c_name + ')->obj;'),
     ], self.transfer_ownership and [
         C.Helper('jobject_wrapper_destroy', self.c_name, 'FALSE'),
     ])
Exemplo n.º 7
0
 def transform_to_c(self):
     return TypeTransform([
         C.Decl(self.c_type, self.c_name),
     ], [
         C.Assign(
             self.c_name,
             C.Helper('jobject_wrapper_create', self.closure.jni_name,
                      'FALSE')),
     ])
Exemplo n.º 8
0
 def transform_to_jni(self):
     return TypeTransform([
         C.Decl(self.jni_type, self.jni_name),
     ], [
         C.Assign(
             self.jni_name,
             C.Helper('gobject_to_jobject', 'env', self.c_name,
                      'TRUE' if not self.transfer_ownership else 'FALSE'))
     ])
Exemplo n.º 9
0
    def transform_to_jni(self):
        get = None
        if self.transfer_ownership:
            get = '((JObjectCallbackWrapper*) %s)->wrapper->obj;' % self.c_name
        else:
            get = '((JObjectWrapper*) %s)->obj;' % self.c_name

        return TypeTransform([
            C.Decl(self.jni_type, self.jni_name),
        ], [
            C.Assign(self.jni_name, get),
        ], self.transfer_ownership and [
            C.If(
                '((JObjectCallbackWrapper *) %s)->should_destroy' %
                self.c_name,
                C.Helper('jobject_callback_wrapper_destroy', self.c_name),
            ),
        ])
Exemplo n.º 10
0
 def transform_to_jni(self):
     enum = self.inner_value
     return TypeTransform([
         C.Decl(self.jni_type, self.jni_name),
         C.Decl(enum.jni_type, enum.jni_name),
         C.Decl(enum.c_type, enum.c_name),
     ], [
         C.Assign(
             self.jni_name,
             C.Env.static_method(
                 ('EnumSet', 'noneOf'), C.Cache(enum.java_type))),
         C.While(
             self.c_name,
             C.Assign(enum.c_name, "{0} & -{0}".format(self.c_name)),
             C.Assign(
                 enum.jni_name,
                 C.Helper(self.gir_type + '_to_java_enum', 'env',
                          enum.c_name)),
             C.Env.method(self.jni_name, ('EnumSet', 'add'), enum.jni_name),
             C.Assign(self.c_name, "{0} & ({0} - 1)".format(self.c_name)),
         )
     ])
Exemplo n.º 11
0
                                        C.Env('DeleteGlobalRef',
                                              'wrapper->obj'),
                                    ]]),
                   '',
                   C.Call('g_slice_free', 'JObjectWrapper', 'wrapper'),
                   C.ExceptionCheck(None),
               ]))

C.Helper.add_helper(
    'jobject_wrapper_closure_notify',
    C.Function('jobject_wrapper_closure_notify',
               return_type='void',
               params=['gpointer data_pointer', 'GClosure* ignored'],
               body=[
                   C.Decl('(void)', 'ignored'),
                   C.Helper('jobject_wrapper_destroy', 'data_pointer',
                            'FALSE'),
               ]))

C.Helper.add_helper(
    'gobject_to_jobject',
    C.Function(
        'gobject_to_jobject',
        return_type='jobject',
        params=[
            'JNIEnv* env', 'gpointer data_pointer', 'jclass clazz',
            'gboolean take_ref'
        ],
        body=[
            C.Decl('GObject*', 'gobj'),
            C.Decl('JObjectWrapper*', 'wrapper'),
            '',