gir_ffi 0.15.2 → 0.15.7
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.
- checksums.yaml +4 -4
- data/Changelog.md +41 -0
- data/README.md +5 -6
- data/TODO.md +14 -35
- data/docs/Documentation.md +6 -0
- data/docs/Subclassing.md +38 -0
- data/lib/ffi-glib.rb +8 -3
- data/lib/ffi-glib/byte_array.rb +2 -1
- data/lib/ffi-glib/container_class_methods.rb +1 -3
- data/lib/ffi-glib/destroy_notify.rb +2 -2
- data/lib/ffi-glib/hash_table.rb +1 -2
- data/lib/ffi-glib/list.rb +11 -5
- data/lib/ffi-glib/list_methods.rb +12 -0
- data/lib/ffi-glib/s_list.rb +10 -4
- data/lib/ffi-gobject.rb +2 -5
- data/lib/ffi-gobject/object.rb +102 -92
- data/lib/ffi-gobject/object_class.rb +1 -1
- data/lib/ffi-gobject/ruby_closure.rb +1 -1
- data/lib/ffi-gobject/value.rb +108 -117
- data/lib/ffi-gobject_introspection/i_base_info.rb +35 -27
- data/lib/gir_ffi-base/gobject/lib.rb +4 -0
- data/lib/gir_ffi/array_element_convertor.rb +3 -4
- data/lib/gir_ffi/boxed_base.rb +13 -11
- data/lib/gir_ffi/builder.rb +3 -4
- data/lib/gir_ffi/builder_helper.rb +10 -2
- data/lib/gir_ffi/builders/base_argument_builder.rb +2 -2
- data/lib/gir_ffi/builders/base_method_builder.rb +1 -1
- data/lib/gir_ffi/builders/base_type_builder.rb +1 -1
- data/lib/gir_ffi/builders/callback_argument_builder.rb +2 -0
- data/lib/gir_ffi/builders/callback_builder.rb +25 -11
- data/lib/gir_ffi/builders/callback_return_value_builder.rb +4 -6
- data/lib/gir_ffi/builders/enum_builder.rb +9 -5
- data/lib/gir_ffi/builders/field_builder.rb +2 -1
- data/lib/gir_ffi/builders/function_builder.rb +1 -1
- data/lib/gir_ffi/builders/interface_builder.rb +3 -1
- data/lib/gir_ffi/builders/mapping_method_builder.rb +1 -1
- data/lib/gir_ffi/builders/marshalling_method_builder.rb +5 -2
- data/lib/gir_ffi/builders/method_template.rb +4 -4
- data/lib/gir_ffi/builders/module_builder.rb +4 -2
- data/lib/gir_ffi/builders/null_argument_builder.rb +0 -2
- data/lib/gir_ffi/builders/null_return_value_builder.rb +0 -2
- data/lib/gir_ffi/builders/object_builder.rb +18 -6
- data/lib/gir_ffi/builders/property_builder.rb +1 -2
- data/lib/gir_ffi/builders/signal_closure_builder.rb +3 -5
- data/lib/gir_ffi/builders/struct_builder.rb +34 -7
- data/lib/gir_ffi/builders/user_defined_builder.rb +8 -1
- data/lib/gir_ffi/builders/vfunc_argument_builder.rb +1 -1
- data/lib/gir_ffi/callback_base.rb +7 -8
- data/lib/gir_ffi/class_base.rb +1 -0
- data/lib/gir_ffi/core.rb +17 -2
- data/lib/gir_ffi/glib_error.rb +1 -2
- data/lib/gir_ffi/in_pointer.rb +10 -2
- data/lib/gir_ffi/interface_base.rb +5 -0
- data/lib/gir_ffi/object_base.rb +27 -0
- data/lib/gir_ffi/return_value_info.rb +1 -2
- data/lib/gir_ffi/struct_base.rb +1 -9
- data/lib/gir_ffi/struct_like_base.rb +9 -5
- data/lib/gir_ffi/type_map.rb +1 -0
- data/lib/gir_ffi/unintrospectable_type_info.rb +1 -1
- data/lib/gir_ffi/union_base.rb +1 -9
- data/lib/gir_ffi/user_defined_object_info.rb +3 -2
- data/lib/gir_ffi/version.rb +1 -1
- data/lib/gir_ffi/vfunc_implementation.rb +1 -0
- metadata +106 -143
- data/Gemfile +0 -14
- data/Rakefile +0 -9
- data/tasks/test.rake +0 -204
- data/test/base_test_helper.rb +0 -70
- data/test/ffi-glib/array_test.rb +0 -203
- data/test/ffi-glib/byte_array_test.rb +0 -28
- data/test/ffi-glib/bytes_test.rb +0 -61
- data/test/ffi-glib/closure_test.rb +0 -38
- data/test/ffi-glib/destroy_notify_test.rb +0 -18
- data/test/ffi-glib/hash_table_test.rb +0 -68
- data/test/ffi-glib/list_test.rb +0 -86
- data/test/ffi-glib/main_loop_test.rb +0 -53
- data/test/ffi-glib/ptr_array_test.rb +0 -112
- data/test/ffi-glib/ruby_closure_test.rb +0 -62
- data/test/ffi-glib/s_list_test.rb +0 -76
- data/test/ffi-glib/strv_test.rb +0 -60
- data/test/ffi-glib/variant_test.rb +0 -12
- data/test/ffi-gobject/gobject_test.rb +0 -76
- data/test/ffi-gobject/object_class_test.rb +0 -31
- data/test/ffi-gobject/object_test.rb +0 -122
- data/test/ffi-gobject/param_spec_test.rb +0 -32
- data/test/ffi-gobject/value_test.rb +0 -390
- data/test/ffi-gobject_introspection/gobject_type_init_test.rb +0 -26
- data/test/ffi-gobject_introspection/i_base_info_test.rb +0 -52
- data/test/ffi-gobject_introspection/i_constant_info_test.rb +0 -29
- data/test/ffi-gobject_introspection/i_enum_info_test.rb +0 -18
- data/test/ffi-gobject_introspection/i_function_info_test.rb +0 -6
- data/test/ffi-gobject_introspection/i_interface_info_test.rb +0 -23
- data/test/ffi-gobject_introspection/i_object_info_test.rb +0 -49
- data/test/ffi-gobject_introspection/i_property_info_test.rb +0 -47
- data/test/ffi-gobject_introspection/i_registered_type_info_test.rb +0 -27
- data/test/ffi-gobject_introspection/i_repository_test.rb +0 -81
- data/test/ffi-gobject_introspection/i_struct_info_test.rb +0 -23
- data/test/ffi-gobject_introspection/i_type_info_test.rb +0 -30
- data/test/ffi-gobject_introspection/i_union_info_test.rb +0 -17
- data/test/ffi-gobject_introspection/i_vfunc_info_test.rb +0 -41
- data/test/ffi-gobject_introspection/lib_test.rb +0 -13
- data/test/ffi-gobject_introspection/strv_test.rb +0 -46
- data/test/ffi-gobject_test.rb +0 -151
- data/test/gir_ffi/allocation_helper_test.rb +0 -36
- data/test/gir_ffi/arg_helper_test.rb +0 -139
- data/test/gir_ffi/boolean_test.rb +0 -43
- data/test/gir_ffi/boxed_base_test.rb +0 -65
- data/test/gir_ffi/builder_test.rb +0 -322
- data/test/gir_ffi/builders/argument_builder_test.rb +0 -651
- data/test/gir_ffi/builders/base_argument_builder_test.rb +0 -6
- data/test/gir_ffi/builders/callback_argument_builder_test.rb +0 -126
- data/test/gir_ffi/builders/callback_builder_test.rb +0 -117
- data/test/gir_ffi/builders/callback_return_value_builder_test.rb +0 -81
- data/test/gir_ffi/builders/constant_builder_test.rb +0 -6
- data/test/gir_ffi/builders/constructor_builder_test.rb +0 -37
- data/test/gir_ffi/builders/enum_builder_test.rb +0 -23
- data/test/gir_ffi/builders/field_builder_test.rb +0 -134
- data/test/gir_ffi/builders/function_builder_test.rb +0 -550
- data/test/gir_ffi/builders/initializer_builder_test.rb +0 -54
- data/test/gir_ffi/builders/interface_builder_test.rb +0 -32
- data/test/gir_ffi/builders/module_builder_test.rb +0 -43
- data/test/gir_ffi/builders/object_builder_test.rb +0 -98
- data/test/gir_ffi/builders/property_builder_test.rb +0 -158
- data/test/gir_ffi/builders/registered_type_builder_test.rb +0 -54
- data/test/gir_ffi/builders/return_value_builder_test.rb +0 -433
- data/test/gir_ffi/builders/signal_closure_builder_test.rb +0 -197
- data/test/gir_ffi/builders/struct_builder_test.rb +0 -93
- data/test/gir_ffi/builders/unintrospectable_boxed_builder_test.rb +0 -29
- data/test/gir_ffi/builders/unintrospectable_builder_test.rb +0 -84
- data/test/gir_ffi/builders/union_builder_test.rb +0 -28
- data/test/gir_ffi/builders/user_defined_builder_test.rb +0 -524
- data/test/gir_ffi/builders/vfunc_argument_builder_test.rb +0 -101
- data/test/gir_ffi/builders/vfunc_builder_test.rb +0 -241
- data/test/gir_ffi/callback_base_test.rb +0 -22
- data/test/gir_ffi/class_base_test.rb +0 -166
- data/test/gir_ffi/core_test.rb +0 -98
- data/test/gir_ffi/enum_base_test.rb +0 -43
- data/test/gir_ffi/error_type_info_test.rb +0 -50
- data/test/gir_ffi/ffi_ext/pointer_test.rb +0 -20
- data/test/gir_ffi/g_type_test.rb +0 -31
- data/test/gir_ffi/in_pointer_test.rb +0 -203
- data/test/gir_ffi/info_ext/i_callable_info_test.rb +0 -26
- data/test/gir_ffi/info_ext/i_callback_info_test.rb +0 -21
- data/test/gir_ffi/info_ext/i_field_info_test.rb +0 -37
- data/test/gir_ffi/info_ext/i_function_info_test.rb +0 -74
- data/test/gir_ffi/info_ext/i_signal_info_test.rb +0 -32
- data/test/gir_ffi/info_ext/i_type_info_test.rb +0 -711
- data/test/gir_ffi/info_ext/i_unresolved_info_test.rb +0 -19
- data/test/gir_ffi/info_ext/safe_constant_name_test.rb +0 -26
- data/test/gir_ffi/info_ext/safe_function_name_test.rb +0 -26
- data/test/gir_ffi/interface_base_test.rb +0 -20
- data/test/gir_ffi/method_stubber_test.rb +0 -65
- data/test/gir_ffi/object_base_test.rb +0 -64
- data/test/gir_ffi/object_store_test.rb +0 -41
- data/test/gir_ffi/receiver_argument_info_test.rb +0 -33
- data/test/gir_ffi/sized_array_test.rb +0 -206
- data/test/gir_ffi/struct_base_test.rb +0 -23
- data/test/gir_ffi/struct_like_base_test.rb +0 -167
- data/test/gir_ffi/type_map_test.rb +0 -17
- data/test/gir_ffi/unintrospectable_type_info_test.rb +0 -121
- data/test/gir_ffi/union_base_test.rb +0 -23
- data/test/gir_ffi/user_defined_object_info_test.rb +0 -119
- data/test/gir_ffi/user_defined_property_info_test.rb +0 -39
- data/test/gir_ffi/variable_name_generator_test.rb +0 -18
- data/test/gir_ffi/version_test.rb +0 -9
- data/test/gir_ffi/zero_terminated_test.rb +0 -108
- data/test/gir_ffi_test_helper.rb +0 -84
- data/test/integration/callback_exceptions_test.rb +0 -59
- data/test/integration/derived_classes_test.rb +0 -53
- data/test/integration/generated_everything_test.rb +0 -452
- data/test/integration/generated_gimarshallingtests_test.rb +0 -3096
- data/test/integration/generated_gio_test.rb +0 -116
- data/test/integration/generated_glib_test.rb +0 -10
- data/test/integration/generated_gobject_test.rb +0 -124
- data/test/integration/generated_gst_test.rb +0 -38
- data/test/integration/generated_gtk_source_test.rb +0 -32
- data/test/integration/generated_gtop_test.rb +0 -22
- data/test/integration/generated_pango_ft2_test.rb +0 -17
- data/test/integration/generated_pango_test.rb +0 -24
- data/test/integration/generated_regress_test.rb +0 -4062
- data/test/integration/generated_secret_test.rb +0 -14
- data/test/integration/generated_utility_test.rb +0 -174
- data/test/integration/generated_warnlib_test.rb +0 -43
- data/test/integration/method_lookup_test.rb +0 -34
- data/test/introspection_test_helper.rb +0 -93
- data/test/lib/Makefile.am +0 -110
- data/test/lib/autogen.sh +0 -4
- data/test/lib/configure.ac +0 -34
- data/test/lib/m4/jhflags.m4 +0 -21
- data/test/minitest/stats_plugin.rb +0 -30
data/lib/ffi-gobject/value.rb
CHANGED
@@ -5,28 +5,7 @@ GObject.load_class :Value
|
|
5
5
|
module GObject
|
6
6
|
# Overrides for GValue, GObject's generic value container structure.
|
7
7
|
class Value
|
8
|
-
|
9
|
-
|
10
|
-
def initialize
|
11
|
-
super
|
12
|
-
struct.owned = true
|
13
|
-
to_ptr.autorelease = nil
|
14
|
-
end
|
15
|
-
|
16
|
-
def init(type)
|
17
|
-
Lib.g_value_init self, type unless [TYPE_NONE, TYPE_INVALID].include? type
|
18
|
-
self
|
19
|
-
end
|
20
|
-
|
21
|
-
def self.make_finalizer(struct)
|
22
|
-
proc do
|
23
|
-
if struct.owned?
|
24
|
-
ptr = struct.to_ptr
|
25
|
-
Lib.g_value_unset ptr unless struct[:g_type] == TYPE_INVALID
|
26
|
-
GObject.boxed_free gtype, ptr
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
8
|
+
setup_instance_method! :init
|
30
9
|
|
31
10
|
METHOD_MAP = {
|
32
11
|
TYPE_INVALID => [:get_none, :set_none],
|
@@ -54,37 +33,6 @@ module GObject
|
|
54
33
|
TYPE_VARIANT => [:get_variant, :set_variant]
|
55
34
|
}.freeze
|
56
35
|
|
57
|
-
def set_value(val)
|
58
|
-
send set_method, val
|
59
|
-
end
|
60
|
-
|
61
|
-
alias value= set_value
|
62
|
-
|
63
|
-
def current_gtype
|
64
|
-
struct[:g_type]
|
65
|
-
end
|
66
|
-
|
67
|
-
def current_fundamental_type
|
68
|
-
GObject.type_fundamental current_gtype
|
69
|
-
end
|
70
|
-
|
71
|
-
def current_gtype_name
|
72
|
-
GObject.type_name current_gtype
|
73
|
-
end
|
74
|
-
|
75
|
-
def get_value
|
76
|
-
value = get_value_plain
|
77
|
-
if current_fundamental_type == TYPE_BOXED
|
78
|
-
wrap_boxed value
|
79
|
-
else
|
80
|
-
value
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
def get_value_plain
|
85
|
-
send get_method
|
86
|
-
end
|
87
|
-
|
88
36
|
# TODO: Give more generic name
|
89
37
|
def self.wrap_ruby_value(val)
|
90
38
|
new.tap { |gv| gv.__send__ :set_ruby_value, val }
|
@@ -119,17 +67,6 @@ module GObject
|
|
119
67
|
Lib.g_value_copy value, target unless value.uninitialized?
|
120
68
|
end
|
121
69
|
|
122
|
-
def uninitialized?
|
123
|
-
current_gtype == TYPE_INVALID
|
124
|
-
end
|
125
|
-
|
126
|
-
private
|
127
|
-
|
128
|
-
def set_ruby_value(val)
|
129
|
-
init_for_ruby_value val if uninitialized?
|
130
|
-
set_value val
|
131
|
-
end
|
132
|
-
|
133
70
|
CLASS_TO_GTYPE_MAP = {
|
134
71
|
NilClass => TYPE_INVALID,
|
135
72
|
TrueClass => TYPE_BOOLEAN,
|
@@ -138,76 +75,130 @@ module GObject
|
|
138
75
|
String => TYPE_STRING
|
139
76
|
}.freeze
|
140
77
|
|
141
|
-
|
142
|
-
|
78
|
+
# Overrides for existing Value methods
|
79
|
+
module Overrides
|
80
|
+
def set_value(val)
|
81
|
+
send set_method, val
|
82
|
+
end
|
143
83
|
|
144
|
-
|
145
|
-
|
84
|
+
alias value= set_value
|
85
|
+
|
86
|
+
def current_gtype
|
87
|
+
struct[:g_type]
|
146
88
|
end
|
147
|
-
raise "Can't handle #{val.class}"
|
148
|
-
end
|
149
89
|
|
150
|
-
|
90
|
+
def current_fundamental_type
|
91
|
+
GObject.type_fundamental current_gtype
|
92
|
+
end
|
151
93
|
|
152
|
-
|
94
|
+
def current_gtype_name
|
95
|
+
GObject.type_name current_gtype
|
96
|
+
end
|
153
97
|
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
98
|
+
def get_value
|
99
|
+
value = get_value_plain
|
100
|
+
if current_fundamental_type == TYPE_BOXED
|
101
|
+
wrap_boxed value
|
102
|
+
else
|
103
|
+
value
|
104
|
+
end
|
105
|
+
end
|
158
106
|
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
end
|
107
|
+
def get_value_plain
|
108
|
+
send get_method
|
109
|
+
end
|
163
110
|
|
164
|
-
|
165
|
-
|
166
|
-
|
111
|
+
def uninitialized?
|
112
|
+
current_gtype == TYPE_INVALID
|
113
|
+
end
|
167
114
|
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
115
|
+
def init(type)
|
116
|
+
Lib.g_value_init self, type unless [TYPE_NONE, TYPE_INVALID].include? type
|
117
|
+
self
|
118
|
+
end
|
172
119
|
|
173
|
-
|
174
|
-
current_gtype_class.wrap(get_flags)
|
175
|
-
end
|
120
|
+
private
|
176
121
|
|
177
|
-
|
178
|
-
|
179
|
-
|
122
|
+
def set_ruby_value(val)
|
123
|
+
init_for_ruby_value val if uninitialized?
|
124
|
+
set_value val
|
125
|
+
end
|
180
126
|
|
181
|
-
|
182
|
-
|
127
|
+
def init_for_ruby_value(val)
|
128
|
+
return init val.class.gtype if val.class.respond_to? :gtype
|
183
129
|
|
184
|
-
|
185
|
-
|
130
|
+
CLASS_TO_GTYPE_MAP.each do |klass, type|
|
131
|
+
return init type if val.is_a? klass
|
132
|
+
end
|
133
|
+
raise "Can't handle #{val.class}"
|
134
|
+
end
|
186
135
|
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
GLib::Array.wrap nil, boxed
|
195
|
-
else
|
196
|
-
current_gtype_class.wrap(boxed) unless boxed.null?
|
136
|
+
def set_none(_val); end
|
137
|
+
|
138
|
+
def get_none; end
|
139
|
+
|
140
|
+
def set_instance_enhanced(val)
|
141
|
+
check_type_compatibility val if val
|
142
|
+
set_instance val
|
197
143
|
end
|
198
|
-
end
|
199
144
|
|
200
|
-
|
201
|
-
|
202
|
-
|
145
|
+
def set_enum_enhanced(val)
|
146
|
+
val = current_gtype_class.to_native(val, nil)
|
147
|
+
set_enum val
|
148
|
+
end
|
203
149
|
|
204
|
-
|
205
|
-
|
206
|
-
|
150
|
+
def get_enum_enhanced
|
151
|
+
current_gtype_class.wrap(get_enum)
|
152
|
+
end
|
207
153
|
|
208
|
-
|
209
|
-
|
210
|
-
|
154
|
+
def set_flags_enhanced(val)
|
155
|
+
val = current_gtype_class.to_native(val, nil)
|
156
|
+
set_flags val
|
157
|
+
end
|
158
|
+
|
159
|
+
def get_flags_enhanced
|
160
|
+
current_gtype_class.wrap(get_flags)
|
161
|
+
end
|
162
|
+
|
163
|
+
def current_gtype_class
|
164
|
+
GirFFI::Builder.build_by_gtype(current_gtype)
|
165
|
+
end
|
166
|
+
|
167
|
+
def check_type_compatibility(val)
|
168
|
+
if GObject::Value.type_compatible(GObject.type_from_instance(val), current_gtype)
|
169
|
+
return
|
170
|
+
end
|
171
|
+
|
172
|
+
raise ArgumentError, "#{val.class} is incompatible with #{current_gtype_name}"
|
173
|
+
end
|
174
|
+
|
175
|
+
def wrap_boxed(boxed)
|
176
|
+
case current_gtype
|
177
|
+
when TYPE_STRV
|
178
|
+
GLib::Strv.wrap boxed
|
179
|
+
when TYPE_HASH_TABLE
|
180
|
+
GLib::HashTable.wrap [:gpointer, :gpointer], boxed
|
181
|
+
when TYPE_ARRAY
|
182
|
+
GLib::Array.wrap nil, boxed
|
183
|
+
else
|
184
|
+
current_gtype_class.wrap(boxed) unless boxed.null?
|
185
|
+
end
|
186
|
+
end
|
187
|
+
|
188
|
+
def get_method
|
189
|
+
method_map_entry.first
|
190
|
+
end
|
191
|
+
|
192
|
+
def set_method
|
193
|
+
method_map_entry.last
|
194
|
+
end
|
195
|
+
|
196
|
+
def method_map_entry
|
197
|
+
METHOD_MAP[current_gtype] || METHOD_MAP[current_fundamental_type] ||
|
198
|
+
raise("No method map entry for '#{current_gtype_name}'")
|
199
|
+
end
|
211
200
|
end
|
201
|
+
|
202
|
+
prepend Overrides
|
212
203
|
end
|
213
204
|
end
|
@@ -4,19 +4,26 @@ module GObjectIntrospection
|
|
4
4
|
# Wraps GIBaseInfo struct, the base \type for all info types.
|
5
5
|
# Decendant types will be implemented as needed.
|
6
6
|
class IBaseInfo
|
7
|
-
def initialize(ptr
|
7
|
+
def initialize(ptr)
|
8
8
|
raise ArgumentError, "ptr must not be null" if ptr.null?
|
9
9
|
|
10
|
-
ObjectSpace.define_finalizer self, self.class.make_finalizer(
|
10
|
+
ObjectSpace.define_finalizer self, self.class.make_finalizer(ptr)
|
11
11
|
|
12
12
|
@pointer = ptr
|
13
|
-
@lib = lib
|
14
13
|
end
|
15
14
|
|
16
15
|
attr_reader :pointer
|
17
16
|
|
18
|
-
def self.make_finalizer(
|
19
|
-
proc {
|
17
|
+
def self.make_finalizer(ptr)
|
18
|
+
proc { finalize ptr }
|
19
|
+
end
|
20
|
+
|
21
|
+
class << self
|
22
|
+
protected
|
23
|
+
|
24
|
+
def finalize(ptr)
|
25
|
+
Lib.g_base_info_unref ptr
|
26
|
+
end
|
20
27
|
end
|
21
28
|
|
22
29
|
def to_ptr
|
@@ -35,7 +42,7 @@ module GObjectIntrospection
|
|
35
42
|
# Examples:
|
36
43
|
#
|
37
44
|
# build_array_method :fields
|
38
|
-
#
|
45
|
+
# build_array_method :properties, :property
|
39
46
|
# build_array_method :get_methods
|
40
47
|
#
|
41
48
|
def self.build_array_method(method, single = nil)
|
@@ -44,12 +51,12 @@ module GObjectIntrospection
|
|
44
51
|
single ||= method[0..-2]
|
45
52
|
count = method.sub(/^(get_)?/, '\\1n_')
|
46
53
|
class_eval <<-CODE, __FILE__, __LINE__ + 1
|
47
|
-
def #{method}
|
48
|
-
#{cache_ivar} ||=
|
49
|
-
(0..(#{count} - 1)).map do |i|
|
50
|
-
#{single} i
|
51
|
-
end
|
52
|
-
end
|
54
|
+
def #{method} # def fields
|
55
|
+
#{cache_ivar} ||= # @fields_cache ||=
|
56
|
+
(0..(#{count} - 1)).map do |i| # (0..(n_fields - 1)).map do |i|
|
57
|
+
#{single} i # field i
|
58
|
+
end # end
|
59
|
+
end # end
|
53
60
|
CODE
|
54
61
|
end
|
55
62
|
|
@@ -76,18 +83,18 @@ module GObjectIntrospection
|
|
76
83
|
counter ||= "n_#{single}s"
|
77
84
|
fetcher ||= single
|
78
85
|
class_eval <<-CODE, __FILE__, __LINE__ + 1
|
79
|
-
def #{method}(name)
|
80
|
-
#{cache_ivar} ||= begin
|
81
|
-
hash = {}
|
82
|
-
#{counter}.times do |i|
|
83
|
-
it = #{fetcher}(i)
|
84
|
-
hash[it.name] = it
|
85
|
-
end
|
86
|
-
hash
|
87
|
-
end
|
88
|
-
name = name.to_s
|
89
|
-
#{cache_ivar}[name]
|
90
|
-
end
|
86
|
+
def #{method}(name) # def find_field(name)
|
87
|
+
#{cache_ivar} ||= begin # @find_field_cache ||= begin
|
88
|
+
hash = {} # hash = {}
|
89
|
+
#{counter}.times do |i| # n_fields.times do |i|
|
90
|
+
it = #{fetcher}(i) # it = field(i)
|
91
|
+
hash[it.name] = it # hash[it.name] = it
|
92
|
+
end # end
|
93
|
+
hash # hash
|
94
|
+
end # end
|
95
|
+
name = name.to_s # name = name.to_s
|
96
|
+
#{cache_ivar}[name] # @find_field_cache[name]
|
97
|
+
end # end
|
91
98
|
CODE
|
92
99
|
end
|
93
100
|
|
@@ -107,12 +114,13 @@ module GObjectIntrospection
|
|
107
114
|
namespace.sub(/^[a-z]/, &:upcase)
|
108
115
|
end
|
109
116
|
|
110
|
-
# TODO: Avoid calling for IStructInfo
|
111
117
|
def container
|
112
118
|
@container ||= begin
|
113
119
|
ptr = Lib.g_base_info_get_container self
|
114
|
-
|
115
|
-
|
120
|
+
unless ptr.null?
|
121
|
+
Lib.g_base_info_ref ptr
|
122
|
+
IRepository.wrap_ibaseinfo_pointer ptr
|
123
|
+
end
|
116
124
|
end
|
117
125
|
end
|
118
126
|
|
@@ -7,9 +7,13 @@ module GObject
|
|
7
7
|
module Lib
|
8
8
|
extend FFI::Library
|
9
9
|
extend FFI::BitMasks
|
10
|
+
|
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
|
15
19
|
attach_function :g_error_get_type, [], :size_t
|
@@ -4,8 +4,7 @@ module GirFFI
|
|
4
4
|
# The ArrayElementConvertor class handles conversion from C array elements to
|
5
5
|
# ruby values
|
6
6
|
class ArrayElementConvertor
|
7
|
-
attr_reader :value_type
|
8
|
-
attr_reader :pointer
|
7
|
+
attr_reader :value_type, :pointer
|
9
8
|
|
10
9
|
def initialize(type, ptr)
|
11
10
|
@value_type = type
|
@@ -15,11 +14,11 @@ module GirFFI
|
|
15
14
|
def to_ruby_value
|
16
15
|
bare_value = to_value
|
17
16
|
case value_type
|
18
|
-
when :utf8
|
17
|
+
when :utf8, :filename
|
19
18
|
bare_value.to_utf8
|
20
19
|
when Array
|
21
20
|
value_type[1].wrap bare_value
|
22
|
-
when
|
21
|
+
when Module
|
23
22
|
value_type.wrap bare_value
|
24
23
|
else
|
25
24
|
bare_value
|
data/lib/gir_ffi/boxed_base.rb
CHANGED
@@ -4,18 +4,9 @@ require "gir_ffi/class_base"
|
|
4
4
|
|
5
5
|
module GirFFI
|
6
6
|
# Base class for generated classes representing boxed types.
|
7
|
-
class BoxedBase <
|
8
|
-
def initialize
|
9
|
-
store_pointer(nil)
|
10
|
-
end
|
11
|
-
|
7
|
+
class BoxedBase < StructLikeBase
|
12
8
|
def self.make_finalizer(struct)
|
13
|
-
proc
|
14
|
-
if struct.owned?
|
15
|
-
struct.owned = nil
|
16
|
-
GObject.boxed_free gtype, struct.to_ptr
|
17
|
-
end
|
18
|
-
end
|
9
|
+
proc { finalize(struct) }
|
19
10
|
end
|
20
11
|
|
21
12
|
def self.copy(val)
|
@@ -23,6 +14,17 @@ module GirFFI
|
|
23
14
|
wrap(ptr)
|
24
15
|
end
|
25
16
|
|
17
|
+
class << self
|
18
|
+
protected
|
19
|
+
|
20
|
+
def finalize(struct)
|
21
|
+
struct.owned? or return
|
22
|
+
|
23
|
+
struct.owned = nil
|
24
|
+
GObject.boxed_free gtype, struct.to_ptr
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
26
28
|
private
|
27
29
|
|
28
30
|
def store_pointer(*)
|