Class: GVariantTupleType
- Inherits:
-
GVariantOffsetType
- Object
- GVariantBasicType
- GVariantOffsetType
- GVariantTupleType
- Defined in:
- lib/gvariant.rb
Instance Attribute Summary
Attributes inherited from GVariantBasicType
#alignment, #default_value, #fixed_size, #id
Instance Method Summary collapse
-
#initialize(id, elements) ⇒ GVariantTupleType
constructor
A new instance of GVariantTupleType.
- #read(buf) ⇒ Object
- #write(vals) ⇒ Object
Methods inherited from GVariantOffsetType
Methods inherited from GVariantBasicType
Constructor Details
#initialize(id, elements) ⇒ GVariantTupleType
Returns a new instance of GVariantTupleType.
313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 |
# 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 |
Instance Method Details
#read(buf) ⇒ Object
341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 |
# 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) ⇒ Object
366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 |
# 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 |