20#include <xrpl/beast/utility/instrumentation.h> 
   21#include <xrpl/protocol/Feature.h> 
   22#include <xrpl/protocol/Permissions.h> 
   23#include <xrpl/protocol/jss.h> 
   30#pragma push_macro("TRANSACTION") 
   33#define TRANSACTION(tag, value, name, delegatable, amendment, ...) \ 
   36#include <xrpl/protocol/detail/transactions.macro> 
   39#pragma pop_macro("TRANSACTION") 
   43#pragma push_macro("TRANSACTION") 
   46#define TRANSACTION(tag, value, name, delegatable, ...) {value, delegatable}, 
   48#include <xrpl/protocol/detail/transactions.macro> 
   51#pragma pop_macro("TRANSACTION") 
   55#pragma push_macro("PERMISSION") 
   58#define PERMISSION(type, txType, value) {#type, type}, 
   60#include <xrpl/protocol/detail/permissions.macro> 
   63#pragma pop_macro("PERMISSION") 
   67#pragma push_macro("PERMISSION") 
   70#define PERMISSION(type, txType, value) {type, #type}, 
   72#include <xrpl/protocol/detail/permissions.macro> 
   75#pragma pop_macro("PERMISSION") 
   79#pragma push_macro("PERMISSION") 
   82#define PERMISSION(type, txType, value) {type, txType}, 
   84#include <xrpl/protocol/detail/permissions.macro> 
   87#pragma pop_macro("PERMISSION") 
   92            permission.second > UINT16_MAX,
 
   93            "ripple::Permission::granularPermissionMap_ : granular permission " 
   94            "value must not exceed the maximum uint16_t value.");
 
 
  115        return item->getName();
 
 
  125        return static_cast<uint32_t
>(it->second);
 
 
  156        "ripple::Permissions::getTxFeature : tx exists in txFeatureMap_");
 
  158    if (txFeaturesIt->second == 
uint256{})
 
  160    return txFeaturesIt->second;
 
 
  166    Rules const& rules)
 const 
  168    auto const granularPermission =
 
  170    if (granularPermission)
 
  183        "ripple::Permissions::isDelegatable : tx exists in txFeatureMap_");
 
  188    if (txFeaturesIt->second != 
uint256{} &&
 
  189        !rules.
enabled(txFeaturesIt->second))
 
 
  201    return static_cast<uint32_t
>(type) + 1;
 
 
  207    return static_cast<TxType>(value - 1);
 
 
std::unordered_map< std::uint16_t, Delegation > delegatableTx_
 
std::optional< std::reference_wrapper< uint256 const > > const getTxFeature(TxType txType) const
 
TxType permissionToTxType(uint32_t const &value) const
 
std::optional< std::string > getGranularName(GranularPermissionType const &value) const
 
std::unordered_map< std::uint16_t, uint256 > txFeatureMap_
 
std::optional< std::string > getPermissionName(std::uint32_t const value) const
 
std::unordered_map< GranularPermissionType, std::string > granularNameMap_
 
std::unordered_map< std::string, GranularPermissionType > granularPermissionMap_
 
std::optional< std::uint32_t > getGranularValue(std::string const &name) const
 
std::optional< TxType > getGranularTxType(GranularPermissionType const &gpType) const
 
uint32_t txToPermissionType(TxType const &type) const
 
static Permission const & getInstance()
 
std::unordered_map< GranularPermissionType, TxType > granularTxTypeMap_
 
bool isDelegatable(std::uint32_t const &permissionValue, Rules const &rules) const
 
Rules controlling protocol behavior.
 
bool enabled(uint256 const &feature) const
Returns true if a feature is enabled.
 
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
 
TxType
Transaction type identifiers.
 
GranularPermissionType
We have both transaction type permissions and granular type permissions.