xrpld
Loading...
Searching...
No Matches
submitters.h
1#pragma once
2
3#include <csf/Scheduler.h>
4#include <csf/SimTime.h>
5#include <csf/Tx.h>
6
7#include <cstddef>
8#include <cstdint>
9#include <type_traits>
10
11namespace xrpl::test::csf {
12
13// Submitters are classes for simulating submission of transactions to the
14// network
15
19struct Rate
20{
23
24 [[nodiscard]] double
25 inv() const
26 {
27 return duration.count() / double(count);
28 }
29};
30
49template <class Distribution, class Generator, class Selector>
51{
52 Distribution dist_;
58
59 // Convert generated durations to SimDuration
60 static SimDuration
62 {
63 return d;
64 }
65
66 template <class T>
67 static SimDuration
70 {
71 return SimDuration{static_cast<SimDuration::rep>(t)};
72 }
73
74 void
76 {
77 selector_()->submit(Tx{nextID_++});
78 if (scheduler_.now() < stop_)
79 {
80 scheduler_.in(asDuration(dist_(g_)), [&]() { submit(); });
81 }
82 }
83
84public:
86 Distribution dist,
87 SimTime start,
88 SimTime end,
89 Selector& selector,
90 Scheduler& s,
91 Generator& g)
92 : dist_{dist}, stop_{end}, selector_{selector}, scheduler_{s}, g_{g}
93 {
94 scheduler_.at(start, [&]() { submit(); });
95 }
96};
97
98template <class Distribution, class Generator, class Selector>
99Submitter<Distribution, Generator, Selector>
101 Distribution dist,
102 SimTime start,
103 SimTime end,
104 Selector& sel,
105 Scheduler& s,
106 Generator& g)
107{
108 return Submitter<Distribution, Generator, Selector>(dist, start, end, sel, s, g);
109}
110
111} // namespace xrpl::test::csf
Simulated discrete-event scheduler.
Invocable that returns random samples from a range according to a discrete distribution.
Submits transactions to a specified peer.
Definition submitters.h:51
static SimDuration asDuration(T t)
Definition submitters.h:68
Submitter(Distribution dist, SimTime start, SimTime end, Selector &selector, Scheduler &s, Generator &g)
Definition submitters.h:85
static SimDuration asDuration(SimDuration d)
Definition submitters.h:61
A single transaction.
Definition Tx.h:24
T is_arithmetic_v
Submitter< Distribution, Generator, Selector > makeSubmitter(Distribution dist, SimTime start, SimTime end, Selector &sel, Scheduler &s, Generator &g)
Definition submitters.h:100
SimClock::duration SimDuration
Definition SimTime.h:14
SimClock::time_point SimTime
Definition SimTime.h:15
Represents rate as a count/duration.
Definition submitters.h:20
SimDuration duration
Definition submitters.h:22
double inv() const
Definition submitters.h:25