3#include <xrpl/basics/CountedObject.h>
4#include <xrpl/basics/base_uint.h>
5#include <xrpl/protocol/Asset.h>
7#include <boost/utility/base_from_member.hpp>
39template <
class Hasher>
54[[nodiscard]]
constexpr bool
66 if (
auto const c{lhs.
in <=> rhs.
in}; c != 0)
68 if (
auto const c{lhs.
out <=> rhs.
out}; c != 0)
75 return std::weak_ordering::less;
77 return std::weak_ordering::greater;
79 return std::weak_ordering::equivalent;
90struct hash<
xrpl::Issue> :
private boost::base_from_member<std::hash<xrpl::Currency>, 0>,
91 private boost::base_from_member<std::hash<xrpl::AccountID>, 1>
106 value_type result(currency_hash_type::member(value.currency));
107 if (!isXRP(value.currency))
108 boost::hash_combine(result, issuer_hash_type::member(value.account));
114struct hash<
xrpl::MPTIssue> :
private boost::base_from_member<std::hash<xrpl::MPTID>, 0>
117 using id_hash_type = boost::base_from_member<std::hash<xrpl::MPTID>, 0>;
128 value_type const result(id_hash_type::member(value.getMptID()));
constexpr auto visit(Visitors &&... visitors) const -> decltype(auto)
Book(Asset const &in, Asset const &out, std::optional< uint256 > const &domain)
std::optional< uint256 > domain
A currency issued by an account.
std::enable_if_t< IsContiguouslyHashable< T, Hasher >::value > hash_append(Hasher &h, T const &t) noexcept
Logically concatenate input data to a Hasher.
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
constexpr bool operator==(BaseUInt< Bits, Tag > const &lhs, BaseUInt< Bits, Tag > const &rhs)
std::ostream & operator<<(std::ostream &out, BaseUInt< Bits, Tag > const &u)
std::string to_string(BaseUInt< Bits, Tag > const &a)
constexpr std::strong_ordering operator<=>(BaseUInt< Bits, Tag > const &lhs, BaseUInt< Bits, Tag > const &rhs)
Book reversed(Book const &book)
void hash_append(Hasher &h, Slice const &v)
bool isConsistent(Asset const &asset)
std::hash< xrpl::Asset > Base
std::hash< xrpl::Book > Base
std::hash< xrpl::Issue > Base
std::hash< xrpl::MPTIssue > Base
value_type operator()(argument_type const &asset) const
std::hash< xrpl::Issue > issue_hasher
mptissue_hasher mMptissueHasher_
xrpl::Asset argument_type
std::hash< xrpl::MPTIssue > mptissue_hasher
issue_hasher mIssueHasher_
std::hash< xrpl::Asset > asset_hasher
xrpl::uint256::hasher uint256_hasher
value_type operator()(argument_type const &value) const
uint256_hasher uint256Hasher_
asset_hasher issueHasher_
xrpl::Issue argument_type
value_type operator()(argument_type const &value) const
boost::base_from_member< std::hash< xrpl::Currency >, 0 > currency_hash_type
boost::base_from_member< std::hash< xrpl::AccountID >, 1 > issuer_hash_type
xrpl::MPTIssue argument_type
value_type operator()(argument_type const &value) const
boost::base_from_member< std::hash< xrpl::MPTID >, 0 > id_hash_type