![]() |
Bitcoin Core 29.99.0
P2P Digital Currency
|
Data structure storing a fee and size, ordered by increasing fee/size. More...
#include <feefrac.h>
Public Member Functions | |
constexpr | FeeFrac () noexcept |
Construct an IsEmpty() FeeFrac. More... | |
constexpr | FeeFrac (int64_t f, int32_t s) noexcept |
Construct a FeeFrac with specified fee and size. More... | |
constexpr | FeeFrac (const FeeFrac &) noexcept=default |
constexpr FeeFrac & | operator= (const FeeFrac &) noexcept=default |
bool | IsEmpty () const noexcept |
Check if this is empty (size and fee are 0). More... | |
void | operator+= (const FeeFrac &other) noexcept |
Add fee and size of another FeeFrac to this one. More... | |
void | operator-= (const FeeFrac &other) noexcept |
Subtract fee and size of another FeeFrac from this one. More... | |
template<bool RoundDown> | |
int64_t | EvaluateFee (int32_t at_size) const noexcept |
Compute the fee for a given size at_size using this object's feerate. More... | |
int64_t | EvaluateFeeDown (int32_t at_size) const noexcept |
Compute the fee for a given size at_size using this object's feerate, rounding down. More... | |
int64_t | EvaluateFeeUp (int32_t at_size) const noexcept |
Compute the fee for a given size at_size using this object's feerate, rounding up. More... | |
Static Public Member Functions | |
static std::pair< int64_t, uint32_t > | MulFallback (int64_t a, int32_t b) noexcept |
Helper function for 32*64 signed multiplication, returning an unspecified but totally ordered type. More... | |
static int64_t | DivFallback (std::pair< int64_t, uint32_t > n, int32_t d, bool round_down) noexcept |
Helper function for 96/32 signed division, rounding towards negative infinity (if round_down) or positive infinity (if !round_down). More... | |
Public Attributes | |
int64_t | fee |
int32_t | size |
Static Public Attributes | |
static constexpr auto | Mul = MulFallback |
static constexpr auto | Div = DivFallback |
Friends | |
FeeFrac | operator+ (const FeeFrac &a, const FeeFrac &b) noexcept |
Sum fee and size. More... | |
FeeFrac | operator- (const FeeFrac &a, const FeeFrac &b) noexcept |
Subtract both fee and size. More... | |
bool | operator== (const FeeFrac &a, const FeeFrac &b) noexcept |
Check if two FeeFrac objects are equal (both same fee and same size). More... | |
std::weak_ordering | FeeRateCompare (const FeeFrac &a, const FeeFrac &b) noexcept |
Compare two FeeFracs just by feerate. More... | |
bool | operator<< (const FeeFrac &a, const FeeFrac &b) noexcept |
Check if a FeeFrac object has strictly lower feerate than another. More... | |
bool | operator>> (const FeeFrac &a, const FeeFrac &b) noexcept |
Check if a FeeFrac object has strictly higher feerate than another. More... | |
std::strong_ordering | operator<=> (const FeeFrac &a, const FeeFrac &b) noexcept |
Compare two FeeFracs. More... | |
void | swap (FeeFrac &a, FeeFrac &b) noexcept |
Swap two FeeFracs. More... | |
Data structure storing a fee and size, ordered by increasing fee/size.
The size of a FeeFrac cannot be zero unless the fee is also zero.
FeeFracs have a total ordering, first by increasing feerate (ratio of fee over size), and then by decreasing size. The empty FeeFrac (fee and size both 0) sorts last. So for example, the following FeeFracs are in sorted order:
A FeeFrac is considered "better" if it sorts after another, by this ordering. All standard comparison operators (<=>, ==, !=, >, <, >=, <=) respect this ordering.
The FeeRateCompare, and >> and << operators only compare feerate and treat equal feerate but different size as equivalent. The empty FeeFrac is neither lower or higher in feerate than any other.
|
inlineconstexprnoexcept |
|
inlineconstexprnoexcept |
|
inlineconstexprdefaultnoexcept |
|
inlinestaticnoexcept |
Helper function for 96/32 signed division, rounding towards negative infinity (if round_down) or positive infinity (if !round_down).
This is a fallback version, separate so that it can be tested on platforms where it isn't actually needed.
The exact behavior with negative n does not really matter, but this implementation chooses to be consistent for testability reasons.
The result must fit in an int64_t, and d must be strictly positive.
Definition at line 58 of file feefrac.h.
|
inlinenoexcept |
Compute the fee for a given size at_size
using this object's feerate.
This effectively corresponds to evaluating (this->fee * at_size) / this->size, with the result rounded towards negative infinity (if RoundDown) or towards positive infinity (if !RoundDown).
Requires this->size > 0, at_size >= 0, and that the correct result fits in a int64_t. This is guaranteed to be the case when 0 <= at_size <= this->size.
|
inlinenoexcept |
|
inlinenoexcept |
|
inlinenoexcept |
|
inlinestaticnoexcept |
|
inlinenoexcept |
|
inlinenoexcept |
|
staticconstexpr |
|
staticconstexpr |