4 #include "misc/tokenbucket.h"
11 : m_capacity(capacity), m_numTokensToRefill(numTokensToRefill), m_intervalMs(intervalMs)
16 Q_ASSERT(numTokens > 0 && numTokens < m_capacity);
19 if (numTokens <= m_availableTokens)
21 m_availableTokens -= numTokens;
26 const int tokens = this->getTokens(msSinceEpoch);
27 const int replenishedTokens = qMin(m_capacity, tokens);
30 m_availableTokens = qMin(m_availableTokens + replenishedTokens, m_capacity);
33 if (numTokens <= m_availableTokens)
35 m_availableTokens -= numTokens;
53 if (m_intervalMs < 1) {
return 0; }
54 return m_numTokensToRefill * 1000 / m_intervalMs;
57 int CTokenBucket::getTokens(qint64 msSinceEpoch)
59 const qint64 now = msSinceEpoch > 0 ? msSinceEpoch : QDateTime::currentMSecsSinceEpoch();
60 const qint64 deltaMs = now - m_lastReplenishmentTime;
61 const int numberOfTokens =
static_cast<int>(m_numTokensToRefill * deltaMs / m_intervalMs);
64 if (numberOfTokens > 0) { m_lastReplenishmentTime = now; }
65 return numberOfTokens;
void setCapacityAndTokensToRefill(int numTokens)
Tokens/capacity if both are same.
void setNumberOfTokensToRefill(int numTokens)
Number of tokens to refill.
CTokenBucket(int capacity, qint64 intervalMs, int numTokensToRefill)
Constructor for given replenishment policy.
bool tryConsume(int numTokens=1, qint64 msSinceEpoch=-1)
Try to consume a number of tokens.
void setCapacity(int capacity)
Set the capacity.
int getTokensPerSecond() const
Tokens per second.
Free functions in swift::misc.