gir_ffi 0.14.1 → 0.15.4

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 (281) hide show
  1. checksums.yaml +4 -4
  2. data/Changelog.md +56 -0
  3. data/README.md +12 -12
  4. data/TODO.md +14 -35
  5. data/docs/Documentation.md +6 -0
  6. data/docs/Subclassing.md +38 -0
  7. data/lib/ffi-glib.rb +26 -21
  8. data/lib/ffi-glib/array.rb +14 -4
  9. data/lib/ffi-glib/byte_array.rb +9 -3
  10. data/lib/ffi-glib/container_class_methods.rb +1 -1
  11. data/lib/ffi-glib/destroy_notify.rb +2 -2
  12. data/lib/ffi-glib/error.rb +1 -1
  13. data/lib/ffi-glib/hash_table.rb +4 -5
  14. data/lib/ffi-glib/list.rb +12 -6
  15. data/lib/ffi-glib/list_methods.rb +13 -1
  16. data/lib/ffi-glib/main_loop.rb +3 -3
  17. data/lib/ffi-glib/ptr_array.rb +30 -8
  18. data/lib/ffi-glib/s_list.rb +11 -5
  19. data/lib/ffi-glib/variant.rb +1 -1
  20. data/lib/ffi-gobject.rb +13 -16
  21. data/lib/ffi-gobject/object.rb +82 -87
  22. data/lib/ffi-gobject/object_class.rb +1 -1
  23. data/lib/ffi-gobject/param_spec.rb +1 -1
  24. data/lib/ffi-gobject/ruby_closure.rb +2 -2
  25. data/lib/ffi-gobject/value.rb +136 -126
  26. data/lib/ffi-gobject_introspection.rb +20 -20
  27. data/lib/ffi-gobject_introspection/gobject_type_init.rb +2 -2
  28. data/lib/ffi-gobject_introspection/i_arg_info.rb +2 -2
  29. data/lib/ffi-gobject_introspection/i_base_info.rb +34 -23
  30. data/lib/ffi-gobject_introspection/i_callable_info.rb +4 -4
  31. data/lib/ffi-gobject_introspection/i_constant_info.rb +2 -2
  32. data/lib/ffi-gobject_introspection/i_enum_info.rb +1 -0
  33. data/lib/ffi-gobject_introspection/i_field_info.rb +1 -1
  34. data/lib/ffi-gobject_introspection/i_function_info.rb +1 -1
  35. data/lib/ffi-gobject_introspection/i_interface_info.rb +1 -1
  36. data/lib/ffi-gobject_introspection/i_object_info.rb +2 -2
  37. data/lib/ffi-gobject_introspection/i_property_info.rb +2 -2
  38. data/lib/ffi-gobject_introspection/i_repository.rb +9 -6
  39. data/lib/ffi-gobject_introspection/i_struct_info.rb +2 -1
  40. data/lib/ffi-gobject_introspection/i_type_info.rb +13 -7
  41. data/lib/ffi-gobject_introspection/i_unresolved_info.rb +1 -1
  42. data/lib/ffi-gobject_introspection/i_vfunc_info.rb +1 -1
  43. data/lib/ffi-gobject_introspection/lib.rb +30 -19
  44. data/lib/ffi-gobject_introspection/strv.rb +1 -1
  45. data/lib/gir_ffi-base.rb +1 -1
  46. data/lib/gir_ffi-base/gobject.rb +26 -25
  47. data/lib/gir_ffi-base/gobject/lib.rb +7 -2
  48. data/lib/gir_ffi.rb +3 -3
  49. data/lib/gir_ffi/allocation_helper.rb +1 -1
  50. data/lib/gir_ffi/arg_helper.rb +4 -4
  51. data/lib/gir_ffi/{in_out_pointer.rb → array_element_convertor.rb} +16 -24
  52. data/lib/gir_ffi/boolean.rb +1 -1
  53. data/lib/gir_ffi/boxed_base.rb +2 -6
  54. data/lib/gir_ffi/builder.rb +19 -11
  55. data/lib/gir_ffi/builder_helper.rb +10 -2
  56. data/lib/gir_ffi/builders/argument_builder.rb +19 -19
  57. data/lib/gir_ffi/builders/argument_builder_collection.rb +2 -2
  58. data/lib/gir_ffi/builders/base_argument_builder.rb +2 -1
  59. data/lib/gir_ffi/builders/base_method_builder.rb +8 -8
  60. data/lib/gir_ffi/builders/base_return_value_builder.rb +1 -1
  61. data/lib/gir_ffi/builders/base_type_builder.rb +2 -2
  62. data/lib/gir_ffi/builders/c_to_ruby_convertor.rb +5 -5
  63. data/lib/gir_ffi/builders/callback_argument_builder.rb +10 -8
  64. data/lib/gir_ffi/builders/callback_builder.rb +28 -14
  65. data/lib/gir_ffi/builders/callback_return_value_builder.rb +6 -8
  66. data/lib/gir_ffi/builders/class_struct_builder.rb +24 -0
  67. data/lib/gir_ffi/builders/closure_argument_builder.rb +1 -1
  68. data/lib/gir_ffi/builders/closure_return_value_builder.rb +1 -1
  69. data/lib/gir_ffi/builders/constant_builder.rb +1 -1
  70. data/lib/gir_ffi/builders/constructor_builder.rb +9 -9
  71. data/lib/gir_ffi/builders/enum_builder.rb +11 -7
  72. data/lib/gir_ffi/builders/field_builder.rb +20 -18
  73. data/lib/gir_ffi/builders/flags_builder.rb +2 -2
  74. data/lib/gir_ffi/builders/full_c_to_ruby_convertor.rb +1 -1
  75. data/lib/gir_ffi/builders/function_builder.rb +11 -5
  76. data/lib/gir_ffi/builders/initializer_builder.rb +3 -3
  77. data/lib/gir_ffi/builders/initializer_return_value_builder.rb +2 -2
  78. data/lib/gir_ffi/builders/interface_builder.rb +5 -3
  79. data/lib/gir_ffi/builders/mapping_method_builder.rb +10 -10
  80. data/lib/gir_ffi/builders/marshalling_method_builder.rb +12 -9
  81. data/lib/gir_ffi/builders/method_template.rb +5 -5
  82. data/lib/gir_ffi/builders/module_builder.rb +7 -7
  83. data/lib/gir_ffi/builders/null_argument_builder.rb +0 -2
  84. data/lib/gir_ffi/builders/null_return_value_builder.rb +0 -2
  85. data/lib/gir_ffi/builders/object_builder.rb +22 -12
  86. data/lib/gir_ffi/builders/property_argument_builder.rb +1 -1
  87. data/lib/gir_ffi/builders/property_builder.rb +14 -14
  88. data/lib/gir_ffi/builders/property_return_value_builder.rb +1 -1
  89. data/lib/gir_ffi/builders/registered_type_builder.rb +14 -5
  90. data/lib/gir_ffi/builders/return_value_builder.rb +4 -4
  91. data/lib/gir_ffi/builders/ruby_to_c_convertor.rb +6 -6
  92. data/lib/gir_ffi/builders/signal_closure_builder.rb +5 -7
  93. data/lib/gir_ffi/builders/struct_builder.rb +8 -6
  94. data/lib/gir_ffi/builders/struct_like.rb +1 -1
  95. data/lib/gir_ffi/builders/type_builder.rb +12 -12
  96. data/lib/gir_ffi/builders/unintrospectable_boxed_builder.rb +2 -2
  97. data/lib/gir_ffi/builders/unintrospectable_builder.rb +2 -2
  98. data/lib/gir_ffi/builders/union_builder.rb +4 -4
  99. data/lib/gir_ffi/builders/user_defined_builder.rb +10 -3
  100. data/lib/gir_ffi/builders/vfunc_argument_builder.rb +2 -2
  101. data/lib/gir_ffi/builders/vfunc_builder.rb +8 -8
  102. data/lib/gir_ffi/builders/with_layout.rb +2 -2
  103. data/lib/gir_ffi/callback_base.rb +7 -9
  104. data/lib/gir_ffi/class_base.rb +6 -5
  105. data/lib/gir_ffi/core.rb +36 -22
  106. data/lib/gir_ffi/enum_base.rb +1 -1
  107. data/lib/gir_ffi/enum_like_base.rb +2 -2
  108. data/lib/gir_ffi/error_argument_info.rb +2 -2
  109. data/lib/gir_ffi/error_type_info.rb +1 -1
  110. data/lib/gir_ffi/ffi_ext.rb +1 -1
  111. data/lib/gir_ffi/ffi_ext/pointer.rb +1 -1
  112. data/lib/gir_ffi/flags_base.rb +1 -1
  113. data/lib/gir_ffi/glib_error.rb +1 -2
  114. data/lib/gir_ffi/in_pointer.rb +17 -0
  115. data/lib/gir_ffi/info_ext.rb +15 -15
  116. data/lib/gir_ffi/info_ext/full_type_name.rb +3 -3
  117. data/lib/gir_ffi/info_ext/i_arg_info.rb +1 -1
  118. data/lib/gir_ffi/info_ext/i_callable_info.rb +1 -1
  119. data/lib/gir_ffi/info_ext/i_callback_info.rb +1 -1
  120. data/lib/gir_ffi/info_ext/i_field_info.rb +1 -1
  121. data/lib/gir_ffi/info_ext/i_function_info.rb +1 -1
  122. data/lib/gir_ffi/info_ext/i_property_info.rb +2 -2
  123. data/lib/gir_ffi/info_ext/i_registered_type_info.rb +4 -5
  124. data/lib/gir_ffi/info_ext/i_signal_info.rb +7 -3
  125. data/lib/gir_ffi/info_ext/i_type_info.rb +48 -26
  126. data/lib/gir_ffi/info_ext/i_unresolved_info.rb +1 -1
  127. data/lib/gir_ffi/info_ext/i_value_info.rb +2 -2
  128. data/lib/gir_ffi/info_ext/i_vfunc_info.rb +2 -2
  129. data/lib/gir_ffi/info_ext/safe_constant_name.rb +8 -8
  130. data/lib/gir_ffi/info_ext/safe_function_name.rb +2 -2
  131. data/lib/gir_ffi/interface_base.rb +3 -3
  132. data/lib/gir_ffi/lib_c.rb +1 -1
  133. data/lib/gir_ffi/method_stubber.rb +1 -1
  134. data/lib/gir_ffi/module_base.rb +1 -1
  135. data/lib/gir_ffi/object_base.rb +30 -4
  136. data/lib/gir_ffi/receiver_argument_info.rb +1 -1
  137. data/lib/gir_ffi/receiver_type_info.rb +2 -2
  138. data/lib/gir_ffi/registered_type_base.rb +1 -1
  139. data/lib/gir_ffi/return_value_info.rb +1 -2
  140. data/lib/gir_ffi/sized_array.rb +4 -2
  141. data/lib/gir_ffi/struct.rb +1 -1
  142. data/lib/gir_ffi/struct_base.rb +2 -10
  143. data/lib/gir_ffi/struct_like_base.rb +9 -5
  144. data/lib/gir_ffi/type_map.rb +2 -23
  145. data/lib/gir_ffi/unintrospectable_boxed_info.rb +2 -2
  146. data/lib/gir_ffi/unintrospectable_type_info.rb +6 -2
  147. data/lib/gir_ffi/union.rb +1 -1
  148. data/lib/gir_ffi/union_base.rb +2 -10
  149. data/lib/gir_ffi/user_defined_object_info.rb +9 -4
  150. data/lib/gir_ffi/user_defined_property_info.rb +33 -33
  151. data/lib/gir_ffi/version.rb +1 -1
  152. data/lib/gir_ffi/vfunc_implementation.rb +1 -0
  153. metadata +102 -155
  154. data/Gemfile +0 -12
  155. data/Rakefile +0 -9
  156. data/lib/ffi-glib/array_methods.rb +0 -16
  157. data/tasks/test.rake +0 -203
  158. data/test/base_test_helper.rb +0 -63
  159. data/test/ffi-glib/array_test.rb +0 -188
  160. data/test/ffi-glib/byte_array_test.rb +0 -22
  161. data/test/ffi-glib/bytes_test.rb +0 -56
  162. data/test/ffi-glib/closure_test.rb +0 -38
  163. data/test/ffi-glib/destroy_notify_test.rb +0 -18
  164. data/test/ffi-glib/hash_table_test.rb +0 -68
  165. data/test/ffi-glib/list_test.rb +0 -86
  166. data/test/ffi-glib/main_loop_test.rb +0 -53
  167. data/test/ffi-glib/ptr_array_test.rb +0 -112
  168. data/test/ffi-glib/ruby_closure_test.rb +0 -62
  169. data/test/ffi-glib/s_list_test.rb +0 -76
  170. data/test/ffi-glib/strv_test.rb +0 -60
  171. data/test/ffi-glib/variant_test.rb +0 -12
  172. data/test/ffi-gobject/gobject_test.rb +0 -72
  173. data/test/ffi-gobject/object_class_test.rb +0 -31
  174. data/test/ffi-gobject/object_test.rb +0 -140
  175. data/test/ffi-gobject/param_spec_test.rb +0 -32
  176. data/test/ffi-gobject/value_test.rb +0 -370
  177. data/test/ffi-gobject_introspection/gobject_type_init_test.rb +0 -26
  178. data/test/ffi-gobject_introspection/i_base_info_test.rb +0 -53
  179. data/test/ffi-gobject_introspection/i_constant_info_test.rb +0 -33
  180. data/test/ffi-gobject_introspection/i_enum_info_test.rb +0 -18
  181. data/test/ffi-gobject_introspection/i_function_info_test.rb +0 -6
  182. data/test/ffi-gobject_introspection/i_interface_info_test.rb +0 -23
  183. data/test/ffi-gobject_introspection/i_object_info_test.rb +0 -49
  184. data/test/ffi-gobject_introspection/i_property_info_test.rb +0 -47
  185. data/test/ffi-gobject_introspection/i_registered_type_info_test.rb +0 -27
  186. data/test/ffi-gobject_introspection/i_repository_test.rb +0 -81
  187. data/test/ffi-gobject_introspection/i_struct_info_test.rb +0 -23
  188. data/test/ffi-gobject_introspection/i_type_info_test.rb +0 -33
  189. data/test/ffi-gobject_introspection/i_union_info_test.rb +0 -17
  190. data/test/ffi-gobject_introspection/i_vfunc_info_test.rb +0 -41
  191. data/test/ffi-gobject_introspection/lib_test.rb +0 -13
  192. data/test/ffi-gobject_introspection/strv_test.rb +0 -46
  193. data/test/ffi-gobject_test.rb +0 -151
  194. data/test/gir_ffi/allocation_helper_test.rb +0 -36
  195. data/test/gir_ffi/arg_helper_test.rb +0 -140
  196. data/test/gir_ffi/boolean_test.rb +0 -43
  197. data/test/gir_ffi/boxed_base_test.rb +0 -65
  198. data/test/gir_ffi/builder_test.rb +0 -300
  199. data/test/gir_ffi/builders/argument_builder_test.rb +0 -657
  200. data/test/gir_ffi/builders/base_argument_builder_test.rb +0 -6
  201. data/test/gir_ffi/builders/callback_argument_builder_test.rb +0 -129
  202. data/test/gir_ffi/builders/callback_builder_test.rb +0 -118
  203. data/test/gir_ffi/builders/callback_return_value_builder_test.rb +0 -85
  204. data/test/gir_ffi/builders/constant_builder_test.rb +0 -6
  205. data/test/gir_ffi/builders/constructor_builder_test.rb +0 -37
  206. data/test/gir_ffi/builders/enum_builder_test.rb +0 -23
  207. data/test/gir_ffi/builders/field_builder_test.rb +0 -134
  208. data/test/gir_ffi/builders/function_builder_test.rb +0 -538
  209. data/test/gir_ffi/builders/initializer_builder_test.rb +0 -54
  210. data/test/gir_ffi/builders/interface_builder_test.rb +0 -32
  211. data/test/gir_ffi/builders/module_builder_test.rb +0 -43
  212. data/test/gir_ffi/builders/object_builder_test.rb +0 -98
  213. data/test/gir_ffi/builders/property_builder_test.rb +0 -161
  214. data/test/gir_ffi/builders/registered_type_builder_test.rb +0 -30
  215. data/test/gir_ffi/builders/return_value_builder_test.rb +0 -440
  216. data/test/gir_ffi/builders/signal_closure_builder_test.rb +0 -188
  217. data/test/gir_ffi/builders/struct_builder_test.rb +0 -93
  218. data/test/gir_ffi/builders/unintrospectable_boxed_builder_test.rb +0 -35
  219. data/test/gir_ffi/builders/unintrospectable_builder_test.rb +0 -73
  220. data/test/gir_ffi/builders/union_builder_test.rb +0 -31
  221. data/test/gir_ffi/builders/user_defined_builder_test.rb +0 -524
  222. data/test/gir_ffi/builders/vfunc_argument_builder_test.rb +0 -101
  223. data/test/gir_ffi/builders/vfunc_builder_test.rb +0 -253
  224. data/test/gir_ffi/callback_base_test.rb +0 -22
  225. data/test/gir_ffi/class_base_test.rb +0 -168
  226. data/test/gir_ffi/core_test.rb +0 -98
  227. data/test/gir_ffi/enum_base_test.rb +0 -43
  228. data/test/gir_ffi/error_type_info_test.rb +0 -50
  229. data/test/gir_ffi/ffi_ext/pointer_test.rb +0 -20
  230. data/test/gir_ffi/g_type_test.rb +0 -31
  231. data/test/gir_ffi/in_out_pointer_test.rb +0 -56
  232. data/test/gir_ffi/in_pointer_test.rb +0 -183
  233. data/test/gir_ffi/info_ext/i_callable_info_test.rb +0 -26
  234. data/test/gir_ffi/info_ext/i_callback_info_test.rb +0 -21
  235. data/test/gir_ffi/info_ext/i_field_info_test.rb +0 -37
  236. data/test/gir_ffi/info_ext/i_function_info_test.rb +0 -74
  237. data/test/gir_ffi/info_ext/i_signal_info_test.rb +0 -32
  238. data/test/gir_ffi/info_ext/i_type_info_test.rb +0 -697
  239. data/test/gir_ffi/info_ext/i_unresolved_info_test.rb +0 -19
  240. data/test/gir_ffi/info_ext/safe_constant_name_test.rb +0 -26
  241. data/test/gir_ffi/info_ext/safe_function_name_test.rb +0 -26
  242. data/test/gir_ffi/interface_base_test.rb +0 -20
  243. data/test/gir_ffi/method_stubber_test.rb +0 -65
  244. data/test/gir_ffi/object_base_test.rb +0 -64
  245. data/test/gir_ffi/object_store_test.rb +0 -41
  246. data/test/gir_ffi/receiver_argument_info_test.rb +0 -33
  247. data/test/gir_ffi/sized_array_test.rb +0 -206
  248. data/test/gir_ffi/struct_base_test.rb +0 -23
  249. data/test/gir_ffi/struct_like_base_test.rb +0 -167
  250. data/test/gir_ffi/type_map_test.rb +0 -17
  251. data/test/gir_ffi/unintrospectable_type_info_test.rb +0 -121
  252. data/test/gir_ffi/union_base_test.rb +0 -23
  253. data/test/gir_ffi/user_defined_object_info_test.rb +0 -119
  254. data/test/gir_ffi/user_defined_property_info_test.rb +0 -39
  255. data/test/gir_ffi/variable_name_generator_test.rb +0 -18
  256. data/test/gir_ffi/version_test.rb +0 -9
  257. data/test/gir_ffi/zero_terminated_test.rb +0 -108
  258. data/test/gir_ffi_test_helper.rb +0 -84
  259. data/test/integration/callback_exceptions_test.rb +0 -63
  260. data/test/integration/derived_classes_test.rb +0 -53
  261. data/test/integration/generated_everything_test.rb +0 -452
  262. data/test/integration/generated_gimarshallingtests_test.rb +0 -2995
  263. data/test/integration/generated_gio_test.rb +0 -116
  264. data/test/integration/generated_glib_test.rb +0 -12
  265. data/test/integration/generated_gobject_test.rb +0 -116
  266. data/test/integration/generated_gst_test.rb +0 -34
  267. data/test/integration/generated_gtk_source_test.rb +0 -27
  268. data/test/integration/generated_gtop_test.rb +0 -29
  269. data/test/integration/generated_pango_ft2_test.rb +0 -17
  270. data/test/integration/generated_pango_test.rb +0 -24
  271. data/test/integration/generated_regress_test.rb +0 -3850
  272. data/test/integration/generated_secret_test.rb +0 -17
  273. data/test/integration/generated_utility_test.rb +0 -174
  274. data/test/integration/generated_warnlib_test.rb +0 -49
  275. data/test/integration/method_lookup_test.rb +0 -34
  276. data/test/introspection_test_helper.rb +0 -52
  277. data/test/lib/Makefile.am +0 -110
  278. data/test/lib/autogen.sh +0 -4
  279. data/test/lib/configure.ac +0 -34
  280. data/test/lib/m4/jhflags.m4 +0 -21
  281. data/test/minitest/stats_plugin.rb +0 -30
