17 #include <boost/foreach.hpp> 19 #define LN2SQUARED 0.4804530139182014246671025263266649717305529515945455 20 #define LN2 0.6931471805599453094172321214581765680755001343602552 38 nHashFuncs(min((unsigned int)(vData.size() * 8 / nElements *
LN2),
MAX_HASH_FUNCS)),
46 vData((unsigned int)(-1 /
LN2SQUARED * nElements *
log(nFPRate)) / 8),
49 nHashFuncs((unsigned int)(vData.size() * 8 / nElements *
LN2)),
55 inline unsigned int CBloomFilter::Hash(
unsigned int nHashNum,
const std::vector<unsigned char>& vDataToHash)
const 67 unsigned int nIndex =
Hash(i, vKey);
69 vData[nIndex >> 3] |= (1 << (7 & nIndex));
78 vector<unsigned char>
data(stream.
begin(), stream.
end());
96 unsigned int nIndex =
Hash(i, vKey);
98 if (!(
vData[nIndex >> 3] & (1 << (7 & nIndex))))
108 vector<unsigned char>
data(stream.
begin(), stream.
end());
149 for (
unsigned int i = 0; i < tx.
vout.size(); i++)
157 vector<unsigned char>
data;
171 vector<vector<unsigned char> > vSolutions;
184 BOOST_FOREACH(
const CTxIn& txin, tx.
vin)
192 vector<unsigned char>
data;
210 for (
unsigned int i = 0; i <
vData.size(); i++)
212 full &=
vData[i] == 0xff;
213 empty &=
vData[i] == 0;
220 b1(nElements * 2, fpRate, 0), b2(nElements * 2, fpRate, 0)
268 unsigned int nNewTweak =
GetRand(std::numeric_limits<unsigned int>::max());
bool IsWithinSizeConstraints() const
const_iterator end() const
static const unsigned int MAX_BLOOM_FILTER_SIZE
20,000 items with fp rate < 0.1% or 10,000 items and <0.0001%
void insert(const uint256 &hash)
bool contains(const std::vector< unsigned char > &vKey) const
void insert(const std::vector< unsigned char > &vKey)
bool GetOp(iterator &pc, opcodetype &opcodeRet, std::vector< unsigned char > &vchRet)
unsigned int MurmurHash3(unsigned int nHashSeed, const std::vector< unsigned char > &vDataToHash)
void UpdateEmptyFull()
Checks for empty and full filters to avoid wasting cpu.
const_iterator begin() const
unsigned int Hash(unsigned int nHashNum, const std::vector< unsigned char > &vDataToHash) const
static const unsigned int MAX_HASH_FUNCS
const std::vector< CTxIn > vin
static const int PROTOCOL_VERSION
const uint256 & GetHash() const
bool IsRelevantAndUpdate(const CTransaction &tx)
Also adds any outputs which match the filter to the filter (to match their spending txes) ...
void reset(unsigned int nNewTweak)
const std::vector< CTxOut > vout
bool Solver(const CScript &scriptPubKey, txnouttype &typeRet, vector< vector< unsigned char > > &vSolutionsRet)
std::vector< unsigned char > vData
uint64_t GetRand(uint64_t nMax)