Sha256: 52fc64c9e72f55d5d2508fa129fc439f693a6d5f8a7c4d2562109318080053d2
Contents?: true
Size: 1.66 KB
Versions: 3
Compression:
Stored size: 1.66 KB
Contents
# frozen_string_literal: true module GirFFI # Base class providing methods for generated classes representing GLib # structs, unions and boxed types. class StructLikeBase < ClassBase extend FFI::DataConverter def initialize store_pointer(nil) struct.owned = true struct.to_ptr.autorelease = false end # Class methods for struct-like classes. class << self def native_type FFI::Type::Struct.new(self::Struct) end def to_ffi_type self end def to_native(value, _context) value.struct end def get_value_from_pointer(pointer, offset) pointer + offset end def size self::Struct.size end def copy_value_to_pointer(value, pointer, offset = 0) bytes = value.to_ptr.read_bytes(size) pointer.put_bytes offset, bytes end # Create an unowned copy of the struct represented by val def copy_from(val) return unless val disown copy from(val) end # Wrap an owned copy of the struct represented by val def wrap_copy(val) return unless val own copy(val) end # Wrap value and take ownership of it def wrap_own(val) return unless val return if val.null? own wrap(val) end private def own(val) val.struct.owned = true val end def disown(val) val.struct.owned = nil val end # Create a copy of the struct represented by val def copy(val) new.tap do |copy| copy_value_to_pointer(val, copy.to_ptr) end end end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
gir_ffi-0.17.0 | lib/gir_ffi/struct_like_base.rb |
gir_ffi-0.16.1 | lib/gir_ffi/struct_like_base.rb |
gir_ffi-0.16.0 | lib/gir_ffi/struct_like_base.rb |