module GirFFI::Builder::ReturnValueFactory

Public Class Methods

build(var_gen, arginfo) click to toggle source
# File lib/gir_ffi/builder/argument.rb, line 415
def self.build var_gen, arginfo
  builder_for(var_gen,
              arginfo.name,
              arginfo.return_type,
              :return,
              arginfo.constructor?)
end
builder_for(var_gen, name, type, direction, is_constructor) click to toggle source
# File lib/gir_ffi/builder/argument.rb, line 423
def self.builder_for var_gen, name, type, direction, is_constructor
  if type.tag == :interface and
    [:interface, :object].include? type.interface.info_type
    klass = if is_constructor
              ConstructorReturnValue
            else
              WrappingReturnValue
            end
    klass.new var_gen, name, type, direction
  else
    builder_for_field_getter var_gen, name, type, direction
  end
end
builder_for_field_getter(var_gen, name, type, direction) click to toggle source
# File lib/gir_ffi/builder/argument.rb, line 437
def self.builder_for_field_getter var_gen, name, type, direction
  klass = case type.tag
          when :void
            if type.pointer?
              RegularReturnValue
            else
              VoidReturnValue
            end
          when :interface
            case type.interface.info_type
            when :struct, :union, :interface, :object
              WrappingReturnValue
            else
              RegularReturnValue
            end
          when :array
            if type.zero_terminated?
              WrappingReturnValue
            else
              case type.array_type
              when :c
                CArrayReturnValue
              when :array
                it = ReturnValue.new var_gen, name, type, direction
                it.extend WithTypedContainerPostMethod
                return it
              else
                WrappingReturnValue
              end
            end
          when :glist, :gslist, :ghash
            it = ReturnValue.new var_gen, name, type, direction
            it.extend WithTypedContainerPostMethod
            return it
          when :utf8
            Utf8ReturnValue
          else
            RegularReturnValue
          end
  klass.new var_gen, name, type, direction
end