![]() |
Bitcoin Core 31.99.0
P2P Digital Currency
|
A token bucket rate limiter. More...
#include <tokenbucket.h>
Public Types | |
| using | clock = Clock |
| using | time_point = typename Clock::time_point |
| using | duration = typename Clock::duration |
Public Member Functions | |
| TokenBucket (double rate, double value, double cap) | |
| void | increment (const time_point &now) |
| Refill tokens based on elapsed time since last call. More... | |
| bool | decrement (double n=1.0, double floor=0.0) |
| Consume n tokens. More... | |
| double | value () const |
| Current token balance. More... | |
Public Attributes | |
| const double | m_rate {1} |
| Tokens added per second. More... | |
| const double | m_cap {0} |
| Maximum token balance. More... | |
Private Attributes | |
| time_point | m_last_updated {MIN_TIME} |
| double | m_value {0} |
Static Private Attributes | |
| static constexpr time_point | MIN_TIME {time_point::min()} |
A token bucket rate limiter.
Tokens are added at a steady rate (m_rate per second) up to a capacity cap (m_cap). Tokens are removed by calling decrement(), which returns false if the bucket is emptied.
Typical usage: bucket.increment(now); // refill based on elapsed time if (bucket.value() >= 1) bucket.decrement(1); // consume a token
Definition at line 23 of file tokenbucket.h.
| using util::TokenBucket< Clock >::clock = Clock |
Definition at line 26 of file tokenbucket.h.
| using util::TokenBucket< Clock >::duration = typename Clock::duration |
Definition at line 28 of file tokenbucket.h.
| using util::TokenBucket< Clock >::time_point = typename Clock::time_point |
Definition at line 27 of file tokenbucket.h.
|
inline |
| rate | Tokens added per second. |
| value | Initial token balance (clamped to cap). |
| cap | Maximum token balance. |
Definition at line 36 of file tokenbucket.h.
|
inline |
Consume n tokens.
Returns false if the balance dropped to/below the given floor.
Definition at line 52 of file tokenbucket.h.
|
inline |
Refill tokens based on elapsed time since last call.
No refill occurs on the first call (establishes the time baseline).
Definition at line 40 of file tokenbucket.h.
|
inline |
Current token balance.
Definition at line 59 of file tokenbucket.h.
| const double util::TokenBucket< Clock >::m_cap {0} |
Maximum token balance.
Definition at line 31 of file tokenbucket.h.
|
private |
Definition at line 63 of file tokenbucket.h.
| const double util::TokenBucket< Clock >::m_rate {1} |
Tokens added per second.
Definition at line 30 of file tokenbucket.h.
|
private |
Definition at line 64 of file tokenbucket.h.
|
staticconstexprprivate |
Definition at line 62 of file tokenbucket.h.