Class: BIL::Packer

Inherits:
Object
  • Object
show all
Defined in:
lib/bil/packer.rb

Instance Method Summary collapse

Constructor Details

#initialize(&packed) ⇒ Packer

Returns a new instance of Packer.



3
4
5
# File 'lib/bil/packer.rb', line 3

def initialize(&packed)
  @packed = packed
end

Instance Method Details

#new!Object



7
8
9
# File 'lib/bil/packer.rb', line 7

def new!
  @packed.call(TABLE[16])
end

#pack(*integers, delineate: true) ⇒ Object



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/bil/packer.rb', line 11

def pack(*integers, delineate: true)
  new! if delineate

  integers.each do |int|
    memo = Integer(int)
    raise ArgumentError, "Cannot pack negative integers" if memo < 0

    string = ''

    begin
      chunk = memo & 15
      chunk += 16 unless string.empty?
      string.prepend(TABLE[chunk])
      memo = memo >> 4
    end until memo == 0

    @packed.call(string)
  end
rescue TypeError => e
  raise ArgumentError, e.message
end