rippled
Loading...
Searching...
No Matches
QualityFunction.cpp
1#include <xrpl/basics/Number.h>
2#include <xrpl/basics/contract.h>
3#include <xrpl/beast/utility/Zero.h>
4#include <xrpl/protocol/Quality.h>
5#include <xrpl/protocol/QualityFunction.h>
6
7#include <optional>
8#include <stdexcept>
9
10namespace ripple {
11
13 Quality const& quality,
15 : m_(0), b_(0), quality_(quality)
16{
17 if (quality.rate() <= beast::zero)
18 Throw<std::runtime_error>("QualityFunction quality rate is 0.");
19 b_ = 1 / quality.rate();
20}
21
22void
24{
25 m_ += b_ * qf.m_;
26 b_ *= qf.b_;
27 if (m_ != 0)
29}
30
32QualityFunction::outFromAvgQ(Quality const& quality)
33{
34 if (m_ != 0 && quality.rate() != beast::zero)
35 {
37 auto const out = (1 / quality.rate() - b_) / m_;
38 if (out <= 0)
39 return std::nullopt;
40 return out;
41 }
42 return std::nullopt;
43}
44
45} // namespace ripple
static rounding_mode setround(rounding_mode mode)
Definition Number.cpp:34
Average quality of a path as a function of out: q(out) = m * out + b, where m = -1 / poolGets,...
QualityFunction(Quality const &quality, CLOBLikeTag)
void combine(QualityFunction const &qf)
Combines QF with the next step QF.
std::optional< Number > outFromAvgQ(Quality const &quality)
Find output to produce the requested average quality.
std::optional< Quality > const & quality() const
std::optional< Quality > quality_
T is_same_v
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition algorithm.h:6