@@ -1,15 +1,15 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'ffi-gobject_introspection/i_base_info'
4
- require 'ffi-gobject_introspection/i_type_info'
5
- require 'ffi-gobject_introspection/i_arg_info'
3
+ require "ffi-gobject_introspection/i_base_info"
4
+ require "ffi-gobject_introspection/i_type_info"
5
+ require "ffi-gobject_introspection/i_arg_info"
6
6
 
7
7
  module GObjectIntrospection
8
8
  # Wraps a GICallableInfo struct; represents a callable, either
9
9
  # IFunctionInfo, ICallbackInfo or IVFuncInfo.
10
10
  class ICallableInfo < IBaseInfo
11
11
  def return_type
12
- ITypeInfo.wrap Lib.g_callable_info_get_return_type(self)
12
+ @return_type ||= ITypeInfo.wrap Lib.g_callable_info_get_return_type(self)
13
13
  end
14
14
 
15
15
  def caller_owns
@@ -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,22 @@
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
+
11
+ ffi_lib "gobject-2.0"
12
+
11
13
  attach_function :g_type_from_name, [:string], :size_t
12
14
  attach_function :g_type_fundamental, [:size_t], :size_t
15
+ attach_function :g_type_class_ref, [:size_t], :pointer
16
+
13
17
  attach_function :g_array_get_type, [], :size_t
