gir_ffi 0.14.0 → 0.15.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (265) hide show
  1. checksums.yaml +4 -4
  2. data/Changelog.md +45 -0
  3. data/Gemfile +6 -4
  4. data/README.md +11 -10
  5. data/Rakefile +5 -5
  6. data/lib/ffi-glib.rb +16 -16
  7. data/lib/ffi-glib/array.rb +14 -4
  8. data/lib/ffi-glib/byte_array.rb +7 -2
  9. data/lib/ffi-glib/container_class_methods.rb +1 -1
  10. data/lib/ffi-glib/error.rb +1 -1
  11. data/lib/ffi-glib/hash_table.rb +3 -3
  12. data/lib/ffi-glib/list.rb +1 -1
  13. data/lib/ffi-glib/list_methods.rb +1 -1
  14. data/lib/ffi-glib/main_loop.rb +3 -3
  15. data/lib/ffi-glib/ptr_array.rb +30 -8
  16. data/lib/ffi-glib/s_list.rb +1 -1
  17. data/lib/ffi-glib/variant.rb +1 -1
  18. data/lib/ffi-gobject.rb +13 -13
  19. data/lib/ffi-gobject/object.rb +23 -32
  20. data/lib/ffi-gobject/param_spec.rb +1 -1
  21. data/lib/ffi-gobject/ruby_closure.rb +2 -2
  22. data/lib/ffi-gobject/value.rb +40 -29
  23. data/lib/ffi-gobject_introspection.rb +20 -20
  24. data/lib/ffi-gobject_introspection/gobject_type_init.rb +2 -2
  25. data/lib/ffi-gobject_introspection/i_arg_info.rb +2 -2
  26. data/lib/ffi-gobject_introspection/i_base_info.rb +27 -17
  27. data/lib/ffi-gobject_introspection/i_callable_info.rb +4 -4
  28. data/lib/ffi-gobject_introspection/i_constant_info.rb +2 -2
  29. data/lib/ffi-gobject_introspection/i_enum_info.rb +1 -0
  30. data/lib/ffi-gobject_introspection/i_field_info.rb +1 -1
  31. data/lib/ffi-gobject_introspection/i_function_info.rb +1 -1
  32. data/lib/ffi-gobject_introspection/i_interface_info.rb +1 -1
  33. data/lib/ffi-gobject_introspection/i_object_info.rb +2 -2
  34. data/lib/ffi-gobject_introspection/i_property_info.rb +2 -2
  35. data/lib/ffi-gobject_introspection/i_repository.rb +9 -6
  36. data/lib/ffi-gobject_introspection/i_struct_info.rb +2 -1
  37. data/lib/ffi-gobject_introspection/i_type_info.rb +13 -7
  38. data/lib/ffi-gobject_introspection/i_unresolved_info.rb +1 -1
  39. data/lib/ffi-gobject_introspection/i_vfunc_info.rb +1 -1
  40. data/lib/ffi-gobject_introspection/lib.rb +30 -19
  41. data/lib/ffi-gobject_introspection/strv.rb +1 -1
  42. data/lib/gir_ffi-base.rb +1 -1
  43. data/lib/gir_ffi-base/gobject.rb +26 -25
  44. data/lib/gir_ffi-base/gobject/lib.rb +3 -2
  45. data/lib/gir_ffi.rb +3 -3
  46. data/lib/gir_ffi/allocation_helper.rb +1 -1
  47. data/lib/gir_ffi/arg_helper.rb +4 -4
  48. data/lib/gir_ffi/{in_out_pointer.rb → array_element_convertor.rb} +16 -23
  49. data/lib/gir_ffi/boolean.rb +1 -1
  50. data/lib/gir_ffi/boxed_base.rb +1 -1
  51. data/lib/gir_ffi/builder.rb +18 -10
  52. data/lib/gir_ffi/builder_helper.rb +6 -1
  53. data/lib/gir_ffi/builders/argument_builder.rb +19 -19
  54. data/lib/gir_ffi/builders/argument_builder_collection.rb +2 -2
  55. data/lib/gir_ffi/builders/base_argument_builder.rb +1 -0
  56. data/lib/gir_ffi/builders/base_method_builder.rb +7 -7
  57. data/lib/gir_ffi/builders/base_return_value_builder.rb +1 -1
  58. data/lib/gir_ffi/builders/base_type_builder.rb +1 -1
  59. data/lib/gir_ffi/builders/c_to_ruby_convertor.rb +5 -5
  60. data/lib/gir_ffi/builders/callback_argument_builder.rb +8 -8
  61. data/lib/gir_ffi/builders/callback_builder.rb +16 -4
  62. data/lib/gir_ffi/builders/callback_return_value_builder.rb +2 -2
  63. data/lib/gir_ffi/builders/closure_argument_builder.rb +1 -1
  64. data/lib/gir_ffi/builders/closure_return_value_builder.rb +1 -1
  65. data/lib/gir_ffi/builders/constant_builder.rb +1 -1
  66. data/lib/gir_ffi/builders/constructor_builder.rb +9 -9
  67. data/lib/gir_ffi/builders/enum_builder.rb +16 -3
  68. data/lib/gir_ffi/builders/field_builder.rb +20 -18
  69. data/lib/gir_ffi/builders/flags_builder.rb +2 -2
  70. data/lib/gir_ffi/builders/full_c_to_ruby_convertor.rb +1 -1
  71. data/lib/gir_ffi/builders/function_builder.rb +11 -5
  72. data/lib/gir_ffi/builders/initializer_builder.rb +3 -3
  73. data/lib/gir_ffi/builders/initializer_return_value_builder.rb +2 -2
  74. data/lib/gir_ffi/builders/interface_builder.rb +2 -2
  75. data/lib/gir_ffi/builders/mapping_method_builder.rb +9 -9
  76. data/lib/gir_ffi/builders/marshalling_method_builder.rb +7 -7
  77. data/lib/gir_ffi/builders/method_template.rb +1 -1
  78. data/lib/gir_ffi/builders/module_builder.rb +7 -7
  79. data/lib/gir_ffi/builders/object_builder.rb +6 -6
  80. data/lib/gir_ffi/builders/property_argument_builder.rb +1 -1
  81. data/lib/gir_ffi/builders/property_builder.rb +13 -12
  82. data/lib/gir_ffi/builders/property_return_value_builder.rb +1 -1
  83. data/lib/gir_ffi/builders/registered_type_builder.rb +14 -5
  84. data/lib/gir_ffi/builders/return_value_builder.rb +4 -4
  85. data/lib/gir_ffi/builders/ruby_to_c_convertor.rb +6 -6
  86. data/lib/gir_ffi/builders/signal_closure_builder.rb +2 -2
  87. data/lib/gir_ffi/builders/struct_builder.rb +6 -4
  88. data/lib/gir_ffi/builders/struct_like.rb +1 -1
  89. data/lib/gir_ffi/builders/type_builder.rb +12 -12
  90. data/lib/gir_ffi/builders/unintrospectable_boxed_builder.rb +2 -2
  91. data/lib/gir_ffi/builders/unintrospectable_builder.rb +2 -2
  92. data/lib/gir_ffi/builders/union_builder.rb +4 -4
  93. data/lib/gir_ffi/builders/user_defined_builder.rb +2 -2
  94. data/lib/gir_ffi/builders/vfunc_argument_builder.rb +1 -1
  95. data/lib/gir_ffi/builders/vfunc_builder.rb +8 -8
  96. data/lib/gir_ffi/builders/with_layout.rb +2 -2
  97. data/lib/gir_ffi/callback_base.rb +4 -6
  98. data/lib/gir_ffi/class_base.rb +6 -5
  99. data/lib/gir_ffi/core.rb +19 -20
  100. data/lib/gir_ffi/enum_base.rb +1 -1
  101. data/lib/gir_ffi/enum_like_base.rb +2 -2
  102. data/lib/gir_ffi/error_argument_info.rb +2 -2
  103. data/lib/gir_ffi/error_type_info.rb +1 -1
  104. data/lib/gir_ffi/ffi_ext.rb +1 -1
  105. data/lib/gir_ffi/ffi_ext/pointer.rb +1 -1
  106. data/lib/gir_ffi/flags_base.rb +1 -1
  107. data/lib/gir_ffi/in_pointer.rb +10 -0
  108. data/lib/gir_ffi/info_ext.rb +15 -14
  109. data/lib/gir_ffi/info_ext/full_type_name.rb +3 -3
  110. data/lib/gir_ffi/info_ext/i_arg_info.rb +1 -1
  111. data/lib/gir_ffi/info_ext/i_callable_info.rb +1 -1
  112. data/lib/gir_ffi/info_ext/i_callback_info.rb +1 -1
  113. data/lib/gir_ffi/info_ext/i_field_info.rb +1 -1
  114. data/lib/gir_ffi/info_ext/i_function_info.rb +1 -1
  115. data/lib/gir_ffi/info_ext/i_property_info.rb +2 -2
  116. data/lib/gir_ffi/info_ext/i_registered_type_info.rb +4 -5
  117. data/lib/gir_ffi/info_ext/i_signal_info.rb +7 -3
  118. data/lib/gir_ffi/info_ext/i_type_info.rb +48 -26
  119. data/lib/gir_ffi/info_ext/i_unresolved_info.rb +1 -1
  120. data/lib/gir_ffi/info_ext/i_value_info.rb +25 -0
  121. data/lib/gir_ffi/info_ext/i_vfunc_info.rb +2 -2
  122. data/lib/gir_ffi/info_ext/safe_constant_name.rb +8 -8
  123. data/lib/gir_ffi/info_ext/safe_function_name.rb +2 -2
  124. data/lib/gir_ffi/interface_base.rb +3 -3
  125. data/lib/gir_ffi/lib_c.rb +1 -1
  126. data/lib/gir_ffi/method_stubber.rb +1 -1
  127. data/lib/gir_ffi/module_base.rb +1 -1
  128. data/lib/gir_ffi/object_base.rb +3 -4
  129. data/lib/gir_ffi/receiver_argument_info.rb +1 -1
  130. data/lib/gir_ffi/receiver_type_info.rb +2 -2
  131. data/lib/gir_ffi/registered_type_base.rb +1 -1
  132. data/lib/gir_ffi/sized_array.rb +4 -2
  133. data/lib/gir_ffi/struct.rb +1 -1
  134. data/lib/gir_ffi/struct_base.rb +1 -1
  135. data/lib/gir_ffi/type_map.rb +2 -23
  136. data/lib/gir_ffi/unintrospectable_boxed_info.rb +2 -2
  137. data/lib/gir_ffi/unintrospectable_type_info.rb +5 -1
  138. data/lib/gir_ffi/union.rb +1 -1
  139. data/lib/gir_ffi/union_base.rb +1 -1
  140. data/lib/gir_ffi/user_defined_object_info.rb +6 -2
  141. data/lib/gir_ffi/user_defined_property_info.rb +33 -33
  142. data/lib/gir_ffi/version.rb +1 -1
  143. data/tasks/test.rake +3 -2
  144. data/test/base_test_helper.rb +16 -9
  145. data/test/ffi-glib/array_test.rb +71 -56
  146. data/test/ffi-glib/byte_array_test.rb +13 -7
  147. data/test/ffi-glib/bytes_test.rb +24 -19
  148. data/test/ffi-glib/closure_test.rb +11 -11
  149. data/test/ffi-glib/destroy_notify_test.rb +6 -6
  150. data/test/ffi-glib/hash_table_test.rb +27 -27
  151. data/test/ffi-glib/list_test.rb +22 -22
  152. data/test/ffi-glib/main_loop_test.rb +12 -12
  153. data/test/ffi-glib/ptr_array_test.rb +39 -39
  154. data/test/ffi-glib/ruby_closure_test.rb +10 -10
  155. data/test/ffi-glib/s_list_test.rb +20 -20
  156. data/test/ffi-glib/strv_test.rb +19 -19
  157. data/test/ffi-glib/variant_test.rb +5 -5
  158. data/test/ffi-gobject/gobject_test.rb +48 -44
  159. data/test/ffi-gobject/object_class_test.rb +8 -8
  160. data/test/ffi-gobject/object_test.rb +51 -68
  161. data/test/ffi-gobject/param_spec_test.rb +12 -12
  162. data/test/ffi-gobject/value_test.rb +145 -125
  163. data/test/ffi-gobject_introspection/gobject_type_init_test.rb +9 -9
  164. data/test/ffi-gobject_introspection/i_base_info_test.rb +15 -16
  165. data/test/ffi-gobject_introspection/i_constant_info_test.rb +9 -13
  166. data/test/ffi-gobject_introspection/i_enum_info_test.rb +7 -7
  167. data/test/ffi-gobject_introspection/i_function_info_test.rb +1 -1
  168. data/test/ffi-gobject_introspection/i_interface_info_test.rb +10 -10
  169. data/test/ffi-gobject_introspection/i_object_info_test.rb +23 -23
  170. data/test/ffi-gobject_introspection/i_property_info_test.rb +19 -19
  171. data/test/ffi-gobject_introspection/i_registered_type_info_test.rb +10 -10
  172. data/test/ffi-gobject_introspection/i_repository_test.rb +34 -34
  173. data/test/ffi-gobject_introspection/i_struct_info_test.rb +10 -10
  174. data/test/ffi-gobject_introspection/i_type_info_test.rb +12 -15
  175. data/test/ffi-gobject_introspection/i_union_info_test.rb +7 -7
  176. data/test/ffi-gobject_introspection/i_vfunc_info_test.rb +16 -16
  177. data/test/ffi-gobject_introspection/lib_test.rb +3 -3
  178. data/test/ffi-gobject_introspection/strv_test.rb +9 -9
  179. data/test/ffi-gobject_test.rb +47 -45
  180. data/test/gir_ffi/allocation_helper_test.rb +13 -13
  181. data/test/gir_ffi/arg_helper_test.rb +71 -65
  182. data/test/gir_ffi/boolean_test.rb +20 -20
  183. data/test/gir_ffi/boxed_base_test.rb +18 -18
  184. data/test/gir_ffi/builder_test.rb +81 -213
  185. data/test/gir_ffi/builders/argument_builder_test.rb +321 -287
  186. data/test/gir_ffi/builders/base_argument_builder_test.rb +1 -1
  187. data/test/gir_ffi/builders/callback_argument_builder_test.rb +57 -56
  188. data/test/gir_ffi/builders/callback_builder_test.rb +71 -72
  189. data/test/gir_ffi/builders/callback_return_value_builder_test.rb +40 -41
  190. data/test/gir_ffi/builders/constant_builder_test.rb +1 -1
  191. data/test/gir_ffi/builders/constructor_builder_test.rb +12 -10
  192. data/test/gir_ffi/builders/enum_builder_test.rb +12 -11
  193. data/test/gir_ffi/builders/field_builder_test.rb +48 -42
  194. data/test/gir_ffi/builders/function_builder_test.rb +256 -224
  195. data/test/gir_ffi/builders/initializer_builder_test.rb +16 -14
  196. data/test/gir_ffi/builders/interface_builder_test.rb +9 -9
  197. data/test/gir_ffi/builders/module_builder_test.rb +18 -18
  198. data/test/gir_ffi/builders/object_builder_test.rb +41 -41
  199. data/test/gir_ffi/builders/property_builder_test.rb +94 -94
  200. data/test/gir_ffi/builders/registered_type_builder_test.rb +35 -11
  201. data/test/gir_ffi/builders/return_value_builder_test.rb +227 -223
  202. data/test/gir_ffi/builders/signal_closure_builder_test.rb +124 -113
  203. data/test/gir_ffi/builders/struct_builder_test.rb +38 -35
  204. data/test/gir_ffi/builders/unintrospectable_boxed_builder_test.rb +8 -14
  205. data/test/gir_ffi/builders/unintrospectable_builder_test.rb +34 -23
  206. data/test/gir_ffi/builders/union_builder_test.rb +12 -15
  207. data/test/gir_ffi/builders/user_defined_builder_test.rb +152 -148
  208. data/test/gir_ffi/builders/vfunc_argument_builder_test.rb +46 -40
  209. data/test/gir_ffi/builders/vfunc_builder_test.rb +149 -157
  210. data/test/gir_ffi/callback_base_test.rb +9 -9
  211. data/test/gir_ffi/class_base_test.rb +56 -53
  212. data/test/gir_ffi/core_test.rb +36 -35
  213. data/test/gir_ffi/enum_base_test.rb +19 -19
  214. data/test/gir_ffi/error_type_info_test.rb +23 -23
  215. data/test/gir_ffi/ffi_ext/pointer_test.rb +9 -7
  216. data/test/gir_ffi/g_type_test.rb +11 -11
  217. data/test/gir_ffi/in_pointer_test.rb +70 -50
  218. data/test/gir_ffi/info_ext/i_callable_info_test.rb +5 -5
  219. data/test/gir_ffi/info_ext/i_callback_info_test.rb +6 -5
  220. data/test/gir_ffi/info_ext/i_field_info_test.rb +6 -6
  221. data/test/gir_ffi/info_ext/i_function_info_test.rb +17 -17
  222. data/test/gir_ffi/info_ext/i_signal_info_test.rb +8 -8
  223. data/test/gir_ffi/info_ext/i_type_info_test.rb +231 -216
  224. data/test/gir_ffi/info_ext/i_unresolved_info_test.rb +4 -4
  225. data/test/gir_ffi/info_ext/safe_constant_name_test.rb +8 -8
  226. data/test/gir_ffi/info_ext/safe_function_name_test.rb +8 -8
  227. data/test/gir_ffi/interface_base_test.rb +8 -8
  228. data/test/gir_ffi/method_stubber_test.rb +21 -19
  229. data/test/gir_ffi/object_base_test.rb +23 -23
  230. data/test/gir_ffi/object_store_test.rb +13 -13
  231. data/test/gir_ffi/receiver_argument_info_test.rb +15 -15
  232. data/test/gir_ffi/sized_array_test.rb +68 -68
  233. data/test/gir_ffi/struct_base_test.rb +8 -8
  234. data/test/gir_ffi/struct_like_base_test.rb +64 -64
  235. data/test/gir_ffi/type_map_test.rb +8 -8
  236. data/test/gir_ffi/unintrospectable_type_info_test.rb +33 -33
  237. data/test/gir_ffi/union_base_test.rb +8 -8
  238. data/test/gir_ffi/user_defined_object_info_test.rb +34 -34
  239. data/test/gir_ffi/user_defined_property_info_test.rb +16 -16
  240. data/test/gir_ffi/variable_name_generator_test.rb +8 -8
  241. data/test/gir_ffi/version_test.rb +4 -4
  242. data/test/gir_ffi/zero_terminated_test.rb +34 -34
  243. data/test/gir_ffi_test_helper.rb +3 -3
  244. data/test/integration/callback_exceptions_test.rb +17 -21
  245. data/test/integration/derived_classes_test.rb +14 -13
  246. data/test/integration/generated_everything_test.rb +225 -224
  247. data/test/integration/generated_gimarshallingtests_test.rb +1174 -1060
  248. data/test/integration/generated_gio_test.rb +36 -36
  249. data/test/integration/generated_glib_test.rb +4 -6
  250. data/test/integration/generated_gobject_test.rb +43 -35
  251. data/test/integration/generated_gst_test.rb +20 -16
  252. data/test/integration/generated_gtk_source_test.rb +9 -15
  253. data/test/integration/generated_gtop_test.rb +8 -15
  254. data/test/integration/generated_pango_ft2_test.rb +2 -2
  255. data/test/integration/generated_pango_test.rb +4 -4
  256. data/test/integration/generated_regress_test.rb +1858 -1632
  257. data/test/integration/generated_secret_test.rb +8 -11
  258. data/test/integration/generated_utility_test.rb +81 -81
  259. data/test/integration/generated_warnlib_test.rb +17 -21
  260. data/test/integration/method_lookup_test.rb +6 -6
  261. data/test/introspection_test_helper.rb +49 -7
  262. data/test/minitest/stats_plugin.rb +1 -1
  263. metadata +21 -23
  264. data/lib/ffi-glib/array_methods.rb +0 -16
  265. data/test/gir_ffi/in_out_pointer_test.rb +0 -56
