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