Sha256: 27fd3bc8bb701d28fe70e94b054b1eaf92536255ebfd9d89239e6300286a7790

Contents?: true

Size: 478 Bytes

Versions: 1

Compression:

Stored size: 478 Bytes

Contents

# frozen_string_literal: true

module Xor
  class Filter
    def initialize(size)
      @size = size
      @hashes = Array.new(size, 0)
    end

    def add(value)
      hash1, hash2 = hash(value)
      @hashes[hash1 % @size] ^= hash2
    end

    def include?(value)
      hash1, hash2 = hash(value)
      (@hashes[hash1 % @size] ^ hash2).zero?
    end

    private

    def hash(value)
      hash1 = value.hash
      hash2 = hash1 >> 16
      [hash1, hash2]
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
xor-0.1.0 lib/xor.rb