@@ -20,7 +20,7 @@ module GObjectIntrospection
20
20
  def value
21
21
  case type_tag
22
22
  when :utf8
23
- raw_value.force_encoding('utf-8')
23
+ raw_value.force_encoding("utf-8")
24
24
  when :gboolean
25
25
  raw_value.nonzero? ? true : false
26
26
  else
@@ -29,7 +29,7 @@ module GObjectIntrospection
29
29
  end
30
30
 
31
31
  def constant_type
32
- ITypeInfo.wrap Lib.g_constant_info_get_type self
32
+ @constant_type ||= ITypeInfo.wrap Lib.g_constant_info_get_type self
33
33
  end
34
34
 
35
35
  private
@@ -13,6 +13,7 @@ module GObjectIntrospection
13
13
  end
14
14
  ##
15
15
  build_array_method :values
16
+ build_finder_method :find_value, :n_values, :value
16
17
 
17
18
  def get_n_methods
18
19
  Lib.g_enum_info_get_n_methods self
@@ -17,7 +17,7 @@ module GObjectIntrospection
17
17
  end
18
18
 
19
19
  def field_type
20
- ITypeInfo.wrap Lib.g_field_info_get_type(self)
20
+ @field_type ||= ITypeInfo.wrap Lib.g_field_info_get_type(self)
21
21
  end
