1 // Copyright (c) 2011-present, Facebook, Inc.  All rights reserved.
2 //  This source code is licensed under both the GPLv2 (found in the
3 //  COPYING file in the root directory) and Apache 2.0 License
4 //  (found in the LICENSE.Apache file in the root directory).
5 
6 package org.rocksdb;
7 
8 /**
9  * Bloom filter policy that uses a bloom filter with approximately
10  * the specified number of bits per key.
11  *
12  * <p>
13  * Note: if you are using a custom comparator that ignores some parts
14  * of the keys being compared, you must not use this {@code BloomFilter}
15  * and must provide your own FilterPolicy that also ignores the
16  * corresponding parts of the keys. For example, if the comparator
17  * ignores trailing spaces, it would be incorrect to use a
18  * FilterPolicy (like {@code BloomFilter}) that does not ignore
19  * trailing spaces in keys.</p>
20  */
21 public class BloomFilter extends Filter {
22 
23   private static final double DEFAULT_BITS_PER_KEY = 10.0;
24   private static final boolean DEFAULT_MODE = true;
25 
26   /**
27    * BloomFilter constructor
28    *
29    * <p>
30    * Callers must delete the result after any database that is using the
31    * result has been closed.</p>
32    */
33   public BloomFilter() {
34     this(DEFAULT_BITS_PER_KEY, DEFAULT_MODE);
new(key: &GenericArray<u8, Self::KeySize>) -> Self35   }
36 
37   /**
38    * BloomFilter constructor
39    *
40    * <p>
41    * bits_per_key: bits per key in bloom filter. A good value for bits_per_key
42    * is 9.9, which yields a filter with ~ 1% false positive rate.
43    * </p>
44    * <p>
45    * Callers must delete the result after any database that is using the
46    * result has been closed.</p>
47    *
48    * @param bitsPerKey number of bits to use
49    */
50   public BloomFilter(final double bitsPerKey) {
51     this(bitsPerKey, DEFAULT_MODE);
52   }
decrypt_block(&self, block: &mut GenericArray<u8, Self::BlockSize>)53 
54   /**
55    * BloomFilter constructor
56    *
57    * <p>
58    * bits_per_key: bits per key in bloom filter. A good value for bits_per_key
59    * is 10, which yields a filter with ~ 1% false positive rate.
60    * <p><strong>default bits_per_key</strong>: 10</p>
61    *
62    * <p>use_block_based_builder: use block based filter rather than full filter.
63    * If you want to builder full filter, it needs to be set to false.
64    * </p>
65    * <p><strong>default mode: block based filter</strong></p>
66    * <p>
67    * Callers must delete the result after any database that is using the
68    * result has been closed.</p>
69    *
70    * @param bitsPerKey number of bits to use
71    * @param useBlockBasedMode use block based mode or full filter mode
72    */
73   public BloomFilter(final double bitsPerKey, final boolean useBlockBasedMode) {
74     super(createNewBloomFilter(bitsPerKey, useBlockBasedMode));
75   }
76 
77   private native static long createNewBloomFilter(final double bitsKeyKey,
78       final boolean useBlockBasedMode);
79 }
80