Class: GVariantDictionaryType
- Inherits:
-
GVariantOffsetType
- Object
- GVariantBasicType
- GVariantOffsetType
- GVariantDictionaryType
- Defined in:
- lib/gvariant.rb
Instance Attribute Summary
Attributes inherited from GVariantBasicType
#alignment, #default_value, #fixed_size, #id
Instance Method Summary collapse
-
#initialize(id, key_element, value_element) ⇒ GVariantDictionaryType
constructor
A new instance of GVariantDictionaryType.
- #read(buf) ⇒ Object
- #write(vals) ⇒ Object
Methods inherited from GVariantOffsetType
Methods inherited from GVariantBasicType
Constructor Details
#initialize(id, key_element, value_element) ⇒ GVariantDictionaryType
Returns a new instance of GVariantDictionaryType.
206 207 208 209 210 211 212 213 214 215 216 |
# 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 |
Instance Method Details
#read(buf) ⇒ Object
218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 |
# 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) ⇒ Object
236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 |
# 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 |