Bitcoin
|
#include <blockfilter.h>
Classes | |
struct | Params |
Public Types | |
typedef std::vector< unsigned char > | Element |
typedef std::unordered_set< Element, ByteVectorHash > | ElementSet |
Public Member Functions | |
GCSFilter (const Params ¶ms=Params()) | |
GCSFilter (const Params ¶ms, std::vector< unsigned char > encoded_filter) | |
GCSFilter (const Params ¶ms, const ElementSet &elements) | |
uint32_t | GetN () const |
const Params & | GetParams () const |
const std::vector< unsigned char > & | GetEncoded () const |
bool | Match (const Element &element) const |
bool | MatchAny (const ElementSet &elements) const |
Private Member Functions | |
uint64_t | HashToRange (const Element &element) const |
std::vector< uint64_t > | BuildHashedSet (const ElementSet &elements) const |
bool | MatchInternal (const uint64_t *sorted_element_hashes, size_t size) const |
Private Attributes | |
Params | m_params |
uint32_t | m_N |
Number of elements in the filter. More... | |
uint64_t | m_F |
Range of element hashes, F = N * M. More... | |
std::vector< unsigned char > | m_encoded |
This implements a Golomb-coded set as defined in BIP 158. It is a compact, probabilistic data structure for testing set membership.
typedef std::vector<unsigned char> GCSFilter::Element |
typedef std::unordered_set<Element, ByteVectorHash> GCSFilter::ElementSet |
GCSFilter::GCSFilter | ( | const Params & | params, |
std::vector< unsigned char > | encoded_filter | ||
) |
Reconstructs an already-created filter from an encoding.
GCSFilter::GCSFilter | ( | const Params & | params, |
const ElementSet & | elements | ||
) |
Builds a new filter from the params and set of elements.
|
private |
|
inline |
|
inline |
|
inline |
Hash a data element to an integer in the range [0, N * M).
bool GCSFilter::Match | ( | const Element & | element | ) | const |
Checks if the element may be in the set. False positives are possible with probability 1/M.
bool GCSFilter::MatchAny | ( | const ElementSet & | elements | ) | const |
Checks if any of the given elements may be in the set. False positives are possible with probability 1/M per element checked. This is more efficient that checking Match on multiple elements separately.
|
private |
Helper method used to implement Match and MatchAny
|
private |
|
private |
Range of element hashes, F = N * M.
|
private |
Number of elements in the filter.
|
private |