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 ripple {
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 friend constexpr std::weak_ordering
41 operator<=>(Issue const& lhs, Issue const& rhs);
42};
43
44bool
45isConsistent(Issue const& ac);
46
48to_string(Issue const& ac);
49
51to_json(Issue const& is);
52
53Issue
55
57operator<<(std::ostream& os, Issue const& x);
58
59template <class Hasher>
60void
61hash_append(Hasher& h, Issue const& r)
62{
65}
66
69[[nodiscard]] inline constexpr bool
70operator==(Issue const& lhs, Issue const& rhs)
71{
72 return (lhs.currency == rhs.currency) &&
73 (isXRP(lhs.currency) || lhs.account == rhs.account);
74}
79[[nodiscard]] constexpr std::weak_ordering
80operator<=>(Issue const& lhs, Issue const& rhs)
81{
82 if (auto const c{lhs.currency <=> rhs.currency}; c != 0)
83 return c;
84
85 if (isXRP(lhs.currency))
86 return std::weak_ordering::equivalent;
87
88 return (lhs.account <=> rhs.account);
89}
92//------------------------------------------------------------------------------
93
95inline Issue const&
97{
98 static Issue issue{xrpCurrency(), xrpAccount()};
99 return issue;
100}
101
103inline Issue const&
105{
106 static Issue issue{noCurrency(), noAccount()};
107 return issue;
108}
109
110inline bool
111isXRP(Issue const& issue)
112{
113 return issue.native();
114}
115
116} // namespace ripple
117
118#endif
Represents a JSON value.
Definition json_value.h:131
A currency issued by an account.
Definition Issue.h:14
std::string getText() const
Definition Issue.cpp:16
friend constexpr std::weak_ordering operator<=>(Issue const &lhs, Issue const &rhs)
Strict weak ordering.
Definition Issue.h:80
AccountID account
Definition Issue.h:17
Currency currency
Definition Issue.h:16
AccountID const & getIssuer() const
Definition Issue.h:26
bool native() const
Definition Issue.cpp:47
Issue()=default
void setJson(Json::Value &jv) const
Definition Issue.cpp:39
Issue(Currency const &c, AccountID const &a)
Definition Issue.h:21
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
Issue const & xrpIssue()
Returns an asset specifier that represents XRP.
Definition Issue.h:96
AccountID const & noAccount()
A placeholder for empty accounts.
void hash_append(Hasher &h, Slice const &v)
Definition Slice.h:180
bool isConsistent(Book const &book)
Definition Book.cpp:10
bool isXRP(AccountID const &c)
Definition AccountID.h:71
AccountID const & xrpAccount()
Compute AccountID from public key.
constexpr std::strong_ordering operator<=>(base_uint< Bits, Tag > const &lhs, base_uint< Bits, Tag > const &rhs)
Definition base_uint.h:544
Currency const & noCurrency()
A placeholder for empty currencies.
std::ostream & operator<<(std::ostream &out, base_uint< Bits, Tag > const &u)
Definition base_uint.h:628
Json::Value to_json(Asset const &asset)
Definition Asset.h:104
Issue issueFromJson(Json::Value const &v)
Definition Issue.cpp:76
Currency const & xrpCurrency()
XRP currency.
Issue const & noIssue()
Returns an asset specifier that represents no account and currency.
Definition Issue.h:104
std::string to_string(base_uint< Bits, Tag > const &a)
Definition base_uint.h:611
constexpr bool operator==(base_uint< Bits, Tag > const &lhs, base_uint< Bits, Tag > const &rhs)
Definition base_uint.h:566