mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-12-05 10:12:48 +01:00
Rolling bloom filter class
For when you need to keep track of the last N items you've seen, and can tolerate some false-positives. Rebased-by: Pieter Wuille <pieter.wuille@gmail.com>
This commit is contained in:
committed by
Pieter Wuille
parent
8a10000222
commit
69a5f8be0a
28
src/bloom.h
28
src/bloom.h
@@ -53,6 +53,10 @@ private:
|
||||
|
||||
unsigned int Hash(unsigned int nHashNum, const std::vector<unsigned char>& vDataToHash) const;
|
||||
|
||||
// Private constructor for CRollingBloomFilter, no restrictions on size
|
||||
CBloomFilter(unsigned int nElements, double nFPRate, unsigned int nTweak);
|
||||
friend class CRollingBloomFilter;
|
||||
|
||||
public:
|
||||
/**
|
||||
* Creates a new bloom filter which will provide the given fp rate when filled with the given number of elements
|
||||
@@ -97,4 +101,28 @@ public:
|
||||
void UpdateEmptyFull();
|
||||
};
|
||||
|
||||
/**
|
||||
* RollingBloomFilter is a probabilistic "keep track of most recently inserted" set.
|
||||
* Construct it with the number of items to keep track of, and a false-positive rate.
|
||||
*
|
||||
* contains(item) will always return true if item was one of the last N things
|
||||
* insert()'ed ... but may also return true for items that were not inserted.
|
||||
*/
|
||||
class CRollingBloomFilter
|
||||
{
|
||||
public:
|
||||
CRollingBloomFilter(unsigned int nElements, double nFPRate, unsigned int nTweak);
|
||||
|
||||
void insert(const std::vector<unsigned char>& vKey);
|
||||
bool contains(const std::vector<unsigned char>& vKey) const;
|
||||
|
||||
void clear();
|
||||
|
||||
private:
|
||||
unsigned int nBloomSize;
|
||||
unsigned int nInsertions;
|
||||
CBloomFilter b1, b2;
|
||||
};
|
||||
|
||||
|
||||
#endif // BITCOIN_BLOOM_H
|
||||
|
||||
Reference in New Issue
Block a user