class GirFFI::Builders::FieldBuilder
Creates field getter and setter code for a given IFieldInfo.
Attributes
info[R]
Public Class Methods
new(field_info)
click to toggle source
# File lib/gir_ffi/builders/field_builder.rb, line 212 def initialize(field_info) @info = field_info end
Public Instance Methods
build()
click to toggle source
# File lib/gir_ffi/builders/field_builder.rb, line 216 def build setup_getter setup_setter end
container_defines_getter_method?()
click to toggle source
# File lib/gir_ffi/builders/field_builder.rb, line 225 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 233 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 239 def setter_def builder = setter_builder field_ptr = builder.new_variable typed_ptr = builder.new_variable " def #{info.name}= #{builder.method_argument_name} #{field_ptr} = @struct.to_ptr + #{info.offset} #{typed_ptr} = GirFFI::InOutPointer.new(#{field_type_tag}, #{field_ptr}) #{builder.pre_conversion.join("\n ")} #{typed_ptr}.set_value #{builder.call_argument_name} end ".reset_indentation end
setup_getter()
click to toggle source
# File lib/gir_ffi/builders/field_builder.rb, line 221 def setup_getter container_class.class_eval getter_def unless container_defines_getter_method? end
setup_setter()
click to toggle source
# File lib/gir_ffi/builders/field_builder.rb, line 229 def setup_setter container_class.class_eval setter_def if info.writable? end
Private Instance Methods
container_class()
click to toggle source
# File lib/gir_ffi/builders/field_builder.rb, line 261 def container_class @container_class ||= container_module.const_get(container_info.safe_name) end
container_info()
click to toggle source
# File lib/gir_ffi/builders/field_builder.rb, line 269 def container_info @container_info ||= info.container end
container_module()
click to toggle source
# File lib/gir_ffi/builders/field_builder.rb, line 265 def container_module @container_module ||= Object.const_get(container_info.safe_namespace) end
field_argument_info()
click to toggle source
# File lib/gir_ffi/builders/field_builder.rb, line 277 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 273 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 257 def field_type_tag @field_type_tag ||= info.field_type.tag_or_class.inspect end
setter_builder()
click to toggle source
# File lib/gir_ffi/builders/field_builder.rb, line 281 def setter_builder @setter_builder ||= ArgumentBuilder.new(VariableNameGenerator.new, field_argument_info) end