Branch to refactor and debug (AVLs bugged)
This commit is contained in:
48
src/bloom.c
48
src/bloom.c
@ -122,6 +122,40 @@ static void setup_buckets(struct bloom * bloom, unsigned int cache_size)
|
||||
}
|
||||
|
||||
|
||||
// TODO
|
||||
int bloom_filter_size(int entries, double error)
|
||||
{
|
||||
int bytes;
|
||||
double num;
|
||||
double denom;
|
||||
double bpe;
|
||||
int bits;
|
||||
unsigned bucket_bytes;
|
||||
int not_even_by;
|
||||
|
||||
num = log(error);
|
||||
denom = 0.480453013918201; // ln(2)^2
|
||||
bpe = -(num / denom);
|
||||
bits = (int)(((double)entries) * bpe);
|
||||
|
||||
if (bits % 8) {
|
||||
bytes = (bits / 8) + 1;
|
||||
}
|
||||
else {
|
||||
bytes = bits / 8;
|
||||
}
|
||||
|
||||
bucket_bytes = BLOOM_BUCKET_SIZE_FALLBACK;
|
||||
not_even_by = bytes % bucket_bytes;
|
||||
if (not_even_by) {
|
||||
// adjust bytes
|
||||
bytes += (bucket_bytes - not_even_by);
|
||||
}
|
||||
|
||||
return bytes;
|
||||
}
|
||||
|
||||
|
||||
int bloom_init_size(struct bloom * bloom, int entries, double error,
|
||||
unsigned int cache_size)
|
||||
{
|
||||
@ -151,19 +185,21 @@ int bloom_init_size(struct bloom * bloom, int entries, double error,
|
||||
|
||||
setup_buckets(bloom, cache_size);
|
||||
|
||||
bloom->bf = (unsigned char *)calloc(bloom->bytes, sizeof(unsigned char));
|
||||
if (bloom->bf == NULL) {
|
||||
return 1;
|
||||
}
|
||||
// TODO comment
|
||||
memset(bloom->bf, 0, bloom->bytes);
|
||||
//bloom->bf = (unsigned char *)calloc(bloom->bytes, sizeof(unsigned char));
|
||||
//if (bloom->bf == NULL) {
|
||||
// return 1;
|
||||
//}
|
||||
|
||||
bloom->ready = 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int bloom_init(struct bloom * bloom, int entries, double error)
|
||||
int bloom_init(struct bloom * bloom, int entries) //, double error)
|
||||
{
|
||||
return bloom_init_size(bloom, entries, error, 0);
|
||||
return bloom_init_size(bloom, entries, BLOOM_FILTER_ERROR_RATE, 0);
|
||||
}
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user