Class: GirFFI::Builders::FieldBuilder
- Inherits:
-
Object
- Object
- GirFFI::Builders::FieldBuilder
- Defined in:
- lib/gir_ffi/builders/field_builder.rb
Overview
Creates field getter and setter code for a given IFieldInfo.
Instance Attribute Summary collapse
-
#info ⇒ Object
readonly
Returns the value of attribute info.
Instance Method Summary collapse
- #build ⇒ Object
- #container_defines_getter_method? ⇒ Boolean
- #getter_def ⇒ Object
-
#initialize(field_info) ⇒ FieldBuilder
constructor
A new instance of FieldBuilder.
- #is_writable_field? ⇒ Boolean
- #setter_def ⇒ Object
- #setup_getter ⇒ Object
- #setup_setter ⇒ Object
Constructor Details
#initialize(field_info) ⇒ FieldBuilder
Returns a new instance of FieldBuilder.
12 13 14 |
# File 'lib/gir_ffi/builders/field_builder.rb', line 12 def initialize field_info @info = field_info end |
Instance Attribute Details
#info ⇒ Object (readonly)
Returns the value of attribute info.
10 11 12 |
# File 'lib/gir_ffi/builders/field_builder.rb', line 10 def info @info end |
Instance Method Details
#build ⇒ Object
16 17 18 19 |
# File 'lib/gir_ffi/builders/field_builder.rb', line 16 def build setup_getter setup_setter end |
#container_defines_getter_method? ⇒ Boolean
25 26 27 |
# File 'lib/gir_ffi/builders/field_builder.rb', line 25 def container_defines_getter_method? container_info.find_instance_method info.name end |
#getter_def ⇒ Object
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
# File 'lib/gir_ffi/builders/field_builder.rb', line 37 def getter_def builder = return_value_builder field_ptr = builder.new_variable typed_ptr = builder.new_variable <<-CODE.reset_indentation def #{info.name} #{field_ptr} = @struct.to_ptr + #{info.offset} #{typed_ptr} = GirFFI::InOutPointer.new(#{field_type_tag_or_class.inspect}, #{field_ptr}) #{builder.capture_variable_name} = #{typed_ptr}.to_value #{builder.post_conversion.join("\n")} #{builder.return_value_name} end CODE end |
#is_writable_field? ⇒ Boolean
33 34 35 |
# File 'lib/gir_ffi/builders/field_builder.rb', line 33 def is_writable_field? info.writable? end |
#setter_def ⇒ Object
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
# File 'lib/gir_ffi/builders/field_builder.rb', line 54 def setter_def builder = setter_builder field_ptr = builder.new_variable typed_ptr = builder.new_variable <<-CODE.reset_indentation def #{info.name}= #{builder.method_argument_name} #{field_ptr} = @struct.to_ptr + #{info.offset} #{typed_ptr} = GirFFI::InOutPointer.new(#{field_type_tag_or_class.inspect}, #{field_ptr}) #{builder.pre_conversion.join("\n ")} #{typed_ptr}.set_value #{builder.callarg} end CODE end |
#setup_getter ⇒ Object
21 22 23 |
# File 'lib/gir_ffi/builders/field_builder.rb', line 21 def setup_getter container_class.class_eval getter_def unless container_defines_getter_method? end |
#setup_setter ⇒ Object
29 30 31 |
# File 'lib/gir_ffi/builders/field_builder.rb', line 29 def setup_setter container_class.class_eval setter_def if is_writable_field? end |