Exemplo n.º 1
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, 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.Call('g_hash_table_unref', self.c_name),
     ])
Exemplo n.º 2
0
 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),
         )
     ])
Exemplo n.º 3
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.º 4
0
 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'),
         ),
     ])