Module: Pack::Numbers::PackedInt56LE

Defined in:
lib/pack/numbers.rb

Class Method Summary collapse

Class Method Details

.read(input, header) ⇒ Object



70
71
72
73
74
75
# File 'lib/pack/numbers.rb', line 70

def self.read(input, header)
  flags = (0..6).reject { |i| header & (1 << i) == 0 }
  bytes = flags.map { |i| input.readbyte << (8 * i) }

  bytes.reduce(0) { |a, b| a | b }
end

.write(value) ⇒ Object



61
62
63
64
65
66
67
68
# File 'lib/pack/numbers.rb', line 61

def self.write(value)
  bytes = (0..6).map { |i| (value >> (8 * i)) & 0xff }

  flags  = bytes.map.with_index { |b, i| b == 0 ? 0 : 1 << i }
  header = flags.reduce(0) { |a, b| a | b }

  [header] + bytes.reject { |b| b == 0 }
end