3#include <xrpl/basics/base_uint.h>
4#include <xrpl/beast/utility/instrumentation.h>
6#include <boost/container/flat_map.hpp>
84 constexpr char const* kN = fn();
88 for (
auto ptr = n; *ptr !=
'\0'; ret++, ++ptr)
99 constexpr char const* kN = fn();
104 for (
auto ptr = kN; *ptr !=
'\0'; ++ptr)
106 if (*ptr & 0x80 || *ptr < 0x20)
123#pragma push_macro("XRPL_FEATURE")
125#pragma push_macro("XRPL_FIX")
127#pragma push_macro("XRPL_RETIRE_FEATURE")
128#undef XRPL_RETIRE_FEATURE
129#pragma push_macro("XRPL_RETIRE_FIX")
130#undef XRPL_RETIRE_FIX
133#define XRPL_FEATURE(name, supported, vote) +1
134#define XRPL_FIX(name, supported, vote) +1
135#define XRPL_RETIRE_FEATURE(name) +1
136#define XRPL_RETIRE_FIX(name) +1
145#include <xrpl/protocol/detail/features.macro>
148#undef XRPL_RETIRE_FEATURE
149#pragma pop_macro("XRPL_RETIRE_FEATURE")
150#undef XRPL_RETIRE_FIX
151#pragma pop_macro("XRPL_RETIRE_FIX")
153#pragma pop_macro("XRPL_FIX")
155#pragma pop_macro("XRPL_FEATURE")
199 template <
class... Fs>
204 if constexpr (
sizeof...(fs) > 0)
210 using base::operator==;
221 using base::operator[];
230 XRPL_ASSERT(b.
count() ==
count(),
"xrpl::FeatureBitset::FeatureBitset(base) : count match");
233 template <
class... Fs>
238 count() == (
sizeof...(fs) + 1),
239 "xrpl::FeatureBitset::FeatureBitset(uint256) : count and "
240 "sizeof... do match");
246 for (
auto const& f : fs)
249 fs.size() ==
count(),
250 "xrpl::FeatureBitset::FeatureBitset(Container auto) : count and "
385 for (
size_t i = 0; i < bs.
size(); ++i)
392#pragma push_macro("XRPL_FEATURE")
394#pragma push_macro("XRPL_FIX")
396#pragma push_macro("XRPL_RETIRE_FEATURE")
397#undef XRPL_RETIRE_FEATURE
398#pragma push_macro("XRPL_RETIRE_FIX")
399#undef XRPL_RETIRE_FIX
401#define XRPL_FEATURE(name, supported, vote) extern uint256 const feature##name;
402#define XRPL_FIX(name, supported, vote) extern uint256 const fix##name;
403#define XRPL_RETIRE_FEATURE(name)
404#define XRPL_RETIRE_FIX(name)
406#include <xrpl/protocol/detail/features.macro>
408#undef XRPL_RETIRE_FEATURE
409#pragma pop_macro("XRPL_RETIRE_FEATURE")
410#undef XRPL_RETIRE_FIX
411#pragma pop_macro("XRPL_RETIRE_FIX")
413#pragma pop_macro("XRPL_FIX")
415#pragma pop_macro("XRPL_FEATURE")
friend FeatureBitset operator|(FeatureBitset const &lhs, FeatureBitset const &rhs)
friend FeatureBitset operator&(FeatureBitset const &lhs, uint256 const &rhs)
friend FeatureBitset operator-(FeatureBitset const &lhs, uint256 const &rhs)
FeatureBitset(base const &b)
friend FeatureBitset operator|(uint256 const &lhs, FeatureBitset const &rhs)
FeatureBitset(Col const &fs)
friend FeatureBitset operator^(FeatureBitset const &lhs, uint256 const &rhs)
std::bitset< detail::kNumFeatures > base
FeatureBitset & operator&=(FeatureBitset const &rhs)
FeatureBitset operator~() const
FeatureBitset(uint256 const &f, Fs &&... fs)
FeatureBitset & flip(uint256 const &f)
friend FeatureBitset operator|(FeatureBitset const &lhs, uint256 const &rhs)
friend FeatureBitset operator&(uint256 const &lhs, FeatureBitset const &rhs)
friend FeatureBitset operator^(FeatureBitset const &lhs, FeatureBitset const &rhs)
FeatureBitset & reset(uint256 const &f)
friend FeatureBitset operator^(uint256 const &lhs, FeatureBitset const &rhs)
auto operator[](uint256 const &f) const
void initFromFeatures(uint256 const &f, Fs &&... fs)
friend FeatureBitset operator&(FeatureBitset const &lhs, FeatureBitset const &rhs)
FeatureBitset & set(uint256 const &f, bool value=true)
friend FeatureBitset operator-(uint256 const &lhs, FeatureBitset const &rhs)
FeatureBitset & operator|=(FeatureBitset const &rhs)
friend FeatureBitset operator-(FeatureBitset const &lhs, FeatureBitset const &rhs)
auto operator[](uint256 const &f)
std::size_t numDownVotedAmendments()
Amendments that this server won't vote for by default.
std::map< std::string, VoteBehavior > const & supportedAmendments()
Amendments that this server supports and the default voting behavior.
static constexpr std::size_t kNumFeatures
std::size_t numUpVotedAmendments()
Amendments that this server will vote for by default.
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
consteval auto validFeatureNameSize(auto fn) -> bool
size_t featureToBitsetIndex(uint256 const &f)
static constexpr std::size_t kReservedFeatureNameSize
void foreachFeature(FeatureBitset bs, F &&f)
static constexpr std::size_t kMaxFeatureNameSize
std::map< std::string, AmendmentSupport > const & allAmendments()
All amendments libxrpl knows about.
std::string featureToName(uint256 const &f)
uint256 bitsetIndexToFeature(size_t i)
consteval auto validFeatureName(auto fn) -> bool
std::optional< uint256 > getRegisteredFeature(std::string const &name)