20 : m_replenishInterval(replenishInterval),
21 m_maxTokens(maxTokens),
22 m_replenishRate(replenishRate),
23 m_tokens(startTokens),
27 : m_replenishInterval(replenishInterval),
28 m_maxTokens(maxTokens),
36 this->m_replenishInterval = replenishInterval;
40 this->m_maxTokens = maxTokens;
44 this->m_replenishRate = replenishRate;
48 if (this->m_tokens < this->m_maxTokens) {
49 this->m_tokens = this->m_maxTokens;
54 return this->m_replenishInterval;
58 return this->m_maxTokens;
62 return this->m_replenishRate;
66 return this->m_tokens;
71 if (this->m_replenishRate > 0) {
77 const U32 intervalSeconds = this->m_replenishInterval / 1000000;
78 const U32 intervalUSeconds = this->m_replenishInterval % 1000000;
81 nextTime.
add(intervalSeconds, intervalUSeconds);
82 while (this->m_tokens < this->m_maxTokens && nextTime <= time) {
84 this->m_tokens +=
std::min(this->m_replenishRate, this->m_maxTokens - this->m_tokens);
85 this->m_time = nextTime;
86 nextTime.
add(intervalSeconds, intervalUSeconds);
88 if (this->m_tokens >= this->m_maxTokens && this->m_time < time) {
94 if (this->m_tokens > 0) {
void setReplenishInterval(U32 replenishInterval)
U32 getReplenishRate() const
#define MAX_TOKEN_BUCKET_TOKENS
U32 getReplenishInterval() const
TokenBucket(U32 replenishInterval, U32 maxTokens, U32 replenishRate, U32 startTokens, Fw::Time startTime)
bool trigger(const Fw::Time time)
TimeBase getTimeBase() const
void setReplenishRate(U32 replenishRate)
void setMaxTokens(U32 maxTokens)
static U32 min(const U32 a, const U32 b)
static Time add(const Time &a, const Time &b)