Sha256: 1b163a86d2c68fd050976e837356f6a91ccba390c0ca0bf021eb1f65e116ce1f

Contents?: true

Size: 1.42 KB

Versions: 6

Compression:

Stored size: 1.42 KB

Contents

require 'gir_ffi/builder/type/base'
require 'gir_ffi/class_base'

module GirFFI
  module Builder
    module Type

      # Base class for type builders building types specified by subtypes
      # of IRegisteredTypeInfo. These are types whose C representation is
      # complex, i.e., a struct or a union.
      class RegisteredType < Base
        private

        def setup_constants
          @klass.const_set :GIR_INFO, info
          @klass.const_set :GIR_FFI_BUILDER, self
        end

        def already_set_up
          const_defined_for @klass, :GIR_FFI_BUILDER
        end

        def target_gtype
          info.g_type
        end

        # TODO: Rename the created method, or use a constant.
        # FIXME: Only used in some of the subclases. Make mixin?
        def setup_gtype_getter
          gtype = target_gtype
          return if gtype.nil?
          @klass.instance_eval "
            def self.get_gtype
              #{gtype}
            end
          "
        end

        # FIXME: Only used in some of the subclases. Make mixin?
        def provide_constructor
          return if info.find_method 'new'

          (class << @klass; self; end).class_eval {
            alias_method :new, :allocate
          }
        end

        def parent
          nil
        end

        def fields
          info.fields
        end

        def superclass
          @superclass ||= ClassBase
        end
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
gir_ffi-0.5.2 lib/gir_ffi/builder/type/registered_type.rb
gir_ffi-0.5.1 lib/gir_ffi/builder/type/registered_type.rb
gir_ffi-0.5.0 lib/gir_ffi/builder/type/registered_type.rb
gir_ffi-0.4.3 lib/gir_ffi/builder/type/registered_type.rb
gir_ffi-0.4.2 lib/gir_ffi/builder/type/registered_type.rb
gir_ffi-0.4.1 lib/gir_ffi/builder/type/registered_type.rb