Class: Unxls::BitOps
- Inherits:
-
Object
- Object
- Unxls::BitOps
- Defined in:
- lib/unxls/map.rb,
lib/unxls/bit_ops.rb
Overview
For easy binary operations
Instance Method Summary collapse
-
#initialize(bits) ⇒ BitOps
constructor
A new instance of BitOps.
- #reverse ⇒ Integer
- #rol(bitsize, steps) ⇒ Integer
- #ror(bitsize, steps) ⇒ Integer
- #set_at?(index) ⇒ true, ...
- #value_at(range) ⇒ Integer?
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
#reverse ⇒ Integer
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
53 54 55 |
# File 'lib/unxls/bit_ops.rb', line 53 def rol(bitsize, steps) rotate(bitsize, steps, :left) end |
#ror(bitsize, steps) ⇒ Integer
62 63 64 |
# File 'lib/unxls/bit_ops.rb', line 62 def ror(bitsize, steps) rotate(bitsize, steps, :right) end |
#set_at?(index) ⇒ 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?
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 |