Bitcoin ABC 0.26.3
P2P Digital Currency
|
This implements a Golomb-coded set as defined in BIP 158. More...
#include <blockfilter.h>
Classes | |
struct | Params |
Public Types | |
typedef std::vector< uint8_t > | Element |
typedef std::unordered_set< Element, ByteVectorHash > | ElementSet |
Public Member Functions | |
GCSFilter (const Params ¶ms=Params()) | |
Constructs an empty filter. | |
GCSFilter (const Params ¶ms, std::vector< uint8_t > encoded_filter) | |
Reconstructs an already-created filter from an encoding. | |
GCSFilter (const Params ¶ms, const ElementSet &elements) | |
Builds a new filter from the params and set of elements. | |
uint32_t | GetN () const |
const Params & | GetParams () const |
const std::vector< uint8_t > & | GetEncoded () const |
bool | Match (const Element &element) const |
Checks if the element may be in the set. | |
bool | MatchAny (const ElementSet &elements) const |
Checks if any of the given elements may be in the set. | |
Private Member Functions | |
uint64_t | HashToRange (const Element &element) const |
Hash a data element to an integer in the range [0, N * M). | |
std::vector< uint64_t > | BuildHashedSet (const ElementSet &elements) const |
bool | MatchInternal (const uint64_t *sorted_element_hashes, size_t size) const |
Helper method used to implement Match and MatchAny. | |
Private Attributes | |
Params | m_params |
uint32_t | m_N |
Number of elements in the filter. | |
uint64_t | m_F |
Range of element hashes, F = N * M. | |
std::vector< uint8_t > | m_encoded |
This implements a Golomb-coded set as defined in BIP 158.
It is a compact, probabilistic data structure for testing set membership.
Definition at line 25 of file blockfilter.h.
typedef std::vector<uint8_t> GCSFilter::Element |
Definition at line 27 of file blockfilter.h.
typedef std::unordered_set<Element, ByteVectorHash> GCSFilter::ElementSet |
Definition at line 28 of file blockfilter.h.
Constructs an empty filter.
Definition at line 46 of file blockfilter.cpp.
Reconstructs an already-created filter from an encoding.
Definition at line 49 of file blockfilter.cpp.
GCSFilter::GCSFilter | ( | const Params & | params, |
const ElementSet & | elements | ||
) |
Builds a new filter from the params and set of elements.
Definition at line 72 of file blockfilter.cpp.
|
private |
Definition at line 36 of file blockfilter.cpp.
|
inline |
|
inline |
Definition at line 67 of file blockfilter.h.
|
inline |
Definition at line 68 of file blockfilter.h.
Hash a data element to an integer in the range [0, N * M).
Definition at line 28 of file blockfilter.cpp.
Checks if the element may be in the set.
False positives are possible with probability 1/M.
Definition at line 133 of file blockfilter.cpp.
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.
Definition at line 138 of file blockfilter.cpp.
Helper method used to implement Match and MatchAny.
Definition at line 101 of file blockfilter.cpp.
|
private |
Definition at line 46 of file blockfilter.h.
|
private |
Range of element hashes, F = N * M.
Definition at line 45 of file blockfilter.h.
|
private |
Number of elements in the filter.
Definition at line 44 of file blockfilter.h.
|
private |
Definition at line 43 of file blockfilter.h.