mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-01-26 19:23:26 -03:00
blockfilter: Functions to translate filter types to/from names.
This commit is contained in:
parent
62b7a4f094
commit
ba6ff9a6f7
3 changed files with 40 additions and 0 deletions
|
@ -15,6 +15,10 @@ static constexpr int GCS_SER_TYPE = SER_NETWORK;
|
||||||
/// Protocol version used to serialize parameters in GCS filter encoding.
|
/// Protocol version used to serialize parameters in GCS filter encoding.
|
||||||
static constexpr int GCS_SER_VERSION = 0;
|
static constexpr int GCS_SER_VERSION = 0;
|
||||||
|
|
||||||
|
static const std::map<BlockFilterType, std::string> g_filter_types = {
|
||||||
|
{BlockFilterType::BASIC, "basic"},
|
||||||
|
};
|
||||||
|
|
||||||
template <typename OStream>
|
template <typename OStream>
|
||||||
static void GolombRiceEncode(BitStreamWriter<OStream>& bitwriter, uint8_t P, uint64_t x)
|
static void GolombRiceEncode(BitStreamWriter<OStream>& bitwriter, uint8_t P, uint64_t x)
|
||||||
{
|
{
|
||||||
|
@ -197,6 +201,23 @@ bool GCSFilter::MatchAny(const ElementSet& elements) const
|
||||||
return MatchInternal(queries.data(), queries.size());
|
return MatchInternal(queries.data(), queries.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const std::string& BlockFilterTypeName(BlockFilterType filter_type)
|
||||||
|
{
|
||||||
|
static std::string unknown_retval = "";
|
||||||
|
auto it = g_filter_types.find(filter_type);
|
||||||
|
return it != g_filter_types.end() ? it->second : unknown_retval;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool BlockFilterTypeByName(const std::string& name, BlockFilterType& filter_type) {
|
||||||
|
for (const auto& entry : g_filter_types) {
|
||||||
|
if (entry.second == name) {
|
||||||
|
filter_type = entry.first;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
static GCSFilter::ElementSet BasicFilterElements(const CBlock& block,
|
static GCSFilter::ElementSet BasicFilterElements(const CBlock& block,
|
||||||
const CBlockUndo& block_undo)
|
const CBlockUndo& block_undo)
|
||||||
{
|
{
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
#define BITCOIN_BLOCKFILTER_H
|
#define BITCOIN_BLOCKFILTER_H
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
#include <string>
|
||||||
#include <unordered_set>
|
#include <unordered_set>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
|
@ -89,6 +90,12 @@ enum class BlockFilterType : uint8_t
|
||||||
INVALID = 255,
|
INVALID = 255,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/** Get the human-readable name for a filter type. Returns empty string for unknown types. */
|
||||||
|
const std::string& BlockFilterTypeName(BlockFilterType filter_type);
|
||||||
|
|
||||||
|
/** Find a filter type by its human-readable name. */
|
||||||
|
bool BlockFilterTypeByName(const std::string& name, BlockFilterType& filter_type);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Complete block filter struct as defined in BIP 157. Serialization matches
|
* Complete block filter struct as defined in BIP 157. Serialization matches
|
||||||
* payload of "cfilter" messages.
|
* payload of "cfilter" messages.
|
||||||
|
|
|
@ -174,4 +174,16 @@ BOOST_AUTO_TEST_CASE(blockfilters_json_test)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE(blockfilter_type_names)
|
||||||
|
{
|
||||||
|
BOOST_CHECK_EQUAL(BlockFilterTypeName(BlockFilterType::BASIC), "basic");
|
||||||
|
BOOST_CHECK_EQUAL(BlockFilterTypeName(static_cast<BlockFilterType>(255)), "");
|
||||||
|
|
||||||
|
BlockFilterType filter_type;
|
||||||
|
BOOST_CHECK(BlockFilterTypeByName("basic", filter_type));
|
||||||
|
BOOST_CHECK_EQUAL(filter_type, BlockFilterType::BASIC);
|
||||||
|
|
||||||
|
BOOST_CHECK(!BlockFilterTypeByName("unknown", filter_type));
|
||||||
|
}
|
||||||
|
|
||||||
BOOST_AUTO_TEST_SUITE_END()
|
BOOST_AUTO_TEST_SUITE_END()
|
||||||
|
|
Loading…
Add table
Reference in a new issue