Module: CBOR::Packed::Tagged_Packed_CBOR
- Defined in:
- lib/cbor-packed.rb
Instance Method Summary collapse
- #cbor_visit(&b) ⇒ Object
- #packed_merge(other, unpacker) ⇒ Object
- #to_packed_cbor1(packer = Packer.from_item(self)) ⇒ Object
- #to_unpacked_cbor ⇒ Object
- #to_unpacked_cbor1(unpacker) ⇒ Object
Instance Method Details
#cbor_visit(&b) ⇒ Object
484 485 486 487 488 |
# File 'lib/cbor-packed.rb', line 484 def cbor_visit(&b) if yield self value.cbor_visit(&b) end end |
#packed_merge(other, unpacker) ⇒ Object
534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 |
# File 'lib/cbor-packed.rb', line 534 def packed_merge(other, unpacker) # tag must be a function tag -- TODO add standin tag decoder for lhs (value) case tag when RECORD_TAG rhs = other.to_unpacked_cbor1(unpacker) raise ArgumentError, "*** need arrays for record tag (#{ value.inspect}, #{rhs.inspect})" unless Array === value && Array === rhs n = value.size - rhs.size if n > 0 rhs += [UNDEFINED] * n elsif n < 0 raise ArgumentError, "*** too many values (#{rhs.inspect }) for record tag keys (#{value.inspect })" unless Array === value && Array === rhs end Hash[value.zip(rhs).select{|k, v| v != UNDEFINED}] else raise ArgumentError, "*** function tag #{tag} not implemented" end end |
#to_packed_cbor1(packer = Packer.from_item(self)) ⇒ Object
555 556 557 558 559 560 561 |
# File 'lib/cbor-packed.rb', line 555 def to_packed_cbor1(packer = Packer.from_item(self)) if c = packer.has(self) c.to_packed_cbor1(packer) else CBOR::Tagged.new(tag, value.to_packed_cbor1(packer)) end end |
#to_unpacked_cbor ⇒ Object
489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 |
# File 'lib/cbor-packed.rb', line 489 def to_unpacked_cbor if tag == PACKED_TAG # check that this really is an array # warn value.to_yaml ma, aa, pv = value unpacker = Unpacker.new(ma, aa) pv.to_unpacked_cbor1(unpacker) elsif tag == MIXED_PACKED_TAG # check that this really is an array # warn value.to_yaml args, pv = value unpacker = Unpacker.new(args, args) pv.to_unpacked_cbor1(unpacker) else fail "*** Don't know how to unpack tag #{tag}" end end |
#to_unpacked_cbor1(unpacker) ⇒ Object
506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 |
# File 'lib/cbor-packed.rb', line 506 def to_unpacked_cbor1(unpacker) case tag when REF_TAG # warn "** REF_TAG1 value #{value.class.inspect} #{value.inspect}" unpacked_value = value.to_unpacked_cbor1(unpacker) # warn "** REF_TAG2 value #{unpacked_value.class.inspect} #{unpacked_value.inspect}" if Integer === unpacked_value # warn "** I REF_TAG value #{value.class.inspect} #{value.inspect}" unpacker.untag(unpacked_value) else unpacker.unprefix(0).packed_merge unpacked_value, unpacker end when 225...256 unpacker.unprefix(tag-(256-32)).packed_merge value, unpacker when 28704...32768 # (- 28704 (- 32768 4096)) == 32 unpacker.unprefix(tag-(32768-4096)).packed_merge value, unpacker when 1879052288...2147483648 # (- 1879052288 (- 2147483648 268435456)) == 4096 unpacker.unprefix(tag-(2147483648-268435456)).packed_merge value, unpacker when 216...224 value.packed_merge unpacker.unsuffix(tag-216), unpacker when 27647...28672 value.packed_merge unpacker.unsuffix(tag-(28672-1024)), unpacker when 1811940352...1879048192 value.packed_merge unpacker.unsuffix(tag-(1879048192-67108864)), unpacker else CBOR::Tagged.new(tag, value.to_unpacked_cbor1(unpacker)) end end |