Sha256: 48c8a67690583e0abea796eb50d59c38a1d2a742e8d4784ec72eccd97b6403ea

Contents?: true

Size: 884 Bytes

Versions: 1

Compression:

Stored size: 884 Bytes

Contents

require "bx/version"

class Bx
  class ::Integer
    def hi_bits
      int = self
      Enumerator.new do |e|
        loop do
          b_len = int.bit_length
          break if b_len == 0
          pos = b_len - 1
          e << pos
          int = int ^ (1 << pos)
        end
      end
    end

    def lo_bits
      int = self
      Enumerator.new do |e|
        off = 0
        loop do
          lowest = int & -int
          break if lowest == 0
          b_len = lowest.bit_length
          off += b_len
          e << off - 1
          int = int >> b_len
        end
      end
    end
  end

  def initialize
    @hash = Hash.new{ |h, k| h[k] = 0 }
  end

  def []=(key, id)
    @hash[key] |= (1 << id)
  end

  def [](key)
    @hash[key]
  end

  def keys
    @hash.keys
  end

  def values
    @hash.values
  end

  def bits_bytes
    @hash.each_value.sum(&:size)
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
bx-0.1.1 lib/bx.rb