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 11
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 37
def base_layout_specification
  fields.flat_map(&:layout_specification)
end
dummy_layout_specification() click to toggle source
# File lib/gir_ffi/builders/with_layout.rb, line 29
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 41
def klass
  @klass ||= get_or_define_class namespace_module, @classname, superclass
end
setup_layout() click to toggle source
# File lib/gir_ffi/builders/with_layout.rb, line 22
def setup_layout
  spec = layout_specification
  struct_class.class_eval do
    layout(*spec)
  end
end
struct_class() click to toggle source
# File lib/gir_ffi/builders/with_layout.rb, line 45
def struct_class
  @struct_class ||= get_or_define_class klass, :Struct, layout_superclass
end