22
22
 
23
23
  def readable?
@@ -9,7 +9,7 @@ module GObjectIntrospection
9
9
  end
10
10
 
11
11
  def flags
12
- Lib.g_function_info_get_flags self
12
+ @flags ||= Lib.g_function_info_get_flags self
13
13
  end
14
14
 
15
15
  def method?
@@ -81,7 +81,7 @@ module GObjectIntrospection
81
81
  build_array_method :constants
82
82
 
83
83
  def iface_struct
84
- IStructInfo.wrap Lib.g_interface_info_get_iface_struct(self)
84
+ @iface_struct ||= IStructInfo.wrap Lib.g_interface_info_get_iface_struct(self)
85
85
  end
86
86
  end
87
87
  end
@@ -21,7 +21,7 @@ module GObjectIntrospection
21
21
  end
22
22
 
23
23
  def parent
24
- IObjectInfo.wrap Lib.g_object_info_get_parent(self)
24
+ @parent ||= IObjectInfo.wrap Lib.g_object_info_get_parent(self)
25
25
  end
26
26
 
27
27
  def n_interfaces
@@ -59,7 +59,7 @@ module GObjectIntrospection
59
59
  end
60
60
 
61
61
  def find_property(name)
62
- name = name.to_s.tr('_', '-')
62
+ name = name.to_s.tr("_", "-")
63
63
  properties.find { |prop| prop.name == name }
