Creates field getter and setter code for a given IFieldInfo.
# File lib/gir_ffi/builders/field_builder.rb, line 12 def initialize field_info @info = field_info end
# File lib/gir_ffi/builders/field_builder.rb, line 16 def build unless container_info.find_instance_method info.name container_class.class_eval getter_def end container_class.class_eval setter_def if info.writable? end
# File lib/gir_ffi/builders/field_builder.rb, line 23 def getter_def builder = return_value_builder field_ptr = builder.new_variable typed_ptr = builder.new_variable return " def #{info.name} #{field_ptr} = @struct.to_ptr + #{info.offset} #{typed_ptr} = GirFFI::InOutPointer.new(#{field_type_tag_or_class.inspect}, #{field_ptr}) #{builder.callarg} = #{typed_ptr}.to_value #{builder.post.join("\n")} #{builder.retval} end ".reset_indentation end
# File lib/gir_ffi/builders/field_builder.rb, line 40 def setter_def builder = setter_builder field_ptr = builder.new_variable typed_ptr = builder.new_variable return " def #{info.name}= #{builder.inarg} #{field_ptr} = @struct.to_ptr + #{info.offset} #{typed_ptr} = GirFFI::InOutPointer.new(#{field_type_tag_or_class.inspect}, #{field_ptr}) #{builder.pre.join("\n ")} #{typed_ptr}.set_value #{builder.callarg} end ".reset_indentation end
# File lib/gir_ffi/builders/field_builder.rb, line 66 def container_class @container_class ||= container_module.const_get(container_info.safe_name) end
# File lib/gir_ffi/builders/field_builder.rb, line 74 def container_info @container_info ||= info.container end
# File lib/gir_ffi/builders/field_builder.rb, line 70 def container_module @container_module ||= Object.const_get(container_info.safe_namespace) end
# File lib/gir_ffi/builders/field_builder.rb, line 78 def field_symbol @info.name.to_sym end
# File lib/gir_ffi/builders/field_builder.rb, line 62 def field_type_tag_or_class @field_type_tag_or_class ||= info.field_type.tag_or_class end
# File lib/gir_ffi/builders/field_builder.rb, line 82 def return_value_builder vargen = VariableNameGenerator.new @rv_builder ||= ReturnValueBuilder.new vargen, @info.field_type end
# File lib/gir_ffi/builders/field_builder.rb, line 87 def setter_builder vargen = VariableNameGenerator.new argument_info = SetterArgumentInfo.new "value", @info.field_type ArgumentBuilder.new vargen, argument_info end
# File lib/gir_ffi/builders/field_builder.rb, line 58 def struct_class container_class::Struct end