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