rippled
Loading...
Searching...
No Matches
STIssue.h
1#ifndef XRPL_PROTOCOL_STISSUE_H_INCLUDED
2#define XRPL_PROTOCOL_STISSUE_H_INCLUDED
3
4#include <xrpl/basics/CountedObject.h>
5#include <xrpl/protocol/Asset.h>
6#include <xrpl/protocol/SField.h>
7#include <xrpl/protocol/STBase.h>
8#include <xrpl/protocol/Serializer.h>
9
10namespace ripple {
11
12class STIssue final : public STBase, CountedObject<STIssue>
13{
14private:
16
17public:
19
20 STIssue() = default;
21 STIssue(STIssue const& rhs) = default;
22
23 explicit STIssue(SerialIter& sit, SField const& name);
24
25 template <AssetType A>
26 explicit STIssue(SField const& name, A const& issue);
27
28 explicit STIssue(SField const& name);
29
30 STIssue&
31 operator=(STIssue const& rhs) = default;
32
33 template <ValidIssueType TIss>
34 TIss const&
35 get() const;
36
37 template <ValidIssueType TIss>
38 bool
39 holds() const;
40
41 value_type const&
42 value() const noexcept;
43
44 void
45 setIssue(Asset const& issue);
46
48 getSType() const override;
49
50 std::string
51 getText() const override;
52
53 Json::Value getJson(JsonOptions) const override;
54
55 void
56 add(Serializer& s) const override;
57
58 bool
59 isEquivalent(STBase const& t) const override;
60
61 bool
62 isDefault() const override;
63
64 friend constexpr bool
65 operator==(STIssue const& lhs, STIssue const& rhs);
66
67 friend constexpr std::weak_ordering
68 operator<=>(STIssue const& lhs, STIssue const& rhs);
69
70 friend constexpr bool
71 operator==(STIssue const& lhs, Asset const& rhs);
72
73 friend constexpr std::weak_ordering
74 operator<=>(STIssue const& lhs, Asset const& rhs);
75
76private:
77 STBase*
78 copy(std::size_t n, void* buf) const override;
79 STBase*
80 move(std::size_t n, void* buf) override;
81
82 friend class detail::STVar;
83};
84
85template <AssetType A>
86STIssue::STIssue(SField const& name, A const& asset)
87 : STBase{name}, asset_{asset}
88{
89 if (holds<Issue>() && !isConsistent(asset_.get<Issue>()))
90 Throw<std::runtime_error>(
91 "Invalid asset: currency and account native mismatch");
92}
93
95issueFromJson(SField const& name, Json::Value const& v);
96
97template <ValidIssueType TIss>
98bool
100{
101 return asset_.holds<TIss>();
102}
103
104template <ValidIssueType TIss>
105TIss const&
107{
108 if (!holds<TIss>(asset_))
109 Throw<std::runtime_error>("Asset doesn't hold the requested issue");
110 return std::get<TIss>(asset_);
111}
112
113inline STIssue::value_type const&
114STIssue::value() const noexcept
115{
116 return asset_;
117}
118
119inline void
121{
122 if (holds<Issue>() && !isConsistent(asset_.get<Issue>()))
123 Throw<std::runtime_error>(
124 "Invalid asset: currency and account native mismatch");
125
126 asset_ = asset;
127}
128
129constexpr bool
130operator==(STIssue const& lhs, STIssue const& rhs)
131{
132 return lhs.asset_ == rhs.asset_;
133}
134
136operator<=>(STIssue const& lhs, STIssue const& rhs)
137{
138 return lhs.asset_ <=> rhs.asset_;
139}
140
141constexpr bool
142operator==(STIssue const& lhs, Asset const& rhs)
143{
144 return lhs.asset_ == rhs;
145}
146
148operator<=>(STIssue const& lhs, Asset const& rhs)
149{
150 return lhs.asset_ <=> rhs;
151}
152
153} // namespace ripple
154
155#endif
Represents a JSON value.
Definition json_value.h:131
constexpr TIss const & get() const
constexpr bool holds() const
Definition Asset.h:113
Tracks the number of instances of an object.
A currency issued by an account.
Definition Issue.h:14
Identifies fields.
Definition SField.h:127
A type which can be exported to a well known binary format.
Definition STBase.h:116
STIssue & operator=(STIssue const &rhs)=default
void add(Serializer &s) const override
Definition STIssue.cpp:91
STIssue()=default
friend constexpr bool operator==(STIssue const &lhs, STIssue const &rhs)
Definition STIssue.h:130
friend constexpr std::weak_ordering operator<=>(STIssue const &lhs, STIssue const &rhs)
Definition STIssue.h:136
value_type const & value() const noexcept
Definition STIssue.h:114
friend class detail::STVar
Definition STIssue.h:82
STBase * copy(std::size_t n, void *buf) const override
Definition STIssue.cpp:125
Json::Value getJson(JsonOptions) const override
Definition STIssue.cpp:83
bool isEquivalent(STBase const &t) const override
Definition STIssue.cpp:112
bool isDefault() const override
Definition STIssue.cpp:119
STIssue(STIssue const &rhs)=default
void setIssue(Asset const &issue)
Definition STIssue.h:120
STBase * move(std::size_t n, void *buf) override
Definition STIssue.cpp:131
SerializedTypeID getSType() const override
Definition STIssue.cpp:71
std::string getText() const override
Definition STIssue.cpp:77
TIss const & get() const
bool holds() const
Definition STIssue.h:99
T is_same_v
JSON (JavaScript Object Notation).
Definition json_errors.h:6
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
bool isConsistent(Book const &book)
Definition Book.cpp:10
SerializedTypeID
Definition SField.h:91
Issue issueFromJson(Json::Value const &v)
Definition Issue.cpp:76
STL namespace.
Note, should be treated as flags that can be | and &.
Definition STBase.h:18