Class: Unxls::BitOps

Inherits:
Object
  • Object
show all
Defined in:
lib/unxls/map.rb,
lib/unxls/bit_ops.rb

Overview

For easy binary operations

Instance Method Summary collapse

Constructor Details

#initialize(bits) ⇒ BitOps



7
8
9
# File 'lib/unxls/bit_ops.rb', line 7

def initialize(bits)
  @bits = bits
end

Instance Method Details

#reverseInteger

Examples:

BitOps.new(0b1100101).reverse # -> 0b1010011


37
38
39
40
41
42
43
44
45
46
# File 'lib/unxls/bit_ops.rb', line 37

def reverse
  number = @bits
  result = 0
  while number > 0 do
    result = result << 1
    result = result | (number & 1)
    number = number >> 1
  end
  result
end

#rol(bitsize, steps) ⇒ Integer

Examples:

.ror(0b11110000, 2, 8) # -> 0b11000011


53
54
55
# File 'lib/unxls/bit_ops.rb', line 53

def rol(bitsize, steps)
  rotate(bitsize, steps, :left)
end

#ror(bitsize, steps) ⇒ Integer

Examples:

.ror(0b11110000, 2, 8) # -> 0b00111100


62
63
64
# File 'lib/unxls/bit_ops.rb', line 62

def ror(bitsize, steps)
  rotate(bitsize, steps, :right)
end

#set_at?(index) ⇒ true, ...

Examples:

BitOps.new(0b010).set_at?(1) # -> true


15
16
17
18
# File 'lib/unxls/bit_ops.rb', line 15

def set_at?(index)
  return nil if index < 0
  @bits[index] == 1
end

#value_at(range) ⇒ Integer?

Examples:

BitOps.new(0b1110111).value_at(2..4) # -> 0b101
BitOps.new(0b1110111).value_at(2) # -> 0b1


25
26
27
28
29
30
31
32
# File 'lib/unxls/bit_ops.rb', line 25

def value_at(range)
  range = (range..range) if range.is_a?(Integer)
  bits_in_result = range.size
  offset = range.min
  return nil if !offset || offset < 0
  mask = make_mask(bits_in_result, offset)
  (@bits & mask) >> offset
end