rippled
Loading...
Searching...
No Matches
STXChainBridge.h
1#ifndef XRPL_PROTOCOL_STXCHAINBRIDGE_H_INCLUDED
2#define XRPL_PROTOCOL_STXCHAINBRIDGE_H_INCLUDED
3
4#include <xrpl/basics/CountedObject.h>
5#include <xrpl/protocol/STAccount.h>
6#include <xrpl/protocol/STBase.h>
7#include <xrpl/protocol/STIssue.h>
8
9namespace ripple {
10
11class Serializer;
12class STObject;
13
14class STXChainBridge final : public STBase, public CountedObject<STXChainBridge>
15{
16 STAccount lockingChainDoor_{sfLockingChainDoor};
17 STIssue lockingChainIssue_{sfLockingChainIssue};
18 STAccount issuingChainDoor_{sfIssuingChainDoor};
19 STIssue issuingChainIssue_{sfIssuingChainIssue};
20
21public:
23
24 enum class ChainType { locking, issuing };
25
26 static ChainType
28
29 static ChainType
30 srcChain(bool wasLockingChainSend);
31
32 static ChainType
33 dstChain(bool wasLockingChainSend);
34
36
37 explicit STXChainBridge(SField const& name);
38
39 STXChainBridge(STXChainBridge const& rhs) = default;
40
41 STXChainBridge(STObject const& o);
42
44 AccountID const& srcChainDoor,
45 Issue const& srcChainIssue,
46 AccountID const& dstChainDoor,
47 Issue const& dstChainIssue);
48
49 explicit STXChainBridge(Json::Value const& v);
50
51 explicit STXChainBridge(SField const& name, Json::Value const& v);
52
53 explicit STXChainBridge(SerialIter& sit, SField const& name);
54
56 operator=(STXChainBridge const& rhs) = default;
57
59 getText() const override;
60
62 toSTObject() const;
63
64 AccountID const&
65 lockingChainDoor() const;
66
67 Issue const&
68 lockingChainIssue() const;
69
70 AccountID const&
71 issuingChainDoor() const;
72
73 Issue const&
74 issuingChainIssue() const;
75
76 AccountID const&
77 door(ChainType ct) const;
78
79 Issue const&
80 issue(ChainType ct) const;
81
83 getSType() const override;
84
85 Json::Value getJson(JsonOptions) const override;
86
87 void
88 add(Serializer& s) const override;
89
90 bool
91 isEquivalent(STBase const& t) const override;
92
93 bool
94 isDefault() const override;
95
96 value_type const&
97 value() const noexcept;
98
99private:
100 static std::unique_ptr<STXChainBridge>
101 construct(SerialIter&, SField const& name);
102
103 STBase*
104 copy(std::size_t n, void* buf) const override;
105 STBase*
106 move(std::size_t n, void* buf) override;
107
108 friend bool
109 operator==(STXChainBridge const& lhs, STXChainBridge const& rhs);
110
111 friend bool
112 operator<(STXChainBridge const& lhs, STXChainBridge const& rhs);
113};
114
115inline bool
116operator==(STXChainBridge const& lhs, STXChainBridge const& rhs)
117{
118 return std::tie(
119 lhs.lockingChainDoor_,
120 lhs.lockingChainIssue_,
121 lhs.issuingChainDoor_,
122 lhs.issuingChainIssue_) ==
123 std::tie(
124 rhs.lockingChainDoor_,
125 rhs.lockingChainIssue_,
126 rhs.issuingChainDoor_,
127 rhs.issuingChainIssue_);
128}
129
130inline bool
131operator<(STXChainBridge const& lhs, STXChainBridge const& rhs)
132{
133 return std::tie(
137 lhs.issuingChainIssue_) <
138 std::tie(
143}
144
145inline AccountID const&
150
151inline Issue const&
153{
154 return lockingChainIssue_.value().get<Issue>();
155};
156
157inline AccountID const&
162
163inline Issue const&
165{
166 return issuingChainIssue_.value().get<Issue>();
167};
168
169inline STXChainBridge::value_type const&
170STXChainBridge::value() const noexcept
171{
172 return *this;
173}
174
175inline AccountID const&
177{
178 if (ct == ChainType::locking)
179 return lockingChainDoor();
180 return issuingChainDoor();
181}
182
183inline Issue const&
185{
186 if (ct == ChainType::locking)
187 return lockingChainIssue();
188 return issuingChainIssue();
189}
190
198
200STXChainBridge::srcChain(bool wasLockingChainSend)
201{
202 if (wasLockingChainSend)
203 return ChainType::locking;
204 return ChainType::issuing;
205}
206
208STXChainBridge::dstChain(bool wasLockingChainSend)
209{
210 if (wasLockingChainSend)
211 return ChainType::issuing;
212 return ChainType::locking;
213}
214
215} // namespace ripple
216
217#endif
Represents a JSON value.
Definition json_value.h:131
Tracks the number of instances of an object.
A currency issued by an account.
Definition Issue.h:14
Identifies fields.
Definition SField.h:127
AccountID const & value() const noexcept
Definition STAccount.h:73
A type which can be exported to a well known binary format.
Definition STBase.h:116
value_type const & value() const noexcept
Definition STIssue.h:114
AccountID const & door(ChainType ct) const
bool isEquivalent(STBase const &t) const override
STXChainBridge & operator=(STXChainBridge const &rhs)=default
static ChainType dstChain(bool wasLockingChainSend)
STObject toSTObject() const
STBase * copy(std::size_t n, void *buf) const override
STXChainBridge(STXChainBridge const &rhs)=default
static ChainType srcChain(bool wasLockingChainSend)
AccountID const & issuingChainDoor() const
Issue const & issuingChainIssue() const
value_type const & value() const noexcept
std::string getText() const override
Json::Value getJson(JsonOptions) const override
friend bool operator<(STXChainBridge const &lhs, STXChainBridge const &rhs)
void add(Serializer &s) const override
Issue const & lockingChainIssue() const
SerializedTypeID getSType() const override
bool isDefault() const override
static ChainType otherChain(ChainType ct)
STBase * move(std::size_t n, void *buf) override
static std::unique_ptr< STXChainBridge > construct(SerialIter &, SField const &name)
AccountID const & lockingChainDoor() const
Issue const & issue(ChainType ct) const
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition algorithm.h:6
SerializedTypeID
Definition SField.h:91
STL namespace.
Note, should be treated as flags that can be | and &.
Definition STBase.h:18
T tie(T... args)