Sha256: 6b82b31a7c28914aeb923a118222b6784810e614bf4d09223a2ac62d0598eea5

Contents?: true

Size: 985 Bytes

Versions: 1

Compression:

Stored size: 985 Bytes

Contents

# frozen_string_literal: true

module TTFunk
  # Bitfield represents a series of bits that can individually be toggled.
  class BitField
    # Serialized value.
    # @return [Integer]
    attr_reader :value

    # @param value [Integer] initial value
    def initialize(value = 0)
      @value = value
    end

    # Set bit on.
    #
    # @param pos [Integer] bit position
    # @return [void]
    def on(pos)
      @value |= 2**pos
    end

    # If bit on?
    #
    # @param pos [Integer]
    # @return [Boolean]
    def on?(pos)
      (value & (2**pos)).positive?
    end

    # Set bit off.
    #
    # @param pos [Integer]
    # @return [void]
    def off(pos)
      @value &= (2**Math.log2(value).ceil) - (2**pos) - 1
    end

    # Is bit off?
    #
    # @param pos [Integer]
    # @return [Boolean]
    def off?(pos)
      !on?(pos)
    end

    # Get a duplicate of this bit field.
    #
    # @return [BitField]
    def dup
      self.class.new(value)
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
ttfunk-1.8.0 lib/ttfunk/bit_field.rb