xrpld
Loading...
Searching...
No Matches
Issue.h
1#pragma once
2
3#include <xrpl/beast/utility/instrumentation.h>
4#include <xrpl/json/json_value.h>
5#include <xrpl/protocol/UintTypes.h>
6
7namespace xrpl {
8
12class Issue
13{
14public:
17
18 Issue() = default;
19
20 Issue(Currency const& c, AccountID const& a) : currency(c), account(a)
21 {
22 }
23
24 [[nodiscard]] AccountID const&
25 getIssuer() const
26 {
27 return account;
28 }
29
30 [[nodiscard]] std::string
31 getText() const;
32
33 void
34 setJson(json::Value& jv) const;
35
36 [[nodiscard]] bool
37 native() const;
38
39 [[nodiscard]] bool
40 integral() const;
41
42 friend constexpr std::weak_ordering
43 operator<=>(Issue const& lhs, Issue const& rhs);
44};
45
46bool
47isConsistent(Issue const& ac);
48
50to_string(Issue const& ac);
51
53toJson(Issue const& is);
54
55Issue
57
59operator<<(std::ostream& os, Issue const& x);
60
61template <class Hasher>
62void
63hash_append(Hasher& h, Issue const& r)
64{
67}
68
71[[nodiscard]] constexpr bool
72operator==(Issue const& lhs, Issue const& rhs)
73{
74 return (lhs.currency == rhs.currency) && (isXRP(lhs.currency) || lhs.account == rhs.account);
75}
76
77
80[[nodiscard]] constexpr std::weak_ordering
81operator<=>(Issue const& lhs, Issue const& rhs)
82{
83 if (auto const c{lhs.currency <=> rhs.currency}; c != 0)
84 return c;
85
86 if (isXRP(lhs.currency))
87 return std::weak_ordering::equivalent;
88
89 return (lhs.account <=> rhs.account);
90}
91
92
93//------------------------------------------------------------------------------
94
96inline Issue const&
98{
99 static Issue const kIssue{xrpCurrency(), xrpAccount()};
100 return kIssue;
101}
102
104inline Issue const&
106{
107 static Issue const kIssue{noCurrency(), noAccount()};
108 return kIssue;
109}
110
111inline bool
112isXRP(Issue const& issue)
113{
114 return issue.native();
115}
116
117} // namespace xrpl
Represents a JSON value.
Definition json_value.h:130
A currency issued by an account.
Definition Issue.h:13
Currency currency
Definition Issue.h:15
AccountID account
Definition Issue.h:16
void setJson(json::Value &jv) const
Definition Issue.cpp:46
bool native() const
Definition Issue.cpp:54
friend constexpr std::weak_ordering operator<=>(Issue const &lhs, Issue const &rhs)
Strict weak ordering.
Definition Issue.h:81
Issue(Currency const &c, AccountID const &a)
Definition Issue.h:20
Issue()=default
bool integral() const
Definition Issue.cpp:60
AccountID const & getIssuer() const
Definition Issue.h:25
std::string getText() const
Definition Issue.cpp:17
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.
Definition algorithm.h:5
Issue const & xrpIssue()
Returns an asset specifier that represents XRP.
Definition Issue.h:97
Issue issueFromJson(json::Value const &v)
Definition Issue.cpp:89
constexpr bool operator==(BaseUInt< Bits, Tag > const &lhs, BaseUInt< Bits, Tag > const &rhs)
Definition base_uint.h:588
bool isXRP(AccountID const &c)
Definition AccountID.h:70
BaseUInt< 160, detail::CurrencyTag > Currency
Currency is a hash representing a specific currency.
Definition UintTypes.h:36
std::ostream & operator<<(std::ostream &out, BaseUInt< Bits, Tag > const &u)
Definition base_uint.h:648
Currency const & xrpCurrency()
XRP currency.
Definition UintTypes.cpp:99
std::string to_string(BaseUInt< Bits, Tag > const &a)
Definition base_uint.h:633
json::Value toJson(Asset const &asset)
Definition Asset.h:157
constexpr std::strong_ordering operator<=>(BaseUInt< Bits, Tag > const &lhs, BaseUInt< Bits, Tag > const &rhs)
Definition base_uint.h:567
BaseUInt< 160, detail::AccountIDTag > AccountID
A 160-bit unsigned that uniquely identifies an account.
Definition AccountID.h:28
AccountID const & noAccount()
A placeholder for empty accounts.
void hash_append(Hasher &h, Slice const &v)
Definition Slice.h:175
bool isConsistent(Asset const &asset)
Definition Asset.h:312
Currency const & noCurrency()
A placeholder for empty currencies.
Issue const & noIssue()
Returns an asset specifier that represents no account and currency.
Definition Issue.h:105
AccountID const & xrpAccount()
Compute AccountID from public key.