class GVariantArrayType
Public Class Methods
new(id, array_element)
click to toggle source
Calls superclass method
GVariantOffsetType::new
# File lib/gvariant.rb, line 260 def initialize(id, array_element) super(id, array_element.alignment, []) @element = array_element end
Public Instance Methods
read(buf)
click to toggle source
# File lib/gvariant.rb, line 265 def read(buf) size = buf.length if size == 0 return @element.is_a?(GVariantDictionaryType) ? {} : @default_value end values = [] c = 0 if (@element.fixed_size) return @default_value if (size % @element.fixed_size != 0) n = size / @element.fixed_size n.times do values << @element.read(buf[c, @element.fixed_size]) c += @element.fixed_size end else n = (size - read_offset(buf, -1)) / @offset_size n.times do |i| o = read_offset(buf, -n + i) values << @element.read(buf[c..o - 1]) c = @element.align(o) end end values end
write(vals)
click to toggle source
# File lib/gvariant.rb, line 296 def write(vals) buf = "" offsets = [] vals.each do |val| v = @element.write(val) @element.pad(buf) buf << v offsets << buf.length end write_offsets(buf, offsets) unless @element.fixed_size buf end