19 : m_replenishInterval(replenishInterval),
20 m_maxTokens(maxTokens),
21 m_replenishRate(replenishRate),
22 m_tokens(startTokens),
26 : m_replenishInterval(replenishInterval),
27 m_maxTokens(maxTokens),
35 this->m_replenishInterval = replenishInterval;
39 this->m_maxTokens = maxTokens;
43 this->m_replenishRate = replenishRate;
47 if (this->m_tokens < this->m_maxTokens) {
48 this->m_tokens = this->m_maxTokens;
53 return this->m_replenishInterval;
57 return this->m_maxTokens;
61 return this->m_replenishRate;
65 return this->m_tokens;
70 if (this->m_replenishRate > 0) {
71 Fw::Time replenishInterval =
Fw::Time(this->m_replenishInterval / 1000000, this->m_replenishInterval % 1000000);
73 while (this->m_tokens < this->m_maxTokens && nextTime <= time) {
75 this->m_tokens +=
FW_MIN(this->m_replenishRate, this->m_maxTokens - this->m_tokens);
76 this->m_time = nextTime;
79 if (this->m_tokens >= this->m_maxTokens && this->m_time < time) {
85 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)
#define FW_MIN(a, b)
MIN macro.
static Time add(const Time &a, const Time &b)