module GirFFI::Builders::WithLayout

Implements the creation of classes representing types with layout, i.e., :union, :struct, :object. Note: This module depends on the additional inclusion of WithMethods.

Public Instance Methods

layout_specification() click to toggle source
# File lib/gir_ffi/builders/with_layout.rb, line 10
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 34
def base_layout_specification
  fields.map { |finfo| finfo.layout_specification }.flatten(1)
end
dummy_layout_specification() click to toggle source
# File lib/gir_ffi/builders/with_layout.rb, line 26
def dummy_layout_specification
  if parent
    [:parent, superclass.const_get(:Struct), 0]
  else
    [:dummy, :char, 0]
  end
end
instantiate_class() click to toggle source
# File lib/gir_ffi/builders/with_layout.rb, line 48
def instantiate_class
  @klass = get_or_define_class namespace_module, @classname, superclass
  @structklass = get_or_define_class @klass, :Struct, layout_superclass
  setup_class unless already_set_up
end
setup_accessors_for_field_info(finfo) click to toggle source
# File lib/gir_ffi/builders/with_layout.rb, line 38
def setup_accessors_for_field_info finfo
  FieldBuilder.new(finfo).build
end
setup_field_accessors() click to toggle source
# File lib/gir_ffi/builders/with_layout.rb, line 42
def setup_field_accessors
  fields.each do |finfo|
    setup_accessors_for_field_info finfo
  end
end
setup_layout() click to toggle source
# File lib/gir_ffi/builders/with_layout.rb, line 21
def setup_layout
  spec = layout_specification
  @structklass.class_eval { layout(*spec) }
end