rippled
Loading...
Searching...
No Matches
Issue.h
1#ifndef XRPL_PROTOCOL_ISSUE_H_INCLUDED
2#define XRPL_PROTOCOL_ISSUE_H_INCLUDED
3
4#include <xrpl/beast/utility/instrumentation.h>
5#include <xrpl/json/json_value.h>
6#include <xrpl/protocol/UintTypes.h>
7
8namespace xrpl {
9
13class Issue
14{
15public:
18
19 Issue() = default;
20
21 Issue(Currency const& c, AccountID const& a) : currency(c), account(a)
22 {
23 }
24
25 AccountID const&
26 getIssuer() const
27 {
28 return account;
29 }
30
32 getText() const;
33
34 void
35 setJson(Json::Value& jv) const;
36
37 bool
38 native() const;
39
40 bool
41 integral() const;
42
43 friend constexpr std::weak_ordering
44 operator<=>(Issue const& lhs, Issue const& rhs);
45};
46
47bool
48isConsistent(Issue const& ac);
49
51to_string(Issue const& ac);
52
54to_json(Issue const& is);
55
56Issue
58
60operator<<(std::ostream& os, Issue const& x);
61
62template <class Hasher>
63void
64hash_append(Hasher& h, Issue const& r)
65{
68}
69
72[[nodiscard]] inline constexpr bool
73operator==(Issue const& lhs, Issue const& rhs)
74{
75 return (lhs.currency == rhs.currency) &&
76 (isXRP(lhs.currency) || lhs.account == rhs.account);
77}
82[[nodiscard]] constexpr std::weak_ordering
83operator<=>(Issue const& lhs, Issue const& rhs)
84{
85 if (auto const c{lhs.currency <=> rhs.currency}; c != 0)
86 return c;
87
88 if (isXRP(lhs.currency))
89 return std::weak_ordering::equivalent;
90
91 return (lhs.account <=> rhs.account);
92}
95//------------------------------------------------------------------------------
96
98inline Issue const&
100{
101 static Issue issue{xrpCurrency(), xrpAccount()};
102 return issue;
103}
104
106inline Issue const&
108{
109 static Issue issue{noCurrency(), noAccount()};
110 return issue;
111}
112
113inline bool
114isXRP(Issue const& issue)
115{
116 return issue.native();
117}
118
119} // namespace xrpl
120
121#endif
Represents a JSON value.
Definition json_value.h:131
A currency issued by an account.
Definition Issue.h:14
Currency currency
Definition Issue.h:16
AccountID account
Definition Issue.h:17
bool native() const
Definition Issue.cpp:47
friend constexpr std::weak_ordering operator<=>(Issue const &lhs, Issue const &rhs)
Strict weak ordering.
Definition Issue.h:83
Issue(Currency const &c, AccountID const &a)
Definition Issue.h:21
Issue()=default
bool integral() const
Definition Issue.cpp:53
void setJson(Json::Value &jv) const
Definition Issue.cpp:39
AccountID const & getIssuer() const
Definition Issue.h:26
std::string getText() const
Definition Issue.cpp:16
std::enable_if_t< is_contiguously_hashable< 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:6
bool isConsistent(Book const &book)
Definition Book.cpp:10
Issue const & xrpIssue()
Returns an asset specifier that represents XRP.
Definition Issue.h:99
bool isXRP(AccountID const &c)
Definition AccountID.h:71
std::string to_string(base_uint< Bits, Tag > const &a)
Definition base_uint.h:611
std::ostream & operator<<(std::ostream &out, base_uint< Bits, Tag > const &u)
Definition base_uint.h:628
constexpr bool operator==(base_uint< Bits, Tag > const &lhs, base_uint< Bits, Tag > const &rhs)
Definition base_uint.h:566
Currency const & xrpCurrency()
XRP currency.
constexpr std::strong_ordering operator<=>(base_uint< Bits, Tag > const &lhs, base_uint< Bits, Tag > const &rhs)
Definition base_uint.h:544
Issue issueFromJson(Json::Value const &v)
Definition Issue.cpp:82
Json::Value to_json(Asset const &asset)
Definition Asset.h:124
AccountID const & noAccount()
A placeholder for empty accounts.
void hash_append(Hasher &h, Slice const &v)
Definition Slice.h:180
Currency const & noCurrency()
A placeholder for empty currencies.
Issue const & noIssue()
Returns an asset specifier that represents no account and currency.
Definition Issue.h:107
AccountID const & xrpAccount()
Compute AccountID from public key.