64
64
  end
65
65
 
@@ -5,11 +5,11 @@ module GObjectIntrospection
5
5
  # Represents a property of an IObjectInfo or an IInterfaceInfo.
6
6
  class IPropertyInfo < IBaseInfo
7
7
  def property_type
8
- ITypeInfo.wrap Lib.g_property_info_get_type(self)
8
+ @property_type ||= ITypeInfo.wrap Lib.g_property_info_get_type(self)
9
9
  end
10
10
 
11
11
  def flags
12
- Lib.g_property_info_get_flags self
12
+ @flags ||= Lib.g_property_info_get_flags self
13
13
  end
14
14
 
15
15
  def readable?
@@ -1,10 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'singleton'
3
+ require "singleton"
4
4
 
5
- require 'ffi-gobject_introspection/lib'
6
- require 'ffi-gobject_introspection/strv'
7
- require 'ffi-gobject_introspection/g_error'
5
+ require "ffi-gobject_introspection/lib"
6
+ require "ffi-gobject_introspection/strv"
7
+ require "ffi-gobject_introspection/g_error"
8
8
 
9
9
  module GObjectIntrospection
10
10
  # The Gobject Introspection Repository. This class is the point of
@@ -58,13 +58,16 @@ module GObjectIntrospection
58
58
  end
