gStore/Util/BloomFilter.h

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