@@ -37,13 +37,13 @@ CBloomFilter::CBloomFilter(const unsigned int nElements, const double nFPRate, c
37
37
{
38
38
}
39
39
40
- inline unsigned int CBloomFilter::Hash (unsigned int nHashNum, const std::vector< unsigned char >& vDataToHash) const
40
+ inline unsigned int CBloomFilter::Hash (unsigned int nHashNum, Span< const unsigned char > vDataToHash) const
41
41
{
42
42
// 0xFBA4C795 chosen as it guarantees a reasonable bit difference between nHashNum values.
43
43
return MurmurHash3 (nHashNum * 0xFBA4C795 + nTweak, vDataToHash) % (vData.size () * 8 );
44
44
}
45
45
46
- void CBloomFilter::insert (const std::vector< unsigned char >& vKey)
46
+ void CBloomFilter::insert (Span< const unsigned char > vKey)
47
47
{
48
48
if (vData.empty ()) // Avoid divide-by-zero (CVE-2013-5700)
49
49
return ;
@@ -59,17 +59,10 @@ void CBloomFilter::insert(const COutPoint& outpoint)
59
59
{
60
60
CDataStream stream (SER_NETWORK, PROTOCOL_VERSION);
61
61
stream << outpoint;
62
- std::vector<unsigned char > data (stream.begin (), stream.end ());
63
- insert (data);
62
+ insert (stream);
64
63
}
65
64
66
- void CBloomFilter::insert (const uint256& hash)
67
- {
68
- std::vector<unsigned char > data (hash.begin (), hash.end ());
69
- insert (data);
70
- }
71
-
72
- bool CBloomFilter::contains (const std::vector<unsigned char >& vKey) const
65
+ bool CBloomFilter::contains (Span<const unsigned char > vKey) const
73
66
{
74
67
if (vData.empty ()) // Avoid divide-by-zero (CVE-2013-5700)
75
68
return true ;
@@ -87,14 +80,7 @@ bool CBloomFilter::contains(const COutPoint& outpoint) const
87
80
{
88
81
CDataStream stream (SER_NETWORK, PROTOCOL_VERSION);
89
82
stream << outpoint;
90
- std::vector<unsigned char > data (stream.begin (), stream.end ());
91
- return contains (data);
92
- }
93
-
94
- bool CBloomFilter::contains (const uint256& hash) const
95
- {
96
- std::vector<unsigned char > data (hash.begin (), hash.end ());
97
- return contains (data);
83
+ return contains (MakeUCharSpan (stream));
98
84
}
99
85
100
86
bool CBloomFilter::IsWithinSizeConstraints () const
@@ -198,7 +184,8 @@ CRollingBloomFilter::CRollingBloomFilter(const unsigned int nElements, const dou
198
184
}
199
185
200
186
/* Similar to CBloomFilter::Hash */
201
- static inline uint32_t RollingBloomHash (unsigned int nHashNum, uint32_t nTweak, const std::vector<unsigned char >& vDataToHash) {
187
+ static inline uint32_t RollingBloomHash (unsigned int nHashNum, uint32_t nTweak, Span<const unsigned char > vDataToHash)
188
+ {
202
189
return MurmurHash3 (nHashNum * 0xFBA4C795 + nTweak, vDataToHash);
203
190
}
204
191
@@ -210,7 +197,7 @@ static inline uint32_t FastMod(uint32_t x, size_t n) {
210
197
return ((uint64_t )x * (uint64_t )n) >> 32 ;
211
198
}
212
199
213
- void CRollingBloomFilter::insert (const std::vector< unsigned char >& vKey)
200
+ void CRollingBloomFilter::insert (Span< const unsigned char > vKey)
214
201
{
215
202
if (nEntriesThisGeneration == nEntriesPerGeneration) {
216
203
nEntriesThisGeneration = 0 ;
@@ -241,13 +228,7 @@ void CRollingBloomFilter::insert(const std::vector<unsigned char>& vKey)
241
228
}
242
229
}
243
230
244
- void CRollingBloomFilter::insert (const uint256& hash)
245
- {
246
- std::vector<unsigned char > vData (hash.begin (), hash.end ());
247
- insert (vData);
248
- }
249
-
250
- bool CRollingBloomFilter::contains (const std::vector<unsigned char >& vKey) const
231
+ bool CRollingBloomFilter::contains (Span<const unsigned char > vKey) const
251
232
{
252
233
for (int n = 0 ; n < nHashFuncs; n++) {
253
234
uint32_t h = RollingBloomHash (n, nTweak, vKey);
@@ -261,12 +242,6 @@ bool CRollingBloomFilter::contains(const std::vector<unsigned char>& vKey) const
261
242
return true ;
262
243
}
263
244
264
- bool CRollingBloomFilter::contains (const uint256& hash) const
265
- {
266
- std::vector<unsigned char > vData (hash.begin (), hash.end ());
267
- return contains (vData);
268
- }
269
-
270
245
void CRollingBloomFilter::reset ()
271
246
{
272
247
nTweak = GetRand (std::numeric_limits<unsigned int >::max ());
0 commit comments