1 #ifndef BLOOM_H
2 #define BLOOM_H
3 
4 #include <stdlib.h>
5 #include <stdint.h>
6 #include <stdbool.h>
7 
8 #include "file_utils.h"
9 
10 #define SALT_CONSTANT 0x66e8c41d
11 
12 typedef struct bloom_filter {
13     uint64_t capacity;
14     double error;
15     uint64_t num_bits;
16     uint64_t num_bytes;
17     uint32_t num_hashes;
18 
19     double bits_per_entry;
20     unsigned char *filter;
21     bool ready;
22 } bloom_filter_t;
23 
24 
25 bloom_filter_t *bloom_filter_new(uint64_t capacity, double error);
26 
27 int bloom_filter_check(bloom_filter_t *self, const char *key, size_t len);
28 int bloom_filter_add(bloom_filter_t *self, const char *key, size_t len);
29 
30 void bloom_filter_print(bloom_filter_t *self);
31 
32 void bloom_filter_destroy(bloom_filter_t *self);
33 
34 bool bloom_filter_write(bloom_filter_t *self, FILE *f);
35 bool bloom_filter_save(bloom_filter_t *self, char *path);
36 
37 bloom_filter_t *bloom_filter_read(FILE *f);
38 bloom_filter_t *bloom_filter_load(char *path);
39 
40 
41 #endif