module GirFFI::Builders::WithLayout
Implements the creation of classes representing types with layout, i.e., :union, :struct, :object. Note: This module depends on methods in RegisteredTypeBuilder.
Public Instance Methods
layout_specification()
click to toggle source
# File lib/gir_ffi/builders/with_layout.rb, line 9 def layout_specification spec = base_layout_specification if spec.empty? dummy_layout_specification else spec end end
Private Instance Methods
base_layout_specification()
click to toggle source
# File lib/gir_ffi/builders/with_layout.rb, line 33 def base_layout_specification fields.map(&:layout_specification).flatten(1) end
dummy_layout_specification()
click to toggle source
# File lib/gir_ffi/builders/with_layout.rb, line 25 def dummy_layout_specification if parent_info [:parent, superclass::Struct, 0] else [:dummy, :char, 0] end end
klass()
click to toggle source
# File lib/gir_ffi/builders/with_layout.rb, line 43 def klass @klass ||= get_or_define_class namespace_module, @classname, superclass end
setup_field_accessors()
click to toggle source
# File lib/gir_ffi/builders/with_layout.rb, line 37 def setup_field_accessors fields.each do |finfo| FieldBuilder.new(finfo).build end end
setup_layout()
click to toggle source
# File lib/gir_ffi/builders/with_layout.rb, line 20 def setup_layout spec = layout_specification struct_class.class_eval { layout(*spec) } end
struct_class()
click to toggle source
# File lib/gir_ffi/builders/with_layout.rb, line 47 def struct_class @structklass ||= get_or_define_class klass, :Struct, layout_superclass end