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')) ])
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')), ])
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'), ])
def transform_to_c(self): return TypeTransform([ C.Decl(self.c_type, self.c_name), ], [ C.Assign(self.c_name, C.Env.method(self.jni_name, ('ValueEnum', 'getValue')), cast=self.c_type), C.ExceptionCheck.default(self), ])
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 [], ])
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), ])
def transform_to_c(self): if self.is_length_param: return TypeTransform() else: return TypeTransform([ C.Decl(self.c_type, self.c_name), ], [ C.Assign(self.c_name, self.jni_name, cast=self.c_type), ])
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), ])
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)), ])
def transform_to_c(self): it = self.jni_name + '_iterator' enum = self.inner_value.jni_name return TypeTransform([ C.Decl(self.c_type, self.c_name), C.Decl('jobject', it), C.Decl('jobject', enum), ], [ C.Assign(self.c_name, '0'), C.Assign(it, C.Env.method(self.jni_name, ('Iterable', 'iterator'))), C.While( C.Env.method(it, ('Iterator', 'hasNext')), C.Assign(enum, C.Env.method(it, ('Iterator', 'next'))), C.Assign(self.c_name, C.Env.method(enum, ('ValueEnum', 'getValue')), cast=self.c_type, op='|='), C.ExceptionCheck.default(self), ) ])
def transform_to_jni(self): return TypeTransform([ C.Decl(self.jni_type, self.jni_name), ], [ C.IfElse(ifs=[self.c_name], bodies=[ C.Assign(self.jni_name, C.Env('NewStringUTF', self.c_name)), C.Assign(self.jni_name, 'NULL'), ]), ], self.transfer_ownership and [ C.Call('g_free', self.c_name), ])
def transform_to_jni(self): it = self.c_name + '_it' inner_transforms = super(GListType, self).transform_to_jni() return TypeTransform([ C.Decl(self.jni_type, self.jni_name), C.Decl(self.c_type, it), C.Decl(self.inner_value.c_type, self.inner_value.c_name), inner_transforms.declarations, ], [ C.Assign(self.jni_name, C.Env.new('ArrayList')), C.Assign(it, self.c_name), C.While( it, C.Assign(self.inner_value.c_name, it + '->data'), inner_transforms.conversion, C.Env.method(self.jni_name, ('ArrayList', 'add'), self.inner_value.jni_name), C.ExceptionCheck.default(self), inner_transforms.cleanup, C.Assign(it, it + '->next'), ), ])
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)), ) ])
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), ]), ])
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), ])
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), ), ])
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY # OF SUCH DAMAGE. import config from type_registry import GirMetaType 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',
def transform_to_jni(self): return TypeTransform([ C.Decl(self.jni_type, self.jni_name), ], [C.Assign(self.jni_name, self.c_name, cast=self.jni_type)])
def transform_to_c(self): return TypeTransform([ C.Decl(self.c_type, self.c_name), ],[ C.Assign(self.c_name, C.Call('ANativeWindow_fromSurface', 'env', self.jni_name)), ])