59
59
 
60
60
  def find_by_name(namespace, name)
61
- wrap_info Lib.g_irepository_find_by_name(self, namespace, name)
61
+ @name_cache ||= {}
62
+ @name_cache[[namespace, name]] ||=
63
+ wrap_info Lib.g_irepository_find_by_name(self, namespace, name)
62
64
  end
63
65
 
64
66
  def find_by_gtype(gtype)
65
67
  raise ArgumentError, "Type #{gtype} is not a valid type" if gtype == 0
66
68
 
67
- wrap_info Lib.g_irepository_find_by_gtype(self, gtype)
69
+ @gtype_cache ||= {}
70
+ @gtype_cache[gtype] ||= wrap_info Lib.g_irepository_find_by_gtype(self, gtype)
68
71
  end
69
72
 
70
73
  def dependencies(namespace)
@@ -21,7 +21,8 @@ module GObjectIntrospection
21
21
  end
22
22
 
23
23
  def get_method(index)
24
- IFunctionInfo.wrap Lib.g_struct_info_get_method(self, index)
24
+ @method_cache ||= []
25
+ @method_cache[index] ||= IFunctionInfo.wrap Lib.g_struct_info_get_method(self, index)
25
26
  end
26
27
 
27
28
  ##
@@ -5,24 +5,30 @@ module GObjectIntrospection
5
5
  # Represents type information, direction, transfer etc.
