class Overlook::BitBuffer

Public Class Methods

new(io) click to toggle source
# File lib/overlook/bit_buffer.rb, line 3
def initialize(io)
  @io        = io
  @buffer    = 0
  @available = 0
end

Public Instance Methods

bits(numbits) click to toggle source
# File lib/overlook/bit_buffer.rb, line 13
def bits(numbits)
  if numbits == 8 && @available == 0
    byte = refresh_buffer
    @available = 0
    return byte
  end

  numbits.times.reduce(0) do |result, index|
    refresh_buffer unless available_bits?
    result |= getbit << index
  end
end
bytes(num) click to toggle source
# File lib/overlook/bit_buffer.rb, line 9
def bytes(num)
  @io.read(num)
end
eof?() click to toggle source
# File lib/overlook/bit_buffer.rb, line 26
def eof?
  @io.eof?
end
skip(n) click to toggle source
# File lib/overlook/bit_buffer.rb, line 30
def skip(n)
  @io.seek(n, IO::SEEK_CUR)
end

Private Instance Methods

available_bits?() click to toggle source
# File lib/overlook/bit_buffer.rb, line 42
def available_bits?
  @available != 0
end
getbit() click to toggle source
# File lib/overlook/bit_buffer.rb, line 36
def getbit
  bit = (@buffer >> (8 - @available)) & 1
  @available = @available.pred
  bit
end
refresh_buffer() click to toggle source
# File lib/overlook/bit_buffer.rb, line 46
def refresh_buffer
  @buffer     = @io.getbyte
  @available  = 8
  @buffer
end