Sha256: 17ec52480f6ea01286375962047a2fee4bdb6fcf508396f0ad5c9661638f558e

Contents?: true

Size: 667 Bytes

Versions: 28

Compression:

Stored size: 667 Bytes

Contents

module Plutonium
  module Lib
    class BitFlags
      delegate :sum, to: :indices

      def initialize(*flags)
        @map = flags.each_with_index.map { |flag, index| [flag, 2.pow(index)] }.to_h
      end

      def set?(value, *flags)
        check = bits(*flags)
        value & check == check
      end

      def extract(value)
        @map.select { |_flag, bit| value & bit == bit }.keys
      end

      def [](*flags)
        bits(*flags)
      end

      def bits(*flags)
        @map.slice(*flags).values.sum
      end

      def flags
        @flags ||= @map.keys
      end

      def indices
        @indices ||= @map.values
      end
    end
  end
end

Version data entries

28 entries across 28 versions & 1 rubygems

Version Path
plutonium-0.14.1 lib/plutonium/lib/bit_flags.rb
plutonium-0.14.0 lib/plutonium/lib/bit_flags.rb
plutonium-0.13.3 lib/plutonium/lib/bit_flags.rb
plutonium-0.13.2 lib/plutonium/lib/bit_flags.rb
plutonium-0.13.1 lib/plutonium/lib/bit_flags.rb
plutonium-0.13.0 lib/plutonium/lib/bit_flags.rb
plutonium-0.12.14 lib/plutonium/lib/bit_flags.rb
plutonium-0.12.13 lib/plutonium/lib/bit_flags.rb
plutonium-0.12.12 lib/plutonium/lib/bit_flags.rb
plutonium-0.12.11 lib/plutonium/lib/bit_flags.rb
plutonium-0.12.10 lib/plutonium/lib/bit_flags.rb
plutonium-0.12.9 lib/plutonium/lib/bit_flags.rb
plutonium-0.12.8 lib/plutonium/lib/bit_flags.rb
plutonium-0.12.7 lib/plutonium/lib/bit_flags.rb
plutonium-0.12.5 lib/plutonium/lib/bit_flags.rb
plutonium-0.12.4 lib/plutonium/lib/bit_flags.rb
plutonium-0.12.3 lib/plutonium/lib/bit_flags.rb
plutonium-0.12.2 lib/plutonium/lib/bit_flags.rb
plutonium-0.12.1 lib/plutonium/lib/bit_flags.rb
plutonium-0.12.0 lib/plutonium/lib/bit_flags.rb