6
6
  class ITypeInfo < IBaseInfo
7
7
  def pointer?
8
- Lib.g_type_info_is_pointer self
8
+ return @pointer_eh if defined? @pointer_eh
9
+
10
+ @pointer_eh = Lib.g_type_info_is_pointer self
9
11
  end
10
12
 
11
13
  def tag
12
- Lib.g_type_info_get_tag self
14
+ @tag ||= Lib.g_type_info_get_tag self
13
15
  end
14
16
 
15
17
  def param_type(index)
16
- ITypeInfo.wrap Lib.g_type_info_get_param_type(self, index)
18
+ @param_type_cache ||= []
19
+ @param_type_cache[index] ||=
20
+ ITypeInfo.wrap Lib.g_type_info_get_param_type(self, index)
17
21
  end
18
22
 
19
23
  def interface
20
- ptr = Lib.g_type_info_get_interface self
21
- IRepository.wrap_ibaseinfo_pointer ptr
24
+ @interface ||= begin
25
+ ptr = Lib.g_type_info_get_interface self
26
+ IRepository.wrap_ibaseinfo_pointer ptr
27
+ end
22
28
  end
23
29
 
24
30
  def array_length
25
- Lib.g_type_info_get_array_length self
31
+ @array_length ||= Lib.g_type_info_get_array_length self
26
32
  end
27
33
 
28
34
  def array_fixed_size
@@ -38,7 +44,7 @@ module GObjectIntrospection
38
44
  end
39
45
 
40
46
  def name
41
- raise 'Should not call this for ITypeInfo'
47
+ raise "Should not call this for ITypeInfo"
42
48
  end
43
49
  end
44
50
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'ffi-gobject_introspection/i_base_info'
3
+ require "ffi-gobject_introspection/i_base_info"
4
4
 
5
5
  module GObjectIntrospection
6
6
  # Wraps a GIBaseInfo struct in the case where the info type is :unresolved.
@@ -13,7 +13,7 @@ module GObjectIntrospection
13
13
  end
14
14
 
15
15
  def invoker
16
- IFunctionInfo.wrap Lib.g_vfunc_info_get_invoker self
16
+ @invoker ||= IFunctionInfo.wrap Lib.g_vfunc_info_get_invoker self
17
17
  end
18
18
  end
19
19
  end
@@ -1,14 +1,14 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'ffi'
4
- require 'ffi/bit_masks'
3
+ require "ffi"
4
+ require "ffi/bit_masks"
5
5
 
6
6
  module GObjectIntrospection
7
7
  # Module for attaching functions from the girepository library
8
8
  module Lib
9
9
  extend FFI::Library
10
10
  extend FFI::BitMasks
11
- ffi_lib 'girepository-1.0'
11
+ ffi_lib "girepository-1.0.so.1"
12
12
 
13
13
  # IRepository
14
14
  enum :IRepositoryLoadFlags, [:LAZY, (1 << 0)]
@@ -116,24 +116,35 @@ module GObjectIntrospection
116
116
  attach_function :g_arg_info_get_destroy, [:pointer], :int
