rippled
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 AccountID const&
25 getIssuer() const
26 {
27 return account;
28 }
29
31 getText() const;
32
33 void
34 setJson(Json::Value& jv) const;
35
36 bool
37 native() const;
38
39 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
53to_json(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]] inline constexpr bool
72operator==(Issue const& lhs, Issue const& rhs)
73{
74 return (lhs.currency == rhs.currency) && (isXRP(lhs.currency) || lhs.account == rhs.account);
75}
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}
93//------------------------------------------------------------------------------
94
96inline Issue const&
98{
99 static Issue issue{xrpCurrency(), xrpAccount()};
100 return issue;
101}
102
104inline Issue const&
106{
107 static Issue issue{noCurrency(), noAccount()};
108 return issue;
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
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:81
Issue(Currency const &c, AccountID const &a)
Definition Issue.h:20
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:25
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:5
bool isConsistent(Book const &book)
Definition Book.cpp:10
Issue const & xrpIssue()
Returns an asset specifier that represents XRP.
Definition Issue.h:97
bool isXRP(AccountID const &c)
Definition AccountID.h:70
std::string to_string(base_uint< Bits, Tag > const &a)
Definition base_uint.h:597
std::ostream & operator<<(std::ostream &out, base_uint< Bits, Tag > const &u)
Definition base_uint.h:612
constexpr bool operator==(base_uint< Bits, Tag > const &lhs, base_uint< Bits, Tag > const &rhs)
Definition base_uint.h:552
Currency const & xrpCurrency()
XRP currency.
Definition UintTypes.cpp:96
constexpr std::strong_ordering operator<=>(base_uint< Bits, Tag > const &lhs, base_uint< Bits, Tag > const &rhs)
Definition base_uint.h:531
Issue issueFromJson(Json::Value const &v)
Definition Issue.cpp:82
Json::Value to_json(Asset const &asset)
Definition Asset.h:121
AccountID const & noAccount()
A placeholder for empty accounts.
void hash_append(Hasher &h, Slice const &v)
Definition Slice.h:174
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.