Class: GObject::Value
- Inherits:
-
Object
- Object
- GObject::Value
- Defined in:
- lib/ffi-gobject/value.rb
Overview
Overrides for GValue, GObject’s generic value container structure.
Constant Summary collapse
- METHOD_MAP =
{ TYPE_INVALID => [:get_none, :set_none], # TYPE_NONE is skipped TYPE_INTERFACE => [:get_object, :set_instance_enhanced], TYPE_CHAR => [:get_schar, :set_schar], TYPE_UCHAR => [:get_uchar, :set_uchar], TYPE_BOOLEAN => [:get_boolean, :set_boolean], TYPE_INT => [:get_int, :set_int], TYPE_UINT => [:get_uint, :set_uint], TYPE_LONG => [:get_long, :set_long], TYPE_ULONG => [:get_ulong, :set_ulong], TYPE_INT64 => [:get_int64, :set_int64], TYPE_UINT64 => [:get_uint64, :set_uint64], TYPE_ENUM => [:get_enum_enhanced, :set_enum_enhanced], TYPE_FLAGS => [:get_flags, :set_flags], TYPE_FLOAT => [:get_float, :set_float], TYPE_DOUBLE => [:get_double, :set_double], TYPE_STRING => [:get_string, :set_string], TYPE_POINTER => [:get_pointer, :set_pointer], TYPE_BOXED => [:get_boxed, :set_boxed], TYPE_PARAM => [:get_param, :set_param], TYPE_OBJECT => [:get_object, :set_instance_enhanced], TYPE_GTYPE => [:get_gtype, :set_gtype], TYPE_VARIANT => [:get_variant, :set_variant] }.freeze
Class Method Summary collapse
- .copy_value_to_pointer(value, pointer, offset = 0) ⇒ Object
- .for_gtype(gtype) ⇒ Object
- .from(val) ⇒ Object
- .make_finalizer(struct) ⇒ Object
-
.wrap_instance(instance) ⇒ Object
TODO: Combine with wrap_ruby_value.
-
.wrap_ruby_value(val) ⇒ Object
TODO: Give more generic name.
Instance Method Summary collapse
- #current_fundamental_type ⇒ Object
- #current_gtype ⇒ Object
- #current_gtype_name ⇒ Object
- #get_value ⇒ Object
- #get_value_plain ⇒ Object
- #init(type) ⇒ Object
-
#initialize ⇒ Value
constructor
A new instance of Value.
- #set_value(val) ⇒ Object (also: #value=)
- #uninitialized? ⇒ Boolean
Constructor Details
#initialize ⇒ Value
Returns a new instance of Value.
10 11 12 13 14 |
# File 'lib/ffi-gobject/value.rb', line 10 def initialize super struct.owned = true to_ptr.autorelease = nil end |
Class Method Details
.copy_value_to_pointer(value, pointer, offset = 0) ⇒ Object
116 117 118 119 120 |
# File 'lib/ffi-gobject/value.rb', line 116 def self.copy_value_to_pointer(value, pointer, offset = 0) target = wrap(pointer + offset) target.init(value.current_gtype) Lib.g_value_copy value, target unless value.uninitialized? end |
.for_gtype(gtype) ⇒ Object
102 103 104 105 106 |
# File 'lib/ffi-gobject/value.rb', line 102 def self.for_gtype(gtype) new.tap do |it| it.init gtype end end |
.from(val) ⇒ Object
93 94 95 96 97 98 99 100 |
# File 'lib/ffi-gobject/value.rb', line 93 def self.from(val) case val when self val else wrap_ruby_value val end end |
.make_finalizer(struct) ⇒ Object
21 22 23 24 25 26 27 28 29 |
# File 'lib/ffi-gobject/value.rb', line 21 def self.make_finalizer(struct) proc do if struct.owned? ptr = struct.to_ptr Lib.g_value_unset ptr unless struct[:g_type] == TYPE_INVALID GObject.boxed_free gtype, ptr end end end |
.wrap_instance(instance) ⇒ Object
TODO: Combine with wrap_ruby_value
109 110 111 112 113 114 |
# File 'lib/ffi-gobject/value.rb', line 109 def self.wrap_instance(instance) new.tap do |it| it.init GObject.type_from_instance instance it.set_instance instance end end |
.wrap_ruby_value(val) ⇒ Object
TODO: Give more generic name
89 90 91 |
# File 'lib/ffi-gobject/value.rb', line 89 def self.wrap_ruby_value(val) new.tap { |gv| gv.__send__ :set_ruby_value, val } end |
Instance Method Details
#current_fundamental_type ⇒ Object
67 68 69 |
# File 'lib/ffi-gobject/value.rb', line 67 def current_fundamental_type GObject.type_fundamental current_gtype end |
#current_gtype ⇒ Object
63 64 65 |
# File 'lib/ffi-gobject/value.rb', line 63 def current_gtype struct[:g_type] end |
#current_gtype_name ⇒ Object
71 72 73 |
# File 'lib/ffi-gobject/value.rb', line 71 def current_gtype_name GObject.type_name current_gtype end |
#get_value ⇒ Object
75 76 77 78 79 80 81 82 |
# File 'lib/ffi-gobject/value.rb', line 75 def get_value value = get_value_plain if current_fundamental_type == TYPE_BOXED wrap_boxed value else value end end |
#get_value_plain ⇒ Object
84 85 86 |
# File 'lib/ffi-gobject/value.rb', line 84 def get_value_plain send get_method end |
#init(type) ⇒ Object
16 17 18 19 |
# File 'lib/ffi-gobject/value.rb', line 16 def init(type) Lib.g_value_init self, type unless [TYPE_NONE, TYPE_INVALID].include? type self end |
#set_value(val) ⇒ Object Also known as: value=
57 58 59 |
# File 'lib/ffi-gobject/value.rb', line 57 def set_value(val) send set_method, val end |
#uninitialized? ⇒ Boolean
122 123 124 |
# File 'lib/ffi-gobject/value.rb', line 122 def uninitialized? current_gtype == TYPE_INVALID end |