117
117
  attach_function :g_arg_info_get_type, [:pointer], :pointer
118
118
 
119
- # The values of ITypeTag were changed in an incompatible way between
120
- # gobject-introspection version 0.9.0 and 0.9.1. Therefore, we need to
121
- # retrieve the correct values before declaring the ITypeTag enum.
122
- attach_function :tmp_type_tag_to_string, :g_type_tag_to_string, [:int], :string
123
- type_tag_map = (0..31).map do |id|
124
- sym = tmp_type_tag_to_string(id).to_sym
125
- if sym == :unknown
126
- nil
127
- else
128
- [sym, id]
129
- end
130
- end.compact.flatten
131
- enum :ITypeTag, type_tag_map
132
-
133
- # Now, attach g_type_tag_to_string again under its own name with an
134
- # improved signature.
119
+ # ITypeTag
120
+ enum :ITypeTag, [
121
+ :void,
122
+ :gboolean,
123
+ :gint8,
124
+ :guint8,
125
+ :gint16,
126
+ :guint16,
127
+ :gint32,
128
+ :guint32,
129
+ :gint64,
130
+ :guint64,
131
+ :gfloat,
132
+ :gdouble,
133
+ :GType,
134
+ :utf8,
135
+ :filename,
136
+ :array,
137
+ :interface,
138
+ :glist,
139
+ :gslist,
140
+ :ghash,
141
+ :error,
142
+ :gunichar
143
+ ]
144
+
135
145
  attach_function :g_type_tag_to_string, [:ITypeTag], :string
136
146
 
