42 lines
1.3 KiB
C
42 lines
1.3 KiB
C
|
/*=============================================================================
|
||
|
# Filename: BloomFilter.h
|
||
|
# Author: Bookug Lobert
|
||
|
# Mail: 1181955272@qq.com
|
||
|
# Last Modified: 2015-10-20 13:18
|
||
|
# Description: http://blog.csdn.net/hguisu/article/details/7866173
|
||
|
TODO:this strategy can be used in Join and KVstore-search/modify/remove, or the uppest level!
|
||
|
really better? appropiate if key num small but search too many!
|
||
|
=============================================================================*/
|
||
|
|
||
|
#ifndef _UTIL_BLOOMFILTER_H
|
||
|
#define _UTIL_BLOOMFILTER_H
|
||
|
|
||
|
#include "Util.h"
|
||
|
|
||
|
#define SETBIT(ch, n) ch[n/8] |= 1 << (7-n%8)
|
||
|
#define GETBIT(ch, n) (ch[n/8] & (1<<(7-n%8))) >> (7-n%8)
|
||
|
|
||
|
class BloomFilter
|
||
|
{
|
||
|
public:
|
||
|
BloomFilter();
|
||
|
BloomFilter(unsigned _num); //num of all keys
|
||
|
void addRecord(int _record);
|
||
|
//NOTICE:we hope a Bstr-like struct here, for the length maybe very large
|
||
|
void addRecord(const char* _record, unsigned _len);
|
||
|
bool checkRecord(int _record) const;
|
||
|
bool checkRecord(const char* _record, unsigned _len) const;
|
||
|
~BloomFilter();
|
||
|
private:
|
||
|
unsigned length; //length of total bits, mod 8 == 0
|
||
|
char *filter; //the bit space
|
||
|
unsigned hfnum; //num of hash functions
|
||
|
double rate; //false positive
|
||
|
HashFunction* hfptr; //hash functions pointer array
|
||
|
|
||
|
void init();
|
||
|
};
|
||
|
|
||
|
#endif //_UTIL_BLOOMFILTER_H
|
||
|
|