Sha256: 971e968f3046dd6ea56ecfd2fb32a45d0f80b3290d036bf9c3d4eef38f0f00c6

Contents?: true

Size: 694 Bytes

Versions: 9

Compression:

Stored size: 694 Bytes

Contents

# frozen_string_literal: true

require 'gir_ffi/class_base'

module GirFFI
  # Base class for generated classes representing boxed types.
  class BoxedBase < StructBase
    def initialize
      store_pointer(nil)
    end

    def self.make_finalizer(struct)
      proc do
        if struct.owned?
          struct.owned = nil
          GObject.boxed_free gtype, struct.to_ptr
        end
      end
    end

    def self.copy(val)
      ptr = GObject.boxed_copy(gtype, val)
      wrap(ptr)
    end

    private

    def store_pointer(*)
      super
      make_finalizer
    end

    def make_finalizer
      ObjectSpace.define_finalizer self, self.class.make_finalizer(struct)
    end
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
gir_ffi-0.14.1 lib/gir_ffi/boxed_base.rb
gir_ffi-0.14.0 lib/gir_ffi/boxed_base.rb
gir_ffi-0.13.1 lib/gir_ffi/boxed_base.rb
gir_ffi-0.13.0 lib/gir_ffi/boxed_base.rb
gir_ffi-0.12.1 lib/gir_ffi/boxed_base.rb
gir_ffi-0.12.0 lib/gir_ffi/boxed_base.rb
gir_ffi-0.11.4 lib/gir_ffi/boxed_base.rb
gir_ffi-0.11.3 lib/gir_ffi/boxed_base.rb
gir_ffi-0.11.2 lib/gir_ffi/boxed_base.rb