Bitcoin Core 31.99.0
P2P Digital Currency
Public Types | Public Member Functions | Public Attributes | Private Attributes | Static Private Attributes | List of all members
util::TokenBucket< Clock > Class Template Reference

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()}
 

Detailed Description

template<typename Clock>
class util::TokenBucket< Clock >

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.

Member Typedef Documentation

◆ clock

template<typename Clock >
using util::TokenBucket< Clock >::clock = Clock

Definition at line 26 of file tokenbucket.h.

◆ duration

template<typename Clock >
using util::TokenBucket< Clock >::duration = typename Clock::duration

Definition at line 28 of file tokenbucket.h.

◆ time_point

template<typename Clock >
using util::TokenBucket< Clock >::time_point = typename Clock::time_point

Definition at line 27 of file tokenbucket.h.

Constructor & Destructor Documentation

◆ TokenBucket()

template<typename Clock >
util::TokenBucket< Clock >::TokenBucket ( double  rate,
double  value,
double  cap 
)
inline
Parameters
rateTokens added per second.
valueInitial token balance (clamped to cap).
capMaximum token balance.

Definition at line 36 of file tokenbucket.h.

Member Function Documentation

◆ decrement()

template<typename Clock >
bool util::TokenBucket< Clock >::decrement ( double  n = 1.0,
double  floor = 0.0 
)
inline

Consume n tokens.

Returns false if the balance dropped to/below the given floor.

Definition at line 52 of file tokenbucket.h.

Here is the caller graph for this function:

◆ increment()

template<typename Clock >
void util::TokenBucket< Clock >::increment ( const time_point now)
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.

Here is the caller graph for this function:

◆ value()

template<typename Clock >
double util::TokenBucket< Clock >::value ( ) const
inline

Current token balance.

Definition at line 59 of file tokenbucket.h.

Here is the caller graph for this function:

Member Data Documentation

◆ m_cap

template<typename Clock >
const double util::TokenBucket< Clock >::m_cap {0}

Maximum token balance.

Definition at line 31 of file tokenbucket.h.

◆ m_last_updated

template<typename Clock >
time_point util::TokenBucket< Clock >::m_last_updated {MIN_TIME}
private

Definition at line 63 of file tokenbucket.h.

◆ m_rate

template<typename Clock >
const double util::TokenBucket< Clock >::m_rate {1}

Tokens added per second.

Definition at line 30 of file tokenbucket.h.

◆ m_value

template<typename Clock >
double util::TokenBucket< Clock >::m_value {0}
private

Definition at line 64 of file tokenbucket.h.

◆ MIN_TIME

template<typename Clock >
constexpr time_point util::TokenBucket< Clock >::MIN_TIME {time_point::min()}
staticconstexprprivate

Definition at line 62 of file tokenbucket.h.


The documentation for this class was generated from the following file: