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) {
72 Fw::Time replenishInterval =
Fw::Time(this->m_replenishInterval / 1000000, this->m_replenishInterval % 1000000);
74 while (this->m_tokens < this->m_maxTokens && nextTime <= time) {
76 this->m_tokens +=
std::min(this->m_replenishRate, this->m_maxTokens - this->m_tokens);
77 this->m_time = nextTime;
80 if (this->m_tokens >= this->m_maxTokens && this->m_time < time) {
86 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)
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)