xrpld
Loading...
Searching...
No Matches
Issue.h
1#pragma once
2
3#include <xrpl/json/json_value.h>
4#include <xrpl/protocol/AccountID.h>
5#include <xrpl/protocol/UintTypes.h>
6
7#include <compare>
8#include <ostream>
9#include <string>
10
11namespace xrpl {
12
17class Issue
18{
19public:
22
23 Issue() = default;
24
25 Issue(Currency const& c, AccountID const& a) : currency(c), account(a)
26 {
27 }
28
29 [[nodiscard]] AccountID const&
30 getIssuer() const
31 {
32 return account;
33 }
34
35 [[nodiscard]] std::string
36 getText() const;
37
38 void
39 setJson(json::Value& jv) const;
40
41 [[nodiscard]] bool
42 native() const;
43
44 [[nodiscard]] bool
45 integral() const;
46
47 friend constexpr std::weak_ordering
48 operator<=>(Issue const& lhs, Issue const& rhs);
49};
50
51bool
52isConsistent(Issue const& ac);
53
55to_string(Issue const& ac);
56
58toJson(Issue const& is);
59
60Issue
62
64operator<<(std::ostream& os, Issue const& x);
65
66template <class Hasher>
67void
68hash_append(Hasher& h, Issue const& r)
69{
72}
73
78[[nodiscard]] constexpr bool
79operator==(Issue const& lhs, Issue const& rhs)
80{
81 return (lhs.currency == rhs.currency) && (isXRP(lhs.currency) || lhs.account == rhs.account);
82}
83
84
89[[nodiscard]] constexpr std::weak_ordering
90operator<=>(Issue const& lhs, Issue const& rhs)
91{
92 if (auto const c{lhs.currency <=> rhs.currency}; c != 0) // NOLINT(modernize-use-nullptr)
93 return c;
94
95 if (isXRP(lhs.currency))
96 return std::weak_ordering::equivalent;
97
98 return (lhs.account <=> rhs.account);
99}
100
101
102//------------------------------------------------------------------------------
103
107inline Issue const&
109{
110 static Issue const kIssue{xrpCurrency(), xrpAccount()};
111 return kIssue;
112}
113
117inline Issue const&
119{
120 static Issue const kIssue{noCurrency(), noAccount()};
121 return kIssue;
122}
123
124inline bool
125isXRP(Issue const& issue)
126{
127 return issue.native();
128}
129
130} // namespace xrpl
Represents a JSON value.
Definition json_value.h:117
A currency issued by an account.
Definition Issue.h:18
Currency currency
Definition Issue.h:20
AccountID account
Definition Issue.h:21
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:90
Issue(Currency const &c, AccountID const &a)
Definition Issue.h:25
Issue()=default
bool integral() const
Definition Issue.cpp:60
AccountID const & getIssuer() const
Definition Issue.h:30
std::string getText() const
Definition Issue.cpp:17
void 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:108
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:606
bool isXRP(AccountID const &c)
Definition AccountID.h:84
BaseUInt< 160, detail::CurrencyTag > Currency
Currency is a hash representing a specific currency.
Definition UintTypes.h:42
std::ostream & operator<<(std::ostream &out, BaseUInt< Bits, Tag > const &u)
Definition base_uint.h:666
Currency const & xrpCurrency()
XRP currency.
Definition UintTypes.cpp:99
std::string to_string(BaseUInt< Bits, Tag > const &a)
Definition base_uint.h:651
json::Value toJson(Asset const &asset)
Definition Asset.h:168
constexpr std::strong_ordering operator<=>(BaseUInt< Bits, Tag > const &lhs, BaseUInt< Bits, Tag > const &rhs)
Definition base_uint.h:585
BaseUInt< 160, detail::AccountIDTag > AccountID
A 160-bit unsigned that uniquely identifies an account.
Definition AccountID.h:34
AccountID const & noAccount()
A placeholder for empty accounts.
void hash_append(Hasher &h, Slice const &v)
Definition Slice.h:194
bool isConsistent(Asset const &asset)
Definition Asset.h:323
Currency const & noCurrency()
A placeholder for empty currencies.
Issue const & noIssue()
Returns an asset specifier that represents no account and currency.
Definition Issue.h:118
AccountID const & xrpAccount()
Compute AccountID from public key.