class GirFFI::Builders::FieldBuilder
Creates field getter and setter code for a given IFieldInfo.
Attributes
container_class[R]
info[R]
Public Class Methods
new(field_info, container_class)
click to toggle source
# File lib/gir_ffi/builders/field_builder.rb, line 234 def initialize(field_info, container_class) @info = field_info @container_class = container_class end
Public Instance Methods
build()
click to toggle source
# File lib/gir_ffi/builders/field_builder.rb, line 239 def build setup_getter setup_setter end
container_defines_getter_method?()
click to toggle source
# File lib/gir_ffi/builders/field_builder.rb, line 251 def container_defines_getter_method? container_info.find_instance_method info.name end
getter_def()
click to toggle source
# File lib/gir_ffi/builders/field_builder.rb, line 262 def getter_def getter_builder = GetterBuilder.new(info) getter_builder.method_definition end
setter_def()
click to toggle source
TODO: Use MethodTemplate
# File lib/gir_ffi/builders/field_builder.rb, line 268 def setter_def builder = setter_builder field_ptr = builder.new_variable <<~CODE def #{info.name}= #{builder.method_argument_name} #{field_ptr} = @struct.to_ptr #{builder.pre_conversion.join("\n ")} #{value_storage(field_ptr, builder)} end CODE end
setup_getter()
click to toggle source
# File lib/gir_ffi/builders/field_builder.rb, line 244 def setup_getter return if container_defines_getter_method? return if hidden_struct_type? container_class.class_eval getter_def, __FILE__, __LINE__ end
setup_setter()
click to toggle source
# File lib/gir_ffi/builders/field_builder.rb, line 255 def setup_setter return unless info.writable? return if hidden_struct_type? container_class.class_eval setter_def, __FILE__, __LINE__ end
Private Instance Methods
container_info()
click to toggle source
TODO: Inject container_info
on initialization
# File lib/gir_ffi/builders/field_builder.rb, line 296 def container_info @container_info ||= info.container end
field_argument_info()
click to toggle source
# File lib/gir_ffi/builders/field_builder.rb, line 304 def field_argument_info @field_argument_info ||= FieldArgumentInfo.new "value", field_type end
field_type()
click to toggle source
# File lib/gir_ffi/builders/field_builder.rb, line 300 def field_type @field_type ||= @info.field_type end
field_type_tag()
click to toggle source
# File lib/gir_ffi/builders/field_builder.rb, line 289 def field_type_tag @field_type_tag ||= field_type.tag_or_class end
setter_builder()
click to toggle source
# File lib/gir_ffi/builders/field_builder.rb, line 308 def setter_builder @setter_builder ||= ArgumentBuilder.new(VariableNameGenerator.new, field_argument_info) end
value_storage(typed_ptr, builder)
click to toggle source
# File lib/gir_ffi/builders/field_builder.rb, line 284 def value_storage(typed_ptr, builder) PointerValueConvertor.new(field_type_tag) .value_to_pointer(typed_ptr, builder.call_argument_name, info.offset) end