class Bitfield

Constants

VERSION

Attributes

bits[R]

Public Class Methods

deserialize(path, size) click to toggle source
# File lib/bitfield.rb, line 43
def self.deserialize(path, size)
  new(size, File.binread(path))
end
new(length_in_bits, content=nil) click to toggle source
# File lib/bitfield.rb, line 14
def initialize(length_in_bits, content=nil)
  length_in_bytes = length_in_bits / 8
  @bits = content || (0.chr * length_in_bytes)
  raise LengthError.new(length_in_bytes, bits.length)  if length_in_bytes && length_in_bytes != bits.length
end

Public Instance Methods

get(idx) click to toggle source
# File lib/bitfield.rb, line 33
def get(idx)
  find(idx) do |chr, mask|
    (bits[chr].ord & mask) == mask
  end
end
serialize(path, verbose=false) click to toggle source
# File lib/bitfield.rb, line 39
def serialize(path, verbose=false)
  File.write(path, bits)
end
set(idx) click to toggle source
# File lib/bitfield.rb, line 20
def set(idx)
  find(idx) do |chr, mask|
    bits[chr] = (bits[chr].ord | mask).chr
  end
end
unset(idx) click to toggle source
# File lib/bitfield.rb, line 26
def unset(idx)
  find(idx) do |chr, mask|
    unmask = 255 ^ mask
    bits[chr] = (bits[chr].ord & unmask).chr
  end
end

Private Instance Methods

find(idx) { |chr, mask| ... } click to toggle source
# File lib/bitfield.rb, line 51
def find(idx)
  chr, mask = idx / 8, 2**(idx % 8)
  raise "Unexpected chr size #{chr.size}, expected 8" unless chr.size == 8
  raise "Unexpected mask size #{mask.size}, expected 8" unless mask.size == 8

  yield chr, mask
end