Changeset View
Changeset View
Standalone View
Standalone View
src/bloom.cpp
Show First 20 Lines • Show All 258 Lines • ▼ Show 20 Lines | |||||
void CRollingBloomFilter::insert(const std::vector<uint8_t> &vKey) { | void CRollingBloomFilter::insert(const std::vector<uint8_t> &vKey) { | ||||
if (nEntriesThisGeneration == nEntriesPerGeneration) { | if (nEntriesThisGeneration == nEntriesPerGeneration) { | ||||
nEntriesThisGeneration = 0; | nEntriesThisGeneration = 0; | ||||
nGeneration++; | nGeneration++; | ||||
if (nGeneration == 4) { | if (nGeneration == 4) { | ||||
nGeneration = 1; | nGeneration = 1; | ||||
} | } | ||||
uint64_t nGenerationMask1 = -uint64_t(nGeneration & 1); | uint64_t nGenerationMask1 = 0 - uint64_t(nGeneration & 1); | ||||
uint64_t nGenerationMask2 = -uint64_t(nGeneration >> 1); | uint64_t nGenerationMask2 = 0 - uint64_t(nGeneration >> 1); | ||||
/* Wipe old entries that used this generation number. */ | /* Wipe old entries that used this generation number. */ | ||||
for (uint32_t p = 0; p < data.size(); p += 2) { | for (uint32_t p = 0; p < data.size(); p += 2) { | ||||
uint64_t p1 = data[p], p2 = data[p + 1]; | uint64_t p1 = data[p], p2 = data[p + 1]; | ||||
uint64_t mask = (p1 ^ nGenerationMask1) | (p2 ^ nGenerationMask2); | uint64_t mask = (p1 ^ nGenerationMask1) | (p2 ^ nGenerationMask2); | ||||
data[p] = p1 & mask; | data[p] = p1 & mask; | ||||
data[p + 1] = p2 & mask; | data[p + 1] = p2 & mask; | ||||
} | } | ||||
} | } | ||||
▲ Show 20 Lines • Show All 47 Lines • Show Last 20 Lines |