Sha256: 17a0c16598fc14dfcc242064277ad631fcdc6a45991f72b7c15b24f1e38e76f1

Contents?: true

Size: 1.06 KB

Versions: 3

Compression:

Stored size: 1.06 KB

Contents

# frozen_string_literal: true

module GirFFI
  module FFIExt
    # Extensions to FFI::Pointer
    module Pointer
      def self.prepended(base)
        base.class_eval do
          size_t_getter =
            case (size = FFI.type_size(:size_t))
            when 4
              :get_uint32
            when 8
              :get_uint64
            else
              raise NotImplementedError,
                    "Don't know how to handle size_t types of size #{size}"
            end

          alias_method :get_size_t, size_t_getter

          alias_method :get_gtype, :get_size_t
        end
      end

      def to_ptr
        self
      end

      # FIXME: Should probably not be here.
      def to_object
        return nil if null?

        gtype = GObject.type_from_instance_pointer self
        Builder.build_by_gtype(gtype).direct_wrap self
      end

      def to_utf8
        null? ? nil : read_string.force_encoding("utf-8")
      end
    end
  end
end

# @api private
class FFI::Pointer # rubocop:disable Style/ClassAndModuleChildren
  prepend GirFFI::FFIExt::Pointer
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
gir_ffi-0.18.0 lib/gir_ffi/ffi_ext/pointer.rb
gir_ffi-0.17.0 lib/gir_ffi/ffi_ext/pointer.rb
gir_ffi-0.16.1 lib/gir_ffi/ffi_ext/pointer.rb