From 8d7e1ac0e510862c1ecfa2fc73ed2166cbab97e0 Mon Sep 17 00:00:00 2001 From: Thomas Charbonnel Date: Thu, 23 Mar 2017 16:55:53 +0800 Subject: [PATCH 1/3] Fix #24: add() method return a boolean indicating a 'fresh' insert --- .../src/main/scala/bloomfilter/mutable/BloomFilter.scala | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/bloom-filter/src/main/scala/bloomfilter/mutable/BloomFilter.scala b/bloom-filter/src/main/scala/bloomfilter/mutable/BloomFilter.scala index 39b4e10..2590694 100644 --- a/bloom-filter/src/main/scala/bloomfilter/mutable/BloomFilter.scala +++ b/bloom-filter/src/main/scala/bloomfilter/mutable/BloomFilter.scala @@ -16,13 +16,18 @@ class BloomFilter[T] private (val numberOfBits: Long, val numberOfHashes: Int, p val hash = canGenerateHash.generateHash(x) val hash1 = hash >>> 32 val hash2 = (hash << 32) >> 32 + var was_defined = true var i = 0 while (i < numberOfHashes) { val computedHash = hash1 + i * hash2 + if (!bits.get((computedHash & Long.MaxValue) % numberOfBits)) + was_defined = false bits.set((computedHash & Long.MaxValue) % numberOfBits) i += 1 } + + !was_defined } def union(that: BloomFilter[T]): BloomFilter[T] = { From 18a5077361bb3c234adac9f972f2f6284319810f Mon Sep 17 00:00:00 2001 From: Thomas Charbonnel Date: Thu, 23 Mar 2017 16:56:04 +0800 Subject: [PATCH 2/3] Style: add blank line --- .../src/main/scala/bloomfilter/mutable/BloomFilter.scala | 1 + 1 file changed, 1 insertion(+) diff --git a/bloom-filter/src/main/scala/bloomfilter/mutable/BloomFilter.scala b/bloom-filter/src/main/scala/bloomfilter/mutable/BloomFilter.scala index 2590694..49098a8 100644 --- a/bloom-filter/src/main/scala/bloomfilter/mutable/BloomFilter.scala +++ b/bloom-filter/src/main/scala/bloomfilter/mutable/BloomFilter.scala @@ -46,6 +46,7 @@ class BloomFilter[T] private (val numberOfBits: Long, val numberOfHashes: Int, p val hash = canGenerateHash.generateHash(x) val hash1 = hash >>> 32 val hash2 = (hash << 32) >> 32 + var i = 0 while (i < numberOfHashes) { val computedHash = hash1 + i * hash2 From 44d66c8765e7020b248757a499b7a8d751d07d1c Mon Sep 17 00:00:00 2001 From: Thomas Charbonnel Date: Thu, 23 Mar 2017 17:00:04 +0800 Subject: [PATCH 3/3] Doc: add comment to BloomFilter#add --- .../src/main/scala/bloomfilter/mutable/BloomFilter.scala | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/bloom-filter/src/main/scala/bloomfilter/mutable/BloomFilter.scala b/bloom-filter/src/main/scala/bloomfilter/mutable/BloomFilter.scala index 49098a8..7a77b50 100644 --- a/bloom-filter/src/main/scala/bloomfilter/mutable/BloomFilter.scala +++ b/bloom-filter/src/main/scala/bloomfilter/mutable/BloomFilter.scala @@ -12,6 +12,11 @@ class BloomFilter[T] private (val numberOfBits: Long, val numberOfHashes: Int, p this(numberOfBits, numberOfHashes, new UnsafeBitArray(numberOfBits)) } + /** Add an item in the Bloom filter + * + * @param x the T item to add + * @return true if the item was not in the filter before, false otherwise + */ def add(x: T): Unit = { val hash = canGenerateHash.generateHash(x) val hash1 = hash >>> 32