xrpld
Loading...
Searching...
No Matches
STArray.h
1#pragma once
2
3#include <xrpl/basics/CountedObject.h>
4#include <xrpl/json/json_value.h>
5#include <xrpl/protocol/SField.h>
6#include <xrpl/protocol/STBase.h>
7#include <xrpl/protocol/STObject.h>
8#include <xrpl/protocol/Serializer.h>
9
10#include <cstddef>
11#include <iterator>
12#include <string>
13#include <type_traits>
14#include <utility>
15#include <vector>
16
17namespace xrpl {
18
19class STArray final : public STBase, public CountedObject<STArray>
20{
21private:
23
25
26public:
28 using size_type = list_type::size_type;
29 using iterator = list_type::iterator;
30 using const_iterator = list_type::const_iterator;
31
32 STArray() = default;
33 STArray(STArray const&) = default;
34
35 template <class Iter>
36 explicit STArray(Iter first, Iter last)
38
39 template <class Iter>
40 STArray(SField const& f, Iter first, Iter last)
42
43 STArray&
44 operator=(STArray const&) = default;
46 STArray&
48
49 STArray(SField const& f, std::size_t n);
50 STArray(SerialIter& sit, SField const& f, int depth = 0);
51 explicit STArray(int n);
52 explicit STArray(SField const& f);
53
56
57 STObject const&
58 operator[](std::size_t j) const;
59
61 back();
62
63 [[nodiscard]] STObject const&
64 back() const;
65
66 template <class... Args>
67 void
68 emplaceBack(Args&&... args);
69
70 void
71 pushBack(STObject const& object);
72
73 void
74 pushBack(STObject&& object);
75
76 // STL-compatible alias required by std::back_insert_iterator
77 void
78 // NOLINTNEXTLINE(readability-identifier-naming)
79 push_back(STObject const& object)
80 {
81 pushBack(object);
82 }
83
84 void
85 // NOLINTNEXTLINE(readability-identifier-naming)
87 {
88 pushBack(std::move(object));
89 }
90
92 begin();
93
95 end();
96
97 [[nodiscard]] const_iterator
98 begin() const;
99
100 [[nodiscard]] const_iterator
101 end() const;
102
103 [[nodiscard]] size_type
104 size() const;
105
106 [[nodiscard]] bool
107 empty() const;
108
109 void
110 clear();
111
112 void
114
115 void
116 swap(STArray& a) noexcept;
117
118 [[nodiscard]] std::string
119 getFullText() const override;
120
121 [[nodiscard]] std::string
122 getText() const override;
123
124 [[nodiscard]] json::Value
125 getJson(JsonOptions index) const override;
126
127 void
128 add(Serializer& s) const override;
129
130 void
131 sort(bool (*compare)(STObject const& o1, STObject const& o2));
132
133 bool
134 operator==(STArray const& s) const;
135
137 erase(iterator pos);
138
141
143 erase(iterator first, iterator last);
144
147
148 [[nodiscard]] SerializedTypeID
149 getSType() const override;
150
151 [[nodiscard]] bool
152 isEquivalent(STBase const& t) const override;
153
154 [[nodiscard]] bool
155 isDefault() const override;
156
157private:
158 STBase*
159 copy(std::size_t n, void* buf) const override;
160 STBase*
161 move(std::size_t n, void* buf) override;
162
163 friend class detail::STVar;
164};
165
166template <class Iter>
167STArray::STArray(Iter first, Iter last)
169 : v_(first, last)
170{
171}
172
173template <class Iter>
174STArray::STArray(SField const& f, Iter first, Iter last)
176 : STBase(f), v_(first, last)
177{
178}
179
180inline STObject&
182{
183 return v_[j];
184}
185
186inline STObject const&
188{
189 return v_[j];
190}
191
192inline STObject&
194{
195 return v_.back();
196}
197
198inline STObject const&
200{
201 return v_.back();
202}
203
204template <class... Args>
205inline void
206STArray::emplaceBack(Args&&... args)
207{
208 v_.emplace_back(std::forward<Args>(args)...);
209}
210
211inline void
213{
214 v_.push_back(object);
215}
216
217inline void
219{
220 v_.push_back(std::move(object));
221}
222
225{
226 return v_.begin();
227}
228
231{
232 return v_.end();
233}
234
237{
238 return v_.begin();
239}
240
243{
244 return v_.end();
245}
246
249{
250 return v_.size();
251}
252
253inline bool
255{
256 return v_.empty();
257}
258
259inline void
261{
262 v_.clear();
263}
264
265inline void
267{
268 v_.reserve(n);
269}
270
271inline void
273{
274 v_.swap(a.v_);
275}
276
277inline bool
279{
280 return v_ == s.v_;
281}
282
285{
286 return v_.erase(pos);
287}
288
291{
292 return v_.erase(pos);
293}
294
297{
298 return v_.erase(first, last);
299}
300
303{
304 return v_.erase(first, last);
305}
306
307} // namespace xrpl
Represents a JSON value.
Definition json_value.h:117
Identifies fields.
Definition SField.h:132
STArray & operator=(STArray const &)=default
void emplaceBack(Args &&... args)
Definition STArray.h:206
STArray()=default
std::string getFullText() const override
Definition STArray.cpp:93
STObject value_type
Definition STArray.h:27
bool isEquivalent(STBase const &t) const override
Definition STArray.cpp:163
list_type::const_iterator const_iterator
Definition STArray.h:30
void clear()
Definition STArray.h:260
bool operator==(STArray const &s) const
Definition STArray.h:278
std::vector< STObject > list_type
Definition STArray.h:22
STBase * copy(std::size_t n, void *buf) const override
Definition STArray.cpp:81
list_type::size_type size_type
Definition STArray.h:28
void push_back(STObject const &object)
Definition STArray.h:79
STArray(STArray const &)=default
std::string getText() const override
Definition STArray.cpp:112
list_type v_
Definition STArray.h:24
void swap(STArray &a) noexcept
Definition STArray.h:272
SerializedTypeID getSType() const override
Definition STArray.cpp:157
size_type size() const
Definition STArray.h:248
void add(Serializer &s) const override
Definition STArray.cpp:146
void reserve(std::size_t n)
Definition STArray.h:266
iterator begin()
Definition STArray.h:224
bool isDefault() const override
Definition STArray.cpp:170
STBase * move(std::size_t n, void *buf) override
Definition STArray.cpp:87
iterator erase(iterator pos)
Definition STArray.h:284
void sort(bool(*compare)(STObject const &o1, STObject const &o2))
Definition STArray.cpp:176
json::Value getJson(JsonOptions index) const override
Definition STArray.cpp:131
list_type::iterator iterator
Definition STArray.h:29
void push_back(STObject &&object)
Definition STArray.h:86
bool empty() const
Definition STArray.h:254
void pushBack(STObject const &object)
Definition STArray.h:212
iterator end()
Definition STArray.h:230
STObject & back()
Definition STArray.h:193
STObject & operator[](std::size_t j)
Definition STArray.h:181
A type which can be exported to a well known binary format.
Definition STBase.h:129
T forward(T... args)
T is_convertible_v
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition algorithm.h:5
Dir::ConstIterator const_iterator
Definition Dir.cpp:16
SerializedTypeID
Definition SField.h:94
Note, should be treated as flags that can be | and &.
Definition STBase.h:22