class Barray::BitArray
Attributes
byte_size[RW]
data[RW]
size[RW]
Public Class Methods
new(size)
click to toggle source
# File lib/barray.rb, line 10 def initialize(size) @size = size @byte_size = (size / 8.0).ceil @data = init_data end
Public Instance Methods
dump()
click to toggle source
# File lib/barray.rb, line 16 def dump data.dup end
each_bit() { |get(bit_position)| ... }
click to toggle source
# File lib/barray.rb, line 55 def each_bit return enum_for(:each_bit) unless block_given? size.times do |bit_position| yield get(bit_position) end end
get(position)
click to toggle source
# File lib/barray.rb, line 41 def get(position) ensure_position!(position) data.getbyte(position / 8) & (1 << (position % 8)) != 0 ? 1 : 0 end
load(data_in)
click to toggle source
# File lib/barray.rb, line 20 def load(data_in) raise LossyOperationError, 'Data size exceeds array size' if data_in.bytesize > byte_size self.data = data_in.dup << "\u0000" * (byte_size - data_in.bytesize) end
reset()
click to toggle source
# File lib/barray.rb, line 46 def reset init_data end
set(position)
click to toggle source
# File lib/barray.rb, line 26 def set(position) ensure_position!(position) data.setbyte(position / 8, (data.getbyte(position / 8) | (1 << (position % 8)))) end
set?(position)
click to toggle source
# File lib/barray.rb, line 36 def set?(position) ensure_position!(position) get(position) != 0 end
set_size()
click to toggle source
# File lib/barray.rb, line 63 def set_size count = 0 data.each_byte do |byte| next if byte.zero? count += byte.to_s(2).split('').reject { |bit| bit == '0' }.length end count end
toggle(position)
click to toggle source
# File lib/barray.rb, line 50 def toggle(position) ensure_position!(position) data.setbyte(position / 8, (data.getbyte(position / 8) ^ (1 << (position % 8)))) end
unset(position)
click to toggle source
# File lib/barray.rb, line 31 def unset(position) ensure_position!(position) data.setbyte(position / 8, (data.getbyte(position / 8) & (255 ^ (1 << (position % 8))))) end
unset_size()
click to toggle source
# File lib/barray.rb, line 75 def unset_size size - set_size end
Private Instance Methods
ensure_position!(position)
click to toggle source
# File lib/barray.rb, line 88 def ensure_position!(position) raise InvalidPositionError, 'Position cannot exceed size' if position >= size end
init_data()
click to toggle source
# File lib/barray.rb, line 84 def init_data self.data = "\u0000" * byte_size end