# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+require 'narray'
+
BitsInChar = 8
# Error class for all exceptions to do with BitArray.
# Class containing methods for creating and manipulating a bit array.
class BitArray
- attr_reader :size, :byte_array
+ attr_accessor :byte_array
+ attr_reader :size
# Method to initialize a new bit array of a given size in bits.
def initialize(size)
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
- @byte_array[byte_pos(pos)] = (@byte_array[byte_pos(pos)].ord | bit_pos(pos)).chr
+ @byte_array[byte_pos(pos)] = @byte_array[byte_pos(pos)] | bit_pos(pos)
end
# Method to check if a bit at a given position in the bit array is set.
result = BitArray.new(ba.size)
- (0 ... ba.byte_array.size).each do |byte|
- result.byte_array[byte] = (self.byte_array[byte].ord & ba.byte_array[byte].ord).chr
- end
+ result.byte_array = self.byte_array & ba.byte_array
result
end
result = BitArray.new(ba.size)
- (0 ... ba.byte_array.size).each do |byte|
- result.byte_array[byte] = (self.byte_array[byte].ord | ba.byte_array[byte].ord).chr
- end
+ result.byte_array = self.byte_array | ba.byte_array
result
end
result = BitArray.new(ba.size)
- (0 ... ba.byte_array.size).each do |byte|
- result.byte_array[byte] = (self.byte_array[byte].ord ^ ba.byte_array[byte].ord).chr
- end
+ result.byte_array = self.byte_array ^ ba.byte_array
result
end
byte_array << 0.chr * (((@size - 1) / BitsInChar) + 1)
byte_array
+
+ NArray.byte(((@size - 1) / BitsInChar) + 1)
end
# Method that returns an array where the element index value is