class GVariantTupleType
Public Class Methods
new(id, elements)
click to toggle source
Calls superclass method
GVariantOffsetType::new
# File lib/gvariant.rb, line 313 def initialize(id, elements) super(id, 1, []) @elements = elements @fixed_size = 0 elements.each do |element| if element.fixed_size unless @fixed_size.nil? @fixed_size = element.align(@fixed_size + element.fixed_size) end else @fixed_size = nil end if element.alignment > @alignment @alignment = element.alignment end @default_value << element.default_value end @fixed_size = 1 if @fixed_size == 0 if @fixed_size @fixed_size = align(@fixed_size) end end
Public Instance Methods
read(buf)
click to toggle source
# File lib/gvariant.rb, line 341 def read(buf) return @default_value if @fixed_size && buf.length != @fixed_size cur_offset = 0 c = 0 @elements.map do |element| c = element.align(c) if element.fixed_size n = c + element.fixed_size elsif element != @elements.last cur_offset -= 1 n = read_offset(buf, cur_offset) else read_offset(buf, 0) n = buf.length - @offset_size * -cur_offset end v = element.read(buf[c..n - 1]) c = n v end end
write(vals)
click to toggle source
# File lib/gvariant.rb, line 366 def write(vals) buf = "" offsets = [] o = 0 i = 0 @elements.each do |element| b = element.write(vals[i]) element.pad(buf) buf << b i += 1 o += b.length offsets << o unless element.fixed_size || element == @elements.last end pad(buf) write_offsets(buf, offsets) buf end