Class: Bitfield

Inherits:
Object
  • Object
show all
Defined in:
lib/bitfield.rb

Defined Under Namespace

Classes: LengthError

Constant Summary collapse

VERSION =
"0.1.0"

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(length_in_bits, content = nil) ⇒ Bitfield

Returns a new instance of Bitfield.

Raises:



14
15
16
17
18
# 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

Class Method Details

.deserialize(path, size) ⇒ Object



43
44
45
# File 'lib/bitfield.rb', line 43

def self.deserialize(path, size)
  new(size, File.binread(path))
end

Instance Method Details

#get(idx) ⇒ Object



33
34
35
36
37
# 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) ⇒ Object



39
40
41
# File 'lib/bitfield.rb', line 39

def serialize(path, verbose=false)
  File.write(path, bits)
end

#set(idx) ⇒ Object



20
21
22
23
24
# 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) ⇒ Object



26
27
28
29
30
31
# 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