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