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