20#ifndef RIPPLE_PROTOCOL_ASSET_H_INCLUDED
21#define RIPPLE_PROTOCOL_ASSET_H_INCLUDED
23#include <xrpl/basics/Number.h>
24#include <xrpl/basics/base_uint.h>
25#include <xrpl/protocol/Issue.h>
26#include <xrpl/protocol/MPTIssue.h>
33template <
typename TIss>
35 std::is_same_v<TIss, Issue> || std::is_same_v<TIss, MPTIssue>;
39 std::is_convertible_v<A, Asset> || std::is_convertible_v<A, Issue> ||
40 std::is_convertible_v<A, MPTIssue> || std::is_convertible_v<A, MPTID>;
76 template <Val
idIssueType TIss>
80 template <Val
idIssueType TIss>
84 template <Val
idIssueType TIss>
103 return holds<Issue>() && get<Issue>().native();
106 friend constexpr bool
112 friend constexpr bool
118 friend constexpr bool
130template <Val
idIssueType TIss>
134 return std::holds_alternative<TIss>(
issue_);
137template <Val
idIssueType TIss>
141 if (!std::holds_alternative<TIss>(
issue_))
142 Throw<std::logic_error>(
"Asset is not a requested issue");
143 return std::get<TIss>(
issue_);
146template <Val
idIssueType TIss>
150 if (!std::holds_alternative<TIss>(
issue_))
151 Throw<std::logic_error>(
"Asset is not a requested issue");
152 return std::get<TIss>(
issue_);
165 [&]<
typename TLhs,
typename TRhs>(
166 TLhs
const& issLhs, TRhs
const& issRhs) {
167 if constexpr (std::is_same_v<TLhs, TRhs>)
168 return issLhs == issRhs;
181 TLhs
const& lhs_, TRhs
const& rhs_) {
182 if constexpr (std::is_same_v<TLhs, TRhs>)
185 std::is_same_v<TLhs, Issue> && std::is_same_v<TRhs, MPTIssue>)
186 return std::weak_ordering::greater;
188 return std::weak_ordering::less;
204 [&]<
typename TLhs,
typename TRhs>(
205 TLhs
const& issLhs, TRhs
const& issRhs) {
207 std::is_same_v<TLhs, Issue> && std::is_same_v<TRhs, Issue>)
208 return issLhs.currency == issRhs.currency;
210 std::is_same_v<TLhs, MPTIssue> &&
211 std::is_same_v<TRhs, MPTIssue>)
212 return issLhs.getMptID() == issRhs.getMptID();
STAmount operator()(Number const &) const
Asset(MPTIssue const &mptIssue)
Asset(Issue const &issue)
Conversions to Asset are implicit and conversions to specific issue type are explicit.
void setJson(Json::Value &jv) const
Asset(MPTID const &issuanceID)
constexpr value_type const & value() const
friend constexpr std::weak_ordering operator<=>(Asset const &lhs, Asset const &rhs)
friend constexpr bool equalTokens(Asset const &lhs, Asset const &rhs)
Return true if both assets refer to the same currency (regardless of issuer) or MPT issuance.
constexpr TIss const & get() const
AccountID const & getIssuer() const
constexpr bool holds() const
std::string getText() const
friend constexpr bool operator==(Asset const &lhs, Asset const &rhs)
A currency issued by an account.
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
constexpr bool equalTokens(Asset const &lhs, Asset const &rhs)
bool isXRP(AccountID const &c)
constexpr std::strong_ordering operator<=>(base_uint< Bits, Tag > const &lhs, base_uint< Bits, Tag > const &rhs)
Asset assetFromJson(Json::Value const &jv)
Json::Value to_json(Asset const &asset)
bool validJSONAsset(Json::Value const &jv)
std::string to_string(base_uint< Bits, Tag > const &a)
constexpr bool operator==(base_uint< Bits, Tag > const &lhs, base_uint< Bits, Tag > const &rhs)