Module: Ibex::Tables::PackedIntegers
- Defined in:
- lib/json5/generated_parser.rb
Overview
Encodes nonnegative integer arrays into compact generated-source literals. Zero represents nil; positive values are offset by one.
Class Method Summary collapse
- .decode(source) ⇒ Object
- .decode_required(source) ⇒ Object
- .decode_signed(source) ⇒ Object
- .encode(values) ⇒ Object
-
.encode_signed(values) ⇒ Object
Zigzag-encode signed values after reserving zero for nil.
Class Method Details
.decode(source) ⇒ Object
9492 9493 9494 9495 9496 9497 9498 9499 9500 |
# File 'lib/json5/generated_parser.rb', line 9492 def decode(source) binary = source.unpack1("m0") raise ArgumentError, "packed integer source is invalid" unless binary.is_a?(String) values = binary.unpack("w*") #: Array[Integer] values.map { |value| value.zero? ? nil : value - 1 } rescue ArgumentError raise ArgumentError, "packed integer source is invalid" end |
.decode_required(source) ⇒ Object
9503 9504 9505 9506 9507 9508 9509 |
# File 'lib/json5/generated_parser.rb', line 9503 def decode_required(source) decode(source).map do |value| raise ArgumentError, "packed integer source contains nil" unless value value end end |
.decode_signed(source) ⇒ Object
9524 9525 9526 9527 9528 9529 9530 |
# File 'lib/json5/generated_parser.rb', line 9524 def decode_signed(source) decode(source).map do |value| next unless value value.even? ? value / 2 : -((value + 1) / 2) end end |
.encode(values) ⇒ Object
9482 9483 9484 9485 9486 9487 9488 9489 |
# File 'lib/json5/generated_parser.rb', line 9482 def encode(values) encoded = values.map do |value| raise ArgumentError, "packed integer must be nonnegative or nil" if value&.negative? value ? value + 1 : 0 end.pack("w*") [encoded].pack("m0") end |
.encode_signed(values) ⇒ Object
Zigzag-encode signed values after reserving zero for nil.
9513 9514 9515 9516 9517 9518 9519 9520 9521 |
# File 'lib/json5/generated_parser.rb', line 9513 def encode_signed(values) encode( values.map do |value| next unless value value.negative? ? (-value * 2) - 1 : value * 2 end ) end |