Sha256: 0378c9fee27bcbec459df15702d86121de5423d14da2bef850897803829f920b

Contents?: true

Size: 1.06 KB

Versions: 3

Compression:

Stored size: 1.06 KB

Contents

require 'gir_ffi/builder/type/registered_type'
module GirFFI
  module Builder
    module Type

      # Implements the creation of a class representing one of the types
      # whose C representation is a struct, i.e., :object, :struct, and
      # :interface.
      class StructBased < RegisteredType
        def build_class
          unless defined? @klass
            instantiate_struct_class
          end
          @klass
        end

        def instantiate_struct_class
          @klass = get_or_define_class namespace_module, @classname, superclass
          @structklass = get_or_define_class @klass, :Struct, FFI::Struct
          setup_class unless already_set_up
        end

        def find_signal signal_name
          signal_definers.each do |inf|
            inf.signals.each do |sig|
              return sig if sig.name == signal_name
            end
          end
          if parent
            return superclass.gir_ffi_builder.find_signal signal_name
          end
        end

        def signal_definers
          [info]
        end
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
gir_ffi-0.0.10 lib/gir_ffi/builder/type/struct_based.rb
gir_ffi-0.0.9 lib/gir_ffi/builder/type/struct_based.rb
gir_ffi-0.0.8 lib/gir_ffi/builder/type/struct_based.rb