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
12QualityFunction::QualityFunction(Quality const& quality, QualityFunction::CLOBLikeTag) : m_(0), b_(0), quality_(quality)
13{
14 if (quality.rate() <= beast::zero)
15 Throw<std::runtime_error>("QualityFunction quality rate is 0.");
16 b_ = 1 / quality.rate();
17}
18
19void
21{
22 m_ += b_ * qf.m_;
23 b_ *= qf.b_;
24 if (m_ != 0)
26}
27
29QualityFunction::outFromAvgQ(Quality const& quality)
30{
31 if (m_ != 0 && quality.rate() != beast::zero)
32 {
34 auto const out = (1 / quality.rate() - b_) / m_;
35 if (out <= 0)
36 return std::nullopt;
37 return out;
38 }
39 return std::nullopt;
40}
41
42} // 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:6