147
+ # ITypeInfo
137
148
  enum :IArrayType, [
138
149
  :c,
139
150
  :array,
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'ffi'
3
+ require "ffi"
4
4
 
5
5
  module GObjectIntrospection
6
6
  # Represents a null-terminated array of strings.
@@ -5,4 +5,4 @@
5
5
  # that can only be created fully once GirFFI is fully loaded.
6
6
 
7
7
  # Some base GObject functions and constants are needed by GirFFI.
8
- require 'gir_ffi-base/gobject'
8
+ require "gir_ffi-base/gobject"
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # Ensure GObject is defined by GirFFI itself
4
- raise 'The module GObject was already defined elsewhere' if Kernel.const_defined? :GObject
4
+ raise "The module GObject was already defined elsewhere" if Kernel.const_defined? :GObject
5
5
 
6
- require 'gir_ffi-base/gobject/lib'
6
+ require "gir_ffi-base/gobject/lib"
7
7
 
8
8
  # The part of the GObject namespace that is needed by GirFFI.
9
9
  #
@@ -17,32 +17,33 @@ module GObject
17
17
  Lib.g_type_fundamental gtype
18
18
  end
19
19
 
20
- TYPE_INVALID = type_from_name('invalid')
21
- TYPE_NONE = type_from_name('void')
22
- TYPE_INTERFACE = type_from_name('GInterface')
23
- TYPE_CHAR = type_from_name('gchar')
24
- TYPE_UCHAR = type_from_name('guchar')
25
- TYPE_BOOLEAN = type_from_name('gboolean')
26
- TYPE_INT = type_from_name('gint')
27
- TYPE_UINT = type_from_name('guint')
28
- TYPE_LONG = type_from_name('glong')
29
- TYPE_ULONG = type_from_name('gulong')
30
- TYPE_INT64 = type_from_name('gint64')
31
- TYPE_UINT64 = type_from_name('guint64')
32
- TYPE_ENUM = type_from_name('GEnum')
33
- TYPE_FLAGS = type_from_name('GFlags')
34
- TYPE_FLOAT = type_from_name('gfloat')
35
- TYPE_DOUBLE = type_from_name('gdouble')
36
- TYPE_STRING = type_from_name('gchararray')
37
- TYPE_POINTER = type_from_name('gpointer')
38
- TYPE_BOXED = type_from_name('GBoxed')
39
- TYPE_PARAM = type_from_name('GParam')
40
- TYPE_OBJECT = type_from_name('GObject')
41
- TYPE_GTYPE = type_from_name('GType')
42
- TYPE_VARIANT = type_from_name('GVariant')
20
+ TYPE_INVALID = type_from_name("invalid")
21
+ TYPE_NONE = type_from_name("void")
22
+ TYPE_INTERFACE = type_from_name("GInterface")
23
+ TYPE_CHAR = type_from_name("gchar")
24
+ TYPE_UCHAR = type_from_name("guchar")
25
+ TYPE_BOOLEAN = type_from_name("gboolean")
26
+ TYPE_INT = type_from_name("gint")
27
+ TYPE_UINT = type_from_name("guint")
28
+ TYPE_LONG = type_from_name("glong")
29
+ TYPE_ULONG = type_from_name("gulong")
30
+ TYPE_INT64 = type_from_name("gint64")
31
+ TYPE_UINT64 = type_from_name("guint64")
32
+ TYPE_ENUM = type_from_name("GEnum")
33
+ TYPE_FLAGS = type_from_name("GFlags")
34
+ TYPE_FLOAT = type_from_name("gfloat")
35
+ TYPE_DOUBLE = type_from_name("gdouble")
36
+ TYPE_STRING = type_from_name("gchararray")
37
+ TYPE_POINTER = type_from_name("gpointer")
38
+ TYPE_BOXED = type_from_name("GBoxed")
39
+ TYPE_PARAM = type_from_name("GParam")
40
+ TYPE_OBJECT = type_from_name("GObject")
41
+ TYPE_GTYPE = type_from_name("GType")
42
+ TYPE_VARIANT = type_from_name("GVariant")
43
43
 
44
44
  TYPE_ARRAY = Lib.g_array_get_type
45
45
  TYPE_BYTE_ARRAY = Lib.g_byte_array_get_type
46
+ TYPE_ERROR = Lib.g_error_get_type
46
47
  TYPE_HASH_TABLE = Lib.g_hash_table_get_type
47
48
  TYPE_STRV = Lib.g_strv_get_type
48
49
  end
@@ -1,17 +1,18 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'ffi/bit_masks'
3
+ require "ffi/bit_masks"
4
4
 
5
5
  module GObject
6
6
  # Module for attaching functions from the gobject library
7
7
  module Lib
8
8
  extend FFI::Library
9
9
  extend FFI::BitMasks
10
- ffi_lib 'gobject-2.0'
10
+ ffi_lib "gobject-2.0"
11
11
  attach_function :g_type_from_name, [:string], :size_t
12
12
  attach_function :g_type_fundamental, [:size_t], :size_t
13
13
  attach_function :g_array_get_type, [], :size_t
14
14
  attach_function :g_byte_array_get_type, [], :size_t
15
+ attach_function :g_error_get_type, [], :size_t
15
16
  attach_function :g_hash_table_get_type, [], :size_t
16
17
  attach_function :g_strv_get_type, [], :size_t
17
18
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'gir_ffi/core'
3
+ require "gir_ffi/core"
4
4
 
5
- require 'ffi-glib'
6
- require 'ffi-gobject'
5
+ require "ffi-glib"
6
+ require "ffi-gobject"
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'gir_ffi/lib_c'
3
+ require "gir_ffi/lib_c"
4
4
 
5
5
  module GirFFI
6
6
  # Helper module for alloction-related functionality.
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'gir_ffi/allocation_helper'
4
- require 'gir_ffi/builder'
5
- require 'gir_ffi/glib_error'
6
- require 'gir_ffi/object_store'
3
+ require "gir_ffi/allocation_helper"
4
+ require "gir_ffi/builder"
5
+ require "gir_ffi/glib_error"
6
+ require "gir_ffi/object_store"
7
7
 
8
8
  module GirFFI
9
9
  # Helper module containing methods used during argument conversion in
@@ -1,29 +1,17 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module GirFFI
4
- # The InOutPointer class handles conversion between ruby types and
5
- # pointers for arguments with direction :inout and :out.
6
- #
7
- class InOutPointer < FFI::Pointer
4
+ # The ArrayElementConvertor class handles conversion from C array elements to
5
+ # ruby values
6
+ class ArrayElementConvertor
8
7
  attr_reader :value_type
8
+ attr_reader :pointer
9
9
 
10
10
  def initialize(type, ptr)
11
11
  @value_type = type
12
- super ptr
12
+ @pointer = ptr
13
13
  end
14
14
 
15
- def to_value
16
- case value_ffi_type
17
- when Module
18
- value_ffi_type.get_value_from_pointer(self, 0)
19
- when Symbol
20
- send("get_#{value_ffi_type}", 0)
21
- else
22
- raise NotImplementedError
23
- end
24
- end
25
-
26
- # Convert more fully to a ruby value than #to_value
27
15
  def to_ruby_value
28
16
  bare_value = to_value
29
17
  case value_type
@@ -38,14 +26,19 @@ module GirFFI
38
26
  end
39
27
  end
40
28
 
41
- def self.allocate_new(type)
42
- ffi_type = TypeMap.type_specification_to_ffi_type type
43
- ptr = FFI::MemoryPointer.new(ffi_type)
44
- new type, ptr
45
- end
46
-
47
29
  private
48
30
 
31
+ def to_value
32
+ case value_ffi_type
33
+ when Module
34
+ value_ffi_type.get_value_from_pointer(pointer, 0)
35
+ when Symbol
36
+ pointer.send("get_#{value_ffi_type}", 0)
37
+ else
38
+ raise NotImplementedError
39
+ end
40
+ end
41
+
49
42
  def value_ffi_type
50
43
  @value_ffi_type ||= TypeMap.type_specification_to_ffi_type value_type
51
44
  end