class GirFFI::ZeroTerminated
Represents a null-terminated array.
Attributes
element_type[R]
Public Class Methods
from(type, arg)
click to toggle source
# File lib/gir_ffi/zero_terminated.rb, line 17 def self.from(type, arg) new type, InPointer.from_array(type, arg) end
new(elm_t, ptr)
click to toggle source
# File lib/gir_ffi/zero_terminated.rb, line 8 def initialize(elm_t, ptr) @element_type = elm_t @ptr = ptr end
wrap(type, arg)
click to toggle source
# File lib/gir_ffi/zero_terminated.rb, line 21 def self.wrap(type, arg) new type, arg end
Public Instance Methods
==(other)
click to toggle source
# File lib/gir_ffi/zero_terminated.rb, line 34 def ==(other) to_a == other.to_a end
each() { |wrap_value(val)| ... }
click to toggle source
# File lib/gir_ffi/zero_terminated.rb, line 25 def each return if @ptr.null? offset = 0 while (val = read_value(offset)) offset += ffi_type_size yield wrap_value(val) end end
to_ptr()
click to toggle source
# File lib/gir_ffi/zero_terminated.rb, line 13 def to_ptr @ptr end
Private Instance Methods
fetch_value(offset)
click to toggle source
# File lib/gir_ffi/zero_terminated.rb, line 49 def fetch_value(offset) case ffi_type when Module ffi_type.get_value_from_pointer(@ptr, offset) when Symbol @ptr.send(getter_method, offset) else raise NotImplementedError end end
ffi_type()
click to toggle source
# File lib/gir_ffi/zero_terminated.rb, line 71 def ffi_type @ffi_type ||= TypeMap.type_specification_to_ffi_type element_type end
ffi_type_size()
click to toggle source
# File lib/gir_ffi/zero_terminated.rb, line 75 def ffi_type_size @ffi_type_size ||= FFI.type_size(ffi_type) end
getter_method()
click to toggle source
# File lib/gir_ffi/zero_terminated.rb, line 45 def getter_method @getter_method ||= "get_#{ffi_type}" end
read_value(offset)
click to toggle source
# File lib/gir_ffi/zero_terminated.rb, line 40 def read_value(offset) val = fetch_value(offset) val unless val.zero? end
wrap_value(val)
click to toggle source
# File lib/gir_ffi/zero_terminated.rb, line 60 def wrap_value(val) case element_type when Array element_type.last.wrap val when Class element_type.wrap val else val end end