Sha256: c057fb753956da0efbae156e2da6104a5fd200a67b5400beda6038d754308cb4
Contents?: true
Size: 1.16 KB
Versions: 3
Compression:
Stored size: 1.16 KB
Contents
module GirFFI # Represents a null-terminated array. class ZeroTerminated include Enumerable attr_reader :element_type def initialize elm_t, ptr @element_type = elm_t @ptr = ptr end def to_ptr @ptr end def self.from type, arg new type, InPointer.from_array(type, arg) end def self.wrap type, arg new type, arg end def each return if @ptr.null? offset = 0 while (val = read_value(offset)) offset += ffi_type_size yield wrap_value(val) end end def == other to_a == other.to_a end private def read_value offset val = @ptr.send(getter_method, offset) val unless val.zero? end def getter_method @getter_method ||= "get_#{ffi_type}" end def wrap_value val case element_type when Array element_type.last.wrap val when Class element_type.wrap val else val end end def ffi_type @ffi_type ||= TypeMap.type_specification_to_ffitype element_type end def ffi_type_size @ffi_type_size ||= FFI.type_size(ffi_type) end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
gir_ffi-0.7.8 | lib/gir_ffi/zero_terminated.rb |
gir_ffi-0.7.7 | lib/gir_ffi/zero_terminated.rb |
gir_ffi-0.7.6 | lib/gir_ffi/zero_terminated.rb |