Represents a null-terminated array.
# File lib/gir_ffi/zero_terminated.rb, line 17 def self.from type, arg self.new type, InPointer.from_array(type, arg) end
# File lib/gir_ffi/zero_terminated.rb, line 8 def initialize elm_t, ptr @element_type = elm_t @ptr = ptr end
# File lib/gir_ffi/zero_terminated.rb, line 21 def self.wrap type, arg self.new type, arg end
# File lib/gir_ffi/zero_terminated.rb, line 37 def ==(other) self.to_a == other.to_a end
# 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(ffi_type) if complex_element_type? val = element_class.wrap val end yield val end end
# File lib/gir_ffi/zero_terminated.rb, line 13 def to_ptr @ptr end
# File lib/gir_ffi/zero_terminated.rb, line 56 def basic_element_type if complex_element_type? element_type.first else element_type end end
# File lib/gir_ffi/zero_terminated.rb, line 52 def complex_element_type? Array === element_type end
# File lib/gir_ffi/zero_terminated.rb, line 72 def element_class if complex_element_type? element_type.last end end
# File lib/gir_ffi/zero_terminated.rb, line 48 def ffi_type @ffi_type ||= TypeMap.type_specification_to_ffitype basic_element_type end
# File lib/gir_ffi/zero_terminated.rb, line 64 def is_null_value value if basic_element_type == :pointer value.null? else value == 0 end end
# File lib/gir_ffi/zero_terminated.rb, line 43 def read_value offset val = @ptr.send("get_#{ffi_type}", offset) return val unless is_null_value(val) end