Exemplo n.º 1
0
 def transform_to_c(self):
     if self.transfer_ownership:
         tmp = self.c_name + '_tmp'
         return TypeTransform([
             C.Decl(self.c_type, self.c_name),
             C.Decl(self.c_type, tmp),
         ], [
             C.IfElse(ifs=[self.jni_name],
                      bodies=[[
                          C.Assign(tmp,
                                   C.Env('GetStringUTFChars', self.jni_name,
                                         'NULL'),
                                   cast=self.c_type),
                          C.ExceptionCheck.default(self),
                          C.Assign(self.c_name, C.Call('g_strdup', tmp)),
                      ], [
                          C.Assign(self.c_name, 'NULL'),
                      ]])
         ], [
             C.If(self.jni_name,
                  C.Env('ReleaseStringUTFChars', self.jni_name, tmp)),
         ])
     else:
         return TypeTransform([
             C.Decl(self.c_type, self.c_name),
         ], [
             C.IfElse(ifs=[self.jni_name],
                      bodies=[[
                          C.Assign(self.c_name,
                                   C.Env('GetStringUTFChars', self.jni_name,
                                         'NULL'),
                                   cast=self.c_type),
                          C.ExceptionCheck.default(self),
                      ], [
                          C.Assign(self.c_name, 'NULL'),
                      ]]),
         ], [
             C.If(
                 self.jni_name,
                 C.Env('ReleaseStringUTFChars', self.jni_name,
                       self.c_name)),
         ])
Exemplo n.º 2
0
 def transform_to_jni(self):
     it = self.c_name + '_it'
     inner_transforms = super(GHashTableType, self).transform_to_jni()
     return TypeTransform([
         C.Decl(self.jni_type, self.jni_name),
         C.Decl('GHashTableIter', it),
         C.Decl(self.inner_key.c_type, self.inner_key.c_name),
         C.Decl(self.inner_value.c_type, self.inner_value.c_name),
         inner_transforms.declarations,
     ], [
         C.Assign(self.jni_name, 'NULL'),
         C.If(self.c_name, [
             C.Assign(self.jni_name, C.Env.new('HashMap')),
             C.ExceptionCheck.default(self),
             C.Call('g_hash_table_iter_init', '&' + it, self.c_name),
             C.While(
                 C.Call('g_hash_table_iter_next', '&' + it,
                        '(void **) &' + self.inner_key.c_name,
                        '(void **) &' + self.inner_value.c_name),
                 inner_transforms.conversion,
                 C.Env.method(self.jni_name,
                              ('HashMap', 'put'), self.inner_key.jni_name,
                              self.inner_value.jni_name),
                 C.ExceptionCheck.default(self),
                 C.Env('DeleteLocalRef', self.inner_key.jni_name)
                 if self.inner_value.has_local_ref else [],
                 C.Env('DeleteLocalRef', self.inner_value.jni_name)
                 if self.inner_value.has_local_ref else [],
                 inner_transforms.cleanup,
             ),
         ]),
     ], self.transfer_ownership and [
         C.If(self.c_name, [
             C.Call('g_hash_table_unref', self.c_name),
         ]),
     ])
Exemplo n.º 3
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.º 4
0
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'),
            '',
            C.If('!data_pointer',
                 C.Log.debug('got jobject[NULL] from GObject[null]'),
                 C.Return('NULL')),
            C.Assign('gobj', C.Call('G_OBJECT', 'data_pointer')),
            '',
            C.Assign('wrapper',
                     C.Call('g_object_get_data', 'gobj', '"java_instance"'),
                     cast='JObjectWrapper*'),
            C.IfElse(
                ifs=['wrapper'],
                bodies=[[
                    C.Log.debug('got jobject[%p] from gobject[%p]',
                                'wrapper->obj', 'gobj'),
                    C.Return('wrapper->obj'),
                ],
                        [
                            C.Decl('jobject', 'jobj'),
Exemplo n.º 5
0
                   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', 'gboolean take_ref'],
        body=[
            C.Decl('GObject*', 'gobj'),
            C.Decl('JObjectWrapper*', 'wrapper'),
            '',
            C.If('!data_pointer',
                 C.Log.verbose('got jobject[NULL] from GObject[null]'),
                 C.Return('NULL')),
            C.Assign('gobj', C.Call('G_OBJECT', 'data_pointer')),
            '',
            C.Assign('wrapper',
                     C.Call('g_object_get_data', 'gobj', '"java_instance"'),
                     cast='JObjectWrapper*'),
            C.IfElse(
                ifs=['wrapper'],
                bodies=[
                    [
                        C.Log.verbose('got jobject[%p] from gobject[%p]',
                                      'wrapper->obj', 'gobj'),
                        C.Return('wrapper->obj'),
                    ],
                    [