content: // Copyright (c) 2011-present, Facebook, Inc.  All rights reserved.
  //  This source code is licensed under both the GPLv2 (found in the
  //  COPYING file in the root directory) and Apache 2.0 License
  //  (found in the LICENSE.Apache file in the root directory).
  
  package org.rocksdb;
  
  /**
   * Bloom filter policy that uses a bloom filter with approximately
   * the specified number of bits per key.
   *
   * <p>
   * Note: if you are using a custom comparator that ignores some parts
   * of the keys being compared, you must not use this {@code BloomFilter}
   * and must provide your own FilterPolicy that also ignores the
   * corresponding parts of the keys. For example, if the comparator
   * ignores trailing spaces, it would be incorrect to use a
   * FilterPolicy (like {@code BloomFilter}) that does not ignore
   * trailing spaces in keys.</p>
   */
  public class BloomFilter extends Filter {
  
    private static final int DEFAULT_BITS_PER_KEY = 10;
    private static final boolean DEFAULT_MODE = true;
  
    /**
     * BloomFilter constructor
     *
     * <p>
     * Callers must delete the result after any database that is using the
     * result has been closed.</p>
     */
    public BloomFilter() {
      this(DEFAULT_BITS_PER_KEY, DEFAULT_MODE);
    }
  
    /**
     * BloomFilter constructor
     *
     * <p>
     * bits_per_key: bits per key in bloom filter. A good value for bits_per_key
     * is 10, which yields a filter with ~ 1% false positive rate.
     * </p>
     * <p>
     * Callers must delete the result after any database that is using the
     * result has been closed.</p>
     *
     * @param bitsPerKey number of bits to use
     */
    public BloomFilter(final int bitsPerKey) {
      this(bitsPerKey, DEFAULT_MODE);
    }
  
    /**
     * BloomFilter constructor
     *
     * <p>
     * bits_per_key: bits per key in bloom filter. A good value for bits_per_key
     * is 10, which yields a filter with ~ 1% false positive rate.
     * <p><strong>default bits_per_key</strong>: 10</p>
     *
     * <p>use_block_based_builder: use block based filter rather than full filter.
     * If you want to builder full filter, it needs to be set to false.
     * </p>
     * <p><strong>default mode: block based filter</strong></p>
     * <p>
     * Callers must delete the result after any database that is using the
     * result has been closed.</p>
     *
     * @param bitsPerKey number of bits to use
     * @param useBlockBasedMode use block based mode or full filter mode
     */
    public BloomFilter(final int bitsPerKey, final boolean useBlockBasedMode) {
      super(createNewBloomFilter(bitsPerKey, useBlockBasedMode));
    }
  
    private native static long createNewBloomFilter(final int bitsKeyKey,
        final boolean useBlockBasedMode);
  }
  