# Class containing methods for creating and manipulating a bit array.
class BitArray
attr_accessor :byte_array
- attr_reader :size
+ attr_reader :size
# Method to initialize a new bit array of a given size in bits.
def initialize(size)
@count_array = init_count_array
end
+ # Method that sets all bits in the bit array.
+ def fill!
+ self.byte_array.fill!(~0)
+
+ self
+ end
+
+ # Method that unsets all bits in the bit array.
+ def clear!
+ self.byte_array.fill!(0)
+
+ self
+ end
+
# Method to set a bit to 1 at a given position in the bit array.
def bit_set(pos)
raise BitArrayError, "Position #{pos} must be an integer." unless pos.is_a? Fixnum
@byte_array[byte_pos(pos)] = @byte_array[byte_pos(pos)] | bit_pos(pos)
end
+ # Method to set a bit to 0 at a given position in the bit array.
+ def bit_unset(pos)
+ raise BitArrayError, "Position #{pos} must be an integer." unless pos.is_a? Fixnum
+ raise BitArrayError, "Position #{pos} outside of range: 0 ... #{@size}" unless (0 ... @size ).include? pos
+
+ mask = bit_pos(pos)
+ mask = ~mask
+
+ @byte_array[byte_pos(pos)] = @byte_array[byte_pos(pos)] & mask
+ end
+
# Method to check if a bit at a given position in the bit array is set.
def bit_set?(pos)
raise BitArrayError, "Position #{pos} must be an integer." unless pos.is_a? Fixnum
self
end
+ # Method to flip all bits in a bit array. All set bits become unset and visa versa.
+ def ~
+ self.byte_array = ~(self.byte_array)
+
+ self
+ end
+
# Method to convert a bit array to a string.
def to_s
string = ""