xrpld
Loading...
Searching...
No Matches
CollectorRef.h
1#pragma once
2
3#include <csf/Proposal.h>
4#include <csf/SimTime.h>
5#include <csf/Tx.h>
6#include <csf/Validation.h>
7#include <csf/events.h>
8#include <csf/ledgers.h>
9
10#include <memory>
11#include <vector>
12
13namespace xrpl::test::csf {
14
55{
56 using tp = SimTime;
57
58 // Interface for type-erased collector instance
60 {
61 virtual ~ICollector() = default;
62
63 virtual void
64 on(PeerID node, tp when, Share<Tx> const&) = 0;
65
66 virtual void
67 on(PeerID node, tp when, Share<TxSet> const&) = 0;
68
69 virtual void
70 on(PeerID node, tp when, Share<Validation> const&) = 0;
71
72 virtual void
73 on(PeerID node, tp when, Share<Ledger> const&) = 0;
74
75 virtual void
76 on(PeerID node, tp when, Share<Proposal> const&) = 0;
77
78 virtual void
79 on(PeerID node, tp when, Receive<Tx> const&) = 0;
80
81 virtual void
82 on(PeerID node, tp when, Receive<TxSet> const&) = 0;
83
84 virtual void
85 on(PeerID node, tp when, Receive<Validation> const&) = 0;
86
87 virtual void
88 on(PeerID node, tp when, Receive<Ledger> const&) = 0;
89
90 virtual void
91 on(PeerID node, tp when, Receive<Proposal> const&) = 0;
92
93 virtual void
94 on(PeerID node, tp when, Relay<Tx> const&) = 0;
95
96 virtual void
97 on(PeerID node, tp when, Relay<TxSet> const&) = 0;
98
99 virtual void
100 on(PeerID node, tp when, Relay<Validation> const&) = 0;
101
102 virtual void
103 on(PeerID node, tp when, Relay<Ledger> const&) = 0;
104
105 virtual void
106 on(PeerID node, tp when, Relay<Proposal> const&) = 0;
107
108 virtual void
109 on(PeerID node, tp when, SubmitTx const&) = 0;
110
111 virtual void
112 on(PeerID node, tp when, StartRound const&) = 0;
113
114 virtual void
115 on(PeerID node, tp when, CloseLedger const&) = 0;
116
117 virtual void
118 on(PeerID node, tp when, AcceptLedger const&) = 0;
119
120 virtual void
121 on(PeerID node, tp when, WrongPrevLedger const&) = 0;
122
123 virtual void
124 on(PeerID node, tp when, FullyValidateLedger const&) = 0;
125 };
126
127 // Bridge between type-ful collector T and type erased instance
128 template <class T>
129 class Any final : public ICollector
130 {
131 T& t_;
132
133 public:
134 Any(T& t) : t_{t}
135 {
136 }
137
138 // Can't copy
139 Any(Any const&) = delete;
140 Any&
141 operator=(Any const&) = delete;
142
143 Any(Any&&) = default;
144 Any&
145 operator=(Any&&) = default;
146
147 void
148 on(PeerID node, tp when, Share<Tx> const& e) override
149 {
150 t_.on(node, when, e);
151 }
152
153 void
154 on(PeerID node, tp when, Share<TxSet> const& e) override
155 {
156 t_.on(node, when, e);
157 }
158
159 void
160 on(PeerID node, tp when, Share<Validation> const& e) override
161 {
162 t_.on(node, when, e);
163 }
164
165 void
166 on(PeerID node, tp when, Share<Ledger> const& e) override
167 {
168 t_.on(node, when, e);
169 }
170
171 void
172 on(PeerID node, tp when, Share<Proposal> const& e) override
173 {
174 t_.on(node, when, e);
175 }
176
177 void
178 on(PeerID node, tp when, Receive<Tx> const& e) override
179 {
180 t_.on(node, when, e);
181 }
182
183 void
184 on(PeerID node, tp when, Receive<TxSet> const& e) override
185 {
186 t_.on(node, when, e);
187 }
188
189 void
190 on(PeerID node, tp when, Receive<Validation> const& e) override
191 {
192 t_.on(node, when, e);
193 }
194
195 void
196 on(PeerID node, tp when, Receive<Ledger> const& e) override
197 {
198 t_.on(node, when, e);
199 }
200
201 void
202 on(PeerID node, tp when, Receive<Proposal> const& e) override
203 {
204 t_.on(node, when, e);
205 }
206
207 void
208 on(PeerID node, tp when, Relay<Tx> const& e) override
209 {
210 t_.on(node, when, e);
211 }
212
213 void
214 on(PeerID node, tp when, Relay<TxSet> const& e) override
215 {
216 t_.on(node, when, e);
217 }
218
219 void
220 on(PeerID node, tp when, Relay<Validation> const& e) override
221 {
222 t_.on(node, when, e);
223 }
224
225 void
226 on(PeerID node, tp when, Relay<Ledger> const& e) override
227 {
228 t_.on(node, when, e);
229 }
230
231 void
232 on(PeerID node, tp when, Relay<Proposal> const& e) override
233 {
234 t_.on(node, when, e);
235 }
236
237 void
238 on(PeerID node, tp when, SubmitTx const& e) override
239 {
240 t_.on(node, when, e);
241 }
242
243 void
244 on(PeerID node, tp when, StartRound const& e) override
245 {
246 t_.on(node, when, e);
247 }
248
249 void
250 on(PeerID node, tp when, CloseLedger const& e) override
251 {
252 t_.on(node, when, e);
253 }
254
255 void
256 on(PeerID node, tp when, AcceptLedger const& e) override
257 {
258 t_.on(node, when, e);
259 }
260
261 void
262 on(PeerID node, tp when, WrongPrevLedger const& e) override
263 {
264 t_.on(node, when, e);
265 }
266
267 void
268 on(PeerID node, tp when, FullyValidateLedger const& e) override
269 {
270 t_.on(node, when, e);
271 }
272 };
273
275
276public:
277 template <class T>
278 CollectorRef(T& t) : impl_{new Any<T>(t)}
279 {
280 }
281
282 // Non-copyable
283 CollectorRef(CollectorRef const& c) = delete;
286
290
291 template <class E>
292 void
293 on(PeerID node, tp when, E const& e)
294 {
295 impl_->on(node, when, e);
296 }
297};
298
311{
313
314public:
315 template <class Collector>
316 void
317 add(Collector& collector)
318 {
319 collectors_.emplace_back(collector);
320 }
321
322 template <class E>
323 void
324 on(PeerID node, SimTime when, E const& e)
325 {
326 for (auto& c : collectors_)
327 {
328 c.on(node, when, e);
329 }
330 }
331};
332
333} // namespace xrpl::test::csf
void on(PeerID node, tp when, CloseLedger const &e) override
void on(PeerID node, tp when, Relay< Proposal > const &e) override
void on(PeerID node, tp when, Share< Validation > const &e) override
void on(PeerID node, tp when, Receive< Validation > const &e) override
void on(PeerID node, tp when, FullyValidateLedger const &e) override
void on(PeerID node, tp when, Relay< Tx > const &e) override
void on(PeerID node, tp when, Receive< TxSet > const &e) override
void on(PeerID node, tp when, AcceptLedger const &e) override
void on(PeerID node, tp when, Relay< Validation > const &e) override
void on(PeerID node, tp when, Receive< Tx > const &e) override
void on(PeerID node, tp when, Relay< Ledger > const &e) override
Any & operator=(Any &&)=default
Any & operator=(Any const &)=delete
void on(PeerID node, tp when, StartRound const &e) override
void on(PeerID node, tp when, Relay< TxSet > const &e) override
void on(PeerID node, tp when, Share< Proposal > const &e) override
void on(PeerID node, tp when, WrongPrevLedger const &e) override
void on(PeerID node, tp when, Share< Tx > const &e) override
void on(PeerID node, tp when, SubmitTx const &e) override
void on(PeerID node, tp when, Share< Ledger > const &e) override
void on(PeerID node, tp when, Receive< Proposal > const &e) override
void on(PeerID node, tp when, Share< TxSet > const &e) override
void on(PeerID node, tp when, Receive< Ledger > const &e) override
std::unique_ptr< ICollector > impl_
void on(PeerID node, tp when, E const &e)
CollectorRef & operator=(CollectorRef &&)=default
CollectorRef(CollectorRef &&)=default
CollectorRef(CollectorRef const &c)=delete
CollectorRef & operator=(CollectorRef &c)=delete
A container of CollectorRefs.
void add(Collector &collector)
void on(PeerID node, SimTime when, E const &e)
std::vector< CollectorRef > collectors_
TaggedInteger< std::uint32_t, PeerIDTag > PeerID
Definition Validation.h:17
SimClock::time_point SimTime
Definition SimTime.h:15
Peer accepted consensus results.
Definition events.h:121
Peer closed the open ledger.
Definition events.h:109
virtual void on(PeerID node, tp when, Receive< Tx > const &)=0
virtual void on(PeerID node, tp when, Relay< TxSet > const &)=0
virtual void on(PeerID node, tp when, Share< Proposal > const &)=0
virtual void on(PeerID node, tp when, WrongPrevLedger const &)=0
virtual void on(PeerID node, tp when, Receive< Validation > const &)=0
virtual void on(PeerID node, tp when, Relay< Ledger > const &)=0
virtual void on(PeerID node, tp when, Receive< TxSet > const &)=0
virtual void on(PeerID node, tp when, Share< TxSet > const &)=0
virtual void on(PeerID node, tp when, Relay< Validation > const &)=0
virtual void on(PeerID node, tp when, Relay< Proposal > const &)=0
virtual void on(PeerID node, tp when, AcceptLedger const &)=0
virtual void on(PeerID node, tp when, CloseLedger const &)=0
virtual void on(PeerID node, tp when, Receive< Ledger > const &)=0
virtual void on(PeerID node, tp when, Relay< Tx > const &)=0
virtual void on(PeerID node, tp when, Share< Tx > const &)=0
virtual void on(PeerID node, tp when, Share< Ledger > const &)=0
virtual void on(PeerID node, tp when, StartRound const &)=0
virtual void on(PeerID node, tp when, Share< Validation > const &)=0
virtual void on(PeerID node, tp when, FullyValidateLedger const &)=0
virtual void on(PeerID node, tp when, Receive< Proposal > const &)=0
virtual void on(PeerID node, tp when, SubmitTx const &)=0
Peer fully validated a new ledger.
Definition events.h:144
A value received from another peer as part of flooding.
Definition events.h:66
A value relayed to another peer as part of flooding.
Definition events.h:49
A value to be flooded to all other peers starting from this peer.
Definition events.h:37
Peer starts a new consensus round.
Definition events.h:93
A transaction submitted to a peer.
Definition events.h:82
Peer detected a wrong prior ledger during consensus.
Definition events.h:133