xrpld
Loading...
Searching...
No Matches
PathSet.h
1#pragma once
2
3#include <test/jtx.h>
4
5#include <xrpl/basics/Log.h>
6#include <xrpl/ledger/helpers/DirectoryHelpers.h>
7#include <xrpl/protocol/TxFlags.h>
8
9namespace xrpl::test {
10
13inline std::size_t
15 jtx::Env& env,
16 jtx::Account const& account,
17 Asset const& takerPays,
18 Asset const& takerGets)
19{
20 size_t count = 0;
21 forEachItem(*env.current(), account, [&](SLE::const_ref sle) {
22 if (sle->getType() == ltOFFER && sle->getFieldAmount(sfTakerPays).asset() == takerPays &&
23 sle->getFieldAmount(sfTakerGets).asset() == takerGets)
24 ++count;
25 });
26 return count;
27}
28
29inline std::size_t
31 jtx::Env& env,
32 jtx::Account const& account,
33 STAmount const& takerPays,
34 STAmount const& takerGets)
35{
36 size_t count = 0;
37 forEachItem(*env.current(), account, [&](SLE::const_ref sle) {
38 if (sle->getType() == ltOFFER && sle->getFieldAmount(sfTakerPays) == takerPays &&
39 sle->getFieldAmount(sfTakerGets) == takerGets)
40 ++count;
41 });
42 return count;
43}
44
47inline bool
49 jtx::Env& env,
50 jtx::Account const& account,
51 STAmount const& takerPays,
52 STAmount const& takerGets)
53{
54 return countOffers(env, account, takerPays, takerGets) > 0;
55}
56
59inline bool
60isOffer(jtx::Env& env, jtx::Account const& account, Asset const& takerPays, Asset const& takerGets)
61{
62 return countOffers(env, account, takerPays, takerGets) > 0;
63}
64
66{
67public:
69
70 TestPath() = default;
71 TestPath(TestPath const&) = default;
73 operator=(TestPath const&) = default;
74 TestPath(TestPath&&) = default;
76 operator=(TestPath&&) = default;
77
78 template <class First, class... Rest>
79 explicit TestPath(First&& first, Rest&&... rest)
80 {
82 }
84 pushBack(Issue const& iss);
86 pushBack(MPTIssue const& iss);
88 pushBack(jtx::Account const& acc);
90 pushBack(STPathElement const& pe);
91 [[nodiscard]] json::Value
92 json() const;
93
94private:
95 template <class First, class... Rest>
96 void
97 addHelper(First&& first, Rest&&... rest);
98};
99
100inline TestPath&
102{
103 path.emplaceBack(pe);
104 return *this;
105}
106
107inline TestPath&
109{
110 path.emplaceBack(
112 beast::kZero,
113 iss.currency,
114 iss.account);
115 return *this;
116}
117
118inline TestPath&
120{
121 path.emplaceBack(
123 beast::kZero,
124 iss.getMptID(),
125 iss.getIssuer());
126 return *this;
127}
128
129inline TestPath&
131{
132 path.emplaceBack(account.id(), Currency{beast::kZero}, beast::kZero);
133 return *this;
134}
135
136template <class First, class... Rest>
137void
138TestPath::addHelper(First&& first, Rest&&... rest)
139{
141 if constexpr (sizeof...(rest) > 0)
143}
144
145inline json::Value
147{
148 return path.getJson(JsonOptions::Values::None);
149}
150
152{
153public:
155
156 PathSet() = default;
157 PathSet(PathSet const&) = default;
158 PathSet&
159 operator=(PathSet const&) = default;
160 PathSet(PathSet&&) = default;
161 PathSet&
162 operator=(PathSet&&) = default;
163
164 template <class First, class... Rest>
165 explicit PathSet(First&& first, Rest&&... rest)
166 {
168 }
169 [[nodiscard]] json::Value
170 json() const
171 {
172 json::Value v;
173 v["Paths"] = paths.getJson(JsonOptions::Values::None);
174 return v;
175 }
176
177private:
178 template <class First, class... Rest>
179 void
180 addHelper(First first, Rest... rest)
181 {
182 paths.emplaceBack(std::move(first.path));
183 if constexpr (sizeof...(rest) > 0)
184 addHelper(std::move(rest)...);
185 }
186};
187
188} // namespace xrpl::test
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
constexpr MPTID const & getMptID() const
Definition MPTIssue.h:33
AccountID const & getIssuer() const
Definition MPTIssue.cpp:29
std::shared_ptr< STLedgerEntry const > const & const_ref
void addHelper(First first, Rest... rest)
Definition PathSet.h:180
STPathSet paths
Definition PathSet.h:154
PathSet(First &&first, Rest &&... rest)
Definition PathSet.h:165
PathSet(PathSet const &)=default
PathSet & operator=(PathSet &&)=default
PathSet(PathSet &&)=default
json::Value json() const
Definition PathSet.h:170
PathSet & operator=(PathSet const &)=default
TestPath(TestPath const &)=default
TestPath(TestPath &&)=default
void addHelper(First &&first, Rest &&... rest)
Definition PathSet.h:138
TestPath(First &&first, Rest &&... rest)
Definition PathSet.h:79
TestPath & operator=(TestPath &&)=default
TestPath & operator=(TestPath const &)=default
json::Value json() const
Definition PathSet.h:146
TestPath & pushBack(Issue const &iss)
Definition PathSet.h:108
Immutable cryptographic account descriptor.
Definition jtx/Account.h:17
A transaction testing environment.
Definition Env.h:143
std::shared_ptr< OpenView const > current() const
Returns the current ledger.
Definition Env.h:353
T forward(T... args)
std::size_t countOffers(jtx::Env &env, jtx::Account const &account, Asset const &takerPays, Asset const &takerGets)
Count offer.
Definition PathSet.h:14
bool isOffer(jtx::Env &env, jtx::Account const &account, STAmount const &takerPays, STAmount const &takerGets)
An offer exists.
Definition PathSet.h:48
BaseUInt< 160, detail::CurrencyTag > Currency
Currency is a hash representing a specific currency.
Definition UintTypes.h:36
void forEachItem(ReadView const &view, Keylet const &root, std::function< void(SLE::const_ref)> const &f)
Iterate all items in the given directory.