Esempio n. 1
0
 def transform_to_c(self):
     assert not self.transfer_ownership  # transfer not implemented
     return TypeTransform(
         [
             C.Decl(self.c_type, self.c_name),
             C.Decl('jsize', self.length.jni_name),
             C.Decl(self.length.c_type, self.length.c_name),
         ],
         [
             C.Assert('sizeof(%s) == sizeof(%s)' %
                      (self.c_element_type, self.jni_type[:-5])),
             C.Assign(self.c_name,
                      C.Env('Get%sArrayElements' % self.primitive_type_name,
                            self.jni_name, 'NULL'),
                      cast=self.c_type),
             C.ExceptionCheck.default(self),
             C.Assign(self.length.c_name,
                      C.Env('GetArrayLength', '(jarray) ' + self.jni_name),
                      cast=self.length.c_type),
             C.ExceptionCheck.default(self),
         ],
         [
             # discard any changes
             C.Env('Release%sArrayElements' % self.primitive_type_name,
                   self.jni_name, self.c_name, 'JNI_ABORT'),
             C.ExceptionCheck.default(self),
         ])
Esempio n. 2
0
 def transform_to_jni(self):
     return TypeTransform([
         C.Decl(self.jni_type, self.jni_name),
         C.Decl('jsize', self.length.jni_name),
     ], [
         C.Assert('sizeof(%s) == sizeof(%s)' %
                  (self.c_element_type, self.jni_type[:-5])),
         C.Assign(self.length.jni_name, self.length.c_name, cast='jsize'),
         C.Assign(
             self.jni_name,
             C.Env('New%sArray' % self.primitive_type_name,
                   self.length.jni_name)),
         C.ExceptionCheck.default(self),
         C.Env('Set%sArrayRegion' % self.primitive_type_name, self.jni_name,
               '0', self.length.jni_name,
               '(const %s*)' % self.jni_type[:-5] + self.c_name),
     ], self.transfer_ownership and [
         C.Call('g_free', self.c_name),
     ])
Esempio n. 3
0
from type_registry import TypeTransform
from c_generator import C

C.Helper.add_helper(
    'jobject_wrapper_create',
    C.Function('jobject_wrapper_create',
               return_type='JObjectWrapper*',
               params=['jobject jobj', 'gboolean weak'],
               body=[
                   C.Decl('JNIEnv*', 'env'),
                   C.Decl('JObjectWrapper*', 'wrapper'),
                   '',
                   C.Assign('env', C.Call('get_jni_env')),
                   C.Assign('wrapper', C.Call('g_slice_new0',
                                              'JObjectWrapper')),
                   C.Assert('wrapper'),
                   C.IfElse(ifs=['weak'],
                            bodies=[[
                                C.Assign('wrapper->weak',
                                         C.Env('NewWeakGlobalRef', 'jobj')),
                                C.Log.info('created weak global ref: %p',
                                           'wrapper->weak'),
                            ],
                                    [
                                        C.Assign('wrapper->obj',
                                                 C.Env('NewGlobalRef',
                                                       'jobj')),
                                        C.Log.info('created global ref: %p',
                                                   'wrapper->obj'),
                                    ]]),
                   C.ExceptionCheck('NULL'),
Esempio n. 4
0
from type_registry import TypeTransform
from c_generator import C

C.Helper.add_helper(
    'jobject_wrapper_create',
    C.Function('jobject_wrapper_create',
               return_type='JObjectWrapper*',
               params=['jobject jobj', 'gboolean weak'],
               body=[
                   C.Decl('JNIEnv*', 'env'),
                   C.Decl('JObjectWrapper*', 'wrapper'),
                   '',
                   C.Assign('env', C.Call('get_jni_env')),
                   C.Assign('wrapper', C.Call('g_slice_new0',
                                              'JObjectWrapper')),
                   C.Assert('wrapper'),
                   C.IfElse(ifs=['weak'],
                            bodies=[[
                                C.Assign('wrapper->weak',
                                         C.Env('NewWeakGlobalRef', 'jobj')),
                                C.Log.verbose('created weak global ref: %p',
                                              'wrapper->weak'),
                            ],
                                    [
                                        C.Assign('wrapper->obj',
                                                 C.Env('NewGlobalRef',
                                                       'jobj')),
                                        C.Log.verbose('created global ref: %p',
                                                      'wrapper->obj'),
                                    ]]),
                   C.ExceptionCheck('NULL'),