相关数据结构
#define BloomHashCount 2
typedef uint64_t (*BloomHash)(const char* str);
typedef struct BloomFilter
{
Bitmap bm;
BloomHash bloom_hash[BloomHashCount];
}BloomFilter;
初始化
void BloomFilterInit(BloomFilter* bf)
{
if(bf == NULL)
{
return;
}
BitmapInit(&bf -> bm, MAXSIZE);
bf -> bloom_hash[0] = SDBMHash;
bf -> bloom_hash[1] = SDBMHash;
}
销毁
void BloomFilterDestroy(BloomFilter* bf)
{
if(bf == NULL)
{
return;
}
BitmapDestroy(&bf -> bm);
bf -> bloom_hash[0] = NULL;
bf -> bloom_hash[1] = NULL;
}
插入
void BloomHashInsert(BloomFilter* bf, const char* str)
{
if(bf == NULL || str == NULL)
{
return;
}
int i = 0;
for(; i < BloomHashCount; i ++)
{
uint64_t hash = bf -> bloom_hash[i](str) % MAXSIZE;
BitmapSet(&bf -> bm, hash);
}
}
判断是否存在
int BloomFilterIsExist(BloomFilter* bf, const char* str)
{
if(bf == NULL || str == NULL)
{
return 0;
}
int i = 0;
for(; i < BloomHashCount; i ++)
{
uint64_t hash = bf ->bloom_hash[i](str);
uint64_t ret = BitmapTest(&bf -> bm, hash);
if(ret == 0)
{
return 0;
}
}
return 1;
}