Merge pull request #3912

b1b9c76 Fix bloom filter not to use bit_mask (peryaudo)
This commit is contained in:
Wladimir J. van der Laan 2014-04-11 15:12:59 +02:00
commit 8562179612
No known key found for this signature in database
GPG Key ID: 74810B012346C9A6
1 changed files with 2 additions and 4 deletions

View File

@ -15,8 +15,6 @@
using namespace std; using namespace std;
static const unsigned char bit_mask[8] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80};
CBloomFilter::CBloomFilter(unsigned int nElements, double nFPRate, unsigned int nTweakIn, unsigned char nFlagsIn) : CBloomFilter::CBloomFilter(unsigned int nElements, double nFPRate, unsigned int nTweakIn, unsigned char nFlagsIn) :
// The ideal size for a bloom filter with a given number of elements and false positive rate is: // The ideal size for a bloom filter with a given number of elements and false positive rate is:
// - nElements * log(fp rate) / ln(2)^2 // - nElements * log(fp rate) / ln(2)^2
@ -47,7 +45,7 @@ void CBloomFilter::insert(const vector<unsigned char>& vKey)
{ {
unsigned int nIndex = Hash(i, vKey); unsigned int nIndex = Hash(i, vKey);
// Sets bit nIndex of vData // Sets bit nIndex of vData
vData[nIndex >> 3] |= bit_mask[7 & nIndex]; vData[nIndex >> 3] |= (1 << (7 & nIndex));
} }
isEmpty = false; isEmpty = false;
} }
@ -76,7 +74,7 @@ bool CBloomFilter::contains(const vector<unsigned char>& vKey) const
{ {
unsigned int nIndex = Hash(i, vKey); unsigned int nIndex = Hash(i, vKey);
// Checks bit nIndex of vData // Checks bit nIndex of vData
if (!(vData[nIndex >> 3] & bit_mask[7 & nIndex])) if (!(vData[nIndex >> 3] & (1 << (7 & nIndex))))
return false; return false;
} }
return true; return true;