14
18
  attach_function :g_byte_array_get_type, [], :size_t
19
+ attach_function :g_error_get_type, [], :size_t
15
20
  attach_function :g_hash_table_get_type, [], :size_t
16
21
  attach_function :g_strv_get_type, [], :size_t
17
22
  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,16 @@
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
8
- attr_reader :value_type
4
+ # The ArrayElementConvertor class handles conversion from C array elements to
5
+ # ruby values
6
+ class ArrayElementConvertor
7
+ attr_reader :value_type, :pointer
9
8
 
10
9
  def initialize(type, ptr)
11
10
  @value_type = type
12
- super ptr
11
+ @pointer = ptr
13
12
  end
14
13
 
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
14
  def to_ruby_value
28
15
  bare_value = to_value
29
16
  case value_type
@@ -38,14 +25,19 @@ module GirFFI
38
25
  end
39
26
  end
40
27
 
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
28
  private
48
29
 
30
+ def to_value
31
+ case value_ffi_type
32
+ when Module
33
+ value_ffi_type.get_value_from_pointer(pointer, 0)
34
+ when Symbol
35
+ pointer.send("get_#{value_ffi_type}", 0)
36
+ else
37
+ raise NotImplementedError
38
+ end
39
+ end
40
+
49
41
  def value_ffi_type
50
42
  @value_ffi_type ||= TypeMap.type_specification_to_ffi_type value_type
51
43
  end