Class: Omnizip::Algorithms::BZip2::Bz2::BitWriter
- Inherits:
-
Object
- Object
- Omnizip::Algorithms::BZip2::Bz2::BitWriter
- Defined in:
- lib/omnizip/algorithms/bzip2/bz2.rb
Overview
MSB-first bit packer.
Instance Method Summary collapse
- #finish ⇒ Object
-
#initialize ⇒ BitWriter
constructor
A new instance of BitWriter.
- #write48(value) ⇒ Object
- #write_bit(bit) ⇒ Object
- #write_bits(bits, n) ⇒ Object
Constructor Details
#initialize ⇒ BitWriter
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
#finish ⇒ Object
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 |