class GVariantDictionaryType
Public Class Methods
new(id, key_element, value_element)
click to toggle source
Calls superclass method
GVariantOffsetType::new
# File lib/gvariant.rb, line 206 def initialize(id, key_element, value_element) super(id, [ key_element.alignment, value_element.alignment ].max, [ key_element.default_value, value_element.default_value ]) @key_element = key_element @value_element = value_element if key_element.fixed_size && value_element.fixed_size @fixed_size = value_element.align(key_element.fixed_size) + value_element.fixed_size end end
Public Instance Methods
read(buf)
click to toggle source
# File lib/gvariant.rb, line 218 def read(buf) return @default_value if @fixed_size && buf.length != @fixed_size if @key_element.fixed_size key_end = @key_element.fixed_size value_end = buf.length else key_end = read_offset(buf, -1) value_end = buf.length - @offset_size end key = @key_element.read(buf[0..key_end - 1]) key = key.to_sym if key.is_a? String value = @value_element.read(buf[@value_element.align(key_end)..value_end - 1]) Hash[key, value] end
write(vals)
click to toggle source
# File lib/gvariant.rb, line 236 def write(vals) buf = "" offsets = [] vals.each_pair do |key, value| @key_element.pad(buf) buf << @key_element.write(key.to_s) unless @key_element.fixed_size offsets << buf.length end @value_element.pad(buf) buf << @value_element.write(value) unless @value_element.fixed_size || key == vals.keys.last offsets << buf.length end end write_offsets(buf, offsets) buf end