return !ret;
}
-int bloom_test_and_insert_string(const char *str, struct bloom *b)
-{
- uint32_t len = strlen(str);
-
- return bloom_test_and_insert((const uint8_t *)str, len, b);
-}
-
+/**
+ * Deallocate a bloom filter.
+ *
+ * \param b The filter to deallocate.
+ */
void bloom_free(struct bloom *b)
{
if (!b)
free(b);
}
+/**
+ * Initialize a bloom filter.
+ *
+ * \param order Use a filter containing 2^order bits.
+ * \param num_hash_functions Set that many bits in the filter per entry.
+ */
int bloom_init(unsigned order, unsigned num_hash_functions,
struct bloom **result)
{
#ifdef TEST_BLOOM
+int bloom_test_and_insert_string(const char *str, struct bloom *b)
+{
+ uint32_t len = strlen(str);
+
+ return bloom_test_and_insert((const uint8_t *)str, len, b);
+}
+
void add_stdin(struct bloom *b)
{
char buf[255];
+/*
+ * Copyright (C) 2008 Andre Noll <maan@systemlinux.org>
+ *
+ * Licensed under the GPL v2. For licencing details see COPYING.
+ */
+
+/** \file bloom.h Struct bloom and bloom filter functions. */
+
+/** Describes one instance of a bloom filter. */
struct bloom {
+ /** The bloom filter is of size 2^order bits. */
unsigned order;
+ /** Set that many bits in the filter per entry. */
unsigned num_hash_functions;
+ /** How many entries have been inserted so far. */
uint64_t num_entries;
+ /** Number of bits currently set. */
uint64_t num_set_bits;
+ /** The bit array. */
uint8_t *filter;
};
return 1;
}
+/** Data size to hash for the global bloom filter. */
#define GLOBAL_BLOOM_BUF_SIZE (sizeof(ino_t) + sizeof(dev_t) + sizeof(off_t))
+/** For the user bloom filter also the uid is being hashed. */
#define USER_BLOOM_BUF_SIZE (GLOBAL_BLOOM_BUF_SIZE + sizeof(uid_t))
static void make_bloom_buf(struct stat64 *s, uint8_t buf[USER_BLOOM_BUF_SIZE])