Sha256: 83f5ca9f4c32121eda532dec06a0407f9443714a13779f2787dd7674a1af31a7

Contents?: true

Size: 726 Bytes

Versions: 8

Compression:

Stored size: 726 Bytes

Contents

# frozen_string_literal: true

require "gir_ffi/class_base"

module GirFFI
  # Base class for generated classes representing boxed types.
  class BoxedBase < StructLikeBase
    def self.make_finalizer(struct)
      proc { finalize(struct) }
    end

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

    class << self
      protected

      def finalize(struct)
        struct.owned? or return

        struct.owned = nil
        GObject.boxed_free gtype, struct.to_ptr
      end
    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

8 entries across 8 versions & 1 rubygems

Version Path
gir_ffi-0.18.0 lib/gir_ffi/boxed_base.rb
gir_ffi-0.17.0 lib/gir_ffi/boxed_base.rb
gir_ffi-0.16.1 lib/gir_ffi/boxed_base.rb
gir_ffi-0.16.0 lib/gir_ffi/boxed_base.rb
gir_ffi-0.15.9 lib/gir_ffi/boxed_base.rb
gir_ffi-0.15.8 lib/gir_ffi/boxed_base.rb
gir_ffi-0.15.7 lib/gir_ffi/boxed_base.rb
gir_ffi-0.15.6 lib/gir_ffi/boxed_base.rb