Class: Omnizip::Algorithms::BZip2::Bz2::BitWriter

Inherits:
Object
  • Object
show all
Defined in:
lib/omnizip/algorithms/bzip2/bz2.rb

Overview

MSB-first bit packer.

Instance Method Summary collapse

Constructor Details

#initializeBitWriter

Returns a new instance of BitWriter.



649
650
651
652
653
# File 'lib/omnizip/algorithms/bzip2/bz2.rb', line 649

def initialize
  @out = []
  @current = 0
  @nbits = 0
end

Instance Method Details

#finishObject



676
677
678
679
680
681
682
# File 'lib/omnizip/algorithms/bzip2/bz2.rb', line 676

def finish
  if @nbits.positive?
    @out << ((@current << (8 - @nbits)) & 0xFF)
    @nbits = 0
  end
  @out.pack("C*")
end

#write48(value) ⇒ Object



671
672
673
674
# File 'lib/omnizip/algorithms/bzip2/bz2.rb', line 671

def write48(value)
  write_bits(value >> 24, 24)
  write_bits(value & 0xFF_FFFF, 24)
end

#write_bit(bit) ⇒ Object



667
668
669
# File 'lib/omnizip/algorithms/bzip2/bz2.rb', line 667

def write_bit(bit)
  write_bits(bit ? 1 : 0, 1)
end

#write_bits(bits, n) ⇒ Object



655
656
657
658
659
660
661
662
663
664
665
# File 'lib/omnizip/algorithms/bzip2/bz2.rb', line 655

def write_bits(bits, n)
  return if n.zero?

  mask = n == 32 ? bits : bits & ((1 << n) - 1)
  @current = ((@current << n) | mask) & 0xFFFF_FFFF_FFFF_FFFF
  @nbits += n
  while @nbits >= 8
    @nbits -= 8
    @out << ((@current >> @nbits) & 0xFF)
  end
end