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 xrpl {
11
13 : m_(0), b_(0), quality_(quality)
14{
15 if (quality.rate() <= beast::zero)
16 Throw<std::runtime_error>("QualityFunction quality rate is 0.");
17 b_ = 1 / quality.rate();
18}
19
20void
22{
23 m_ += b_ * qf.m_;
24 b_ *= qf.b_;
25 if (m_ != 0)
27}
28
30QualityFunction::outFromAvgQ(Quality const& quality)
31{
32 if (m_ != 0 && quality.rate() != beast::zero)
33 {
35 auto const out = (1 / quality.rate() - b_) / m_;
36 if (out <= 0)
37 return std::nullopt;
38 return out;
39 }
40 return std::nullopt;
41}
42
43} // namespace xrpl
static rounding_mode setround(rounding_mode mode)
Definition Number.cpp:39
Average quality of a path as a function of out: q(out) = m * out + b, where m = -1 / poolGets,...
std::optional< Quality > const & quality() const
QualityFunction(Quality const &quality, CLOBLikeTag)
void combine(QualityFunction const &qf)
Combines QF with the next step QF.
std::optional< Quality > quality_
std::optional< Number > outFromAvgQ(Quality const &quality)
Find output to produce the requested average quality.
T is_same_v
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition algorithm.h:5