8#ifndef INCLUDED_BALB_LEAKYBUCKET
9#define INCLUDED_BALB_LEAKYBUCKET
365#include <balscm_version.h>
371#include <bsl_climits.h>
674 if (numUnits > d_unitsReserved) {
678 d_unitsReserved -= numUnits;
691 d_unitsInBucket <= ULLONG_MAX - d_unitsReserved - numUnits);
693 d_unitsReserved += numUnits;
701 d_lastUpdateTime = currentTime;
710 d_statisticsCollectionStartTime = d_lastUpdateTime;
711 d_statSubmittedUnits = 0;
712 d_statSubmittedUnitsAtLastUpdate = 0;
724 d_unitsReserved <= ULLONG_MAX - d_unitsInBucket - numUnits);
726 d_unitsInBucket += numUnits;
727 d_statSubmittedUnits += numUnits;
735 d_unitsReserved -= numUnits;
756 return d_lastUpdateTime;
762 return d_statisticsCollectionStartTime;
768 return d_unitsInBucket;
774 return d_unitsReserved;
Definition balb_leakybucket.h:421
void submitReserved(bsls::Types::Uint64 numUnits)
Definition balb_leakybucket.h:731
~LeakyBucket()
Destroy this object.
Definition balb_leakybucket.h:662
bsls::Types::Uint64 unitsInBucket() const
Return the number of submitted units in this leaky bucket.
Definition balb_leakybucket.h:766
void submit(bsls::Types::Uint64 numUnits)
Definition balb_leakybucket.h:716
void setRateAndCapacity(bsls::Types::Uint64 newRate, bsls::Types::Uint64 newCapacity)
void reserve(bsls::Types::Uint64 numUnits)
Definition balb_leakybucket.h:683
LeakyBucket(bsls::Types::Uint64 drainRate, bsls::Types::Uint64 capacity, const bsls::TimeInterval ¤tTime)
bsls::TimeInterval lastUpdateTime() const
Return the time interval when this leaky bucket was last updated.
Definition balb_leakybucket.h:754
static bsls::Types::Uint64 calculateCapacity(bsls::Types::Uint64 drainRate, const bsls::TimeInterval &timeWindow)
void reset(const bsls::TimeInterval ¤tTime)
Definition balb_leakybucket.h:697
void getStatistics(bsls::Types::Uint64 *submittedUnits, bsls::Types::Uint64 *unusedUnits) const
bool wouldOverflow(const bsls::TimeInterval ¤tTime)
bsls::TimeInterval statisticsCollectionStartTime() const
Definition balb_leakybucket.h:760
void updateState(const bsls::TimeInterval ¤tTime)
bsls::TimeInterval calculateTimeToSubmit(const bsls::TimeInterval ¤tTime)
static bsls::TimeInterval calculateTimeWindow(bsls::Types::Uint64 drainRate, bsls::Types::Uint64 capacity)
bsls::Types::Uint64 unitsReserved() const
Return the number of reserved units in this leaky bucket.
Definition balb_leakybucket.h:772
bsls::Types::Uint64 drainRate() const
Return the drain rate of this leaky bucket.
Definition balb_leakybucket.h:748
bsls::Types::Uint64 capacity() const
Return the capacity of this leaky bucket.
Definition balb_leakybucket.h:742
void cancelReserved(bsls::Types::Uint64 numUnits)
Definition balb_leakybucket.h:670
static bsls::TimeInterval calculateDrainTime(bsls::Types::Uint64 numUnits, bsls::Types::Uint64 drainRate, bool ceilFlag)
void resetStatistics()
Definition balb_leakybucket.h:708
Definition bsls_timeinterval.h:307
BSLS_KEYWORD_CONSTEXPR bsls::Types::Int64 seconds() const
Definition bsls_timeinterval.h:1429
#define BSLS_ASSERT_SAFE(X)
Definition bsls_assert.h:1917
#define BSLS_IDENT(str)
BSLS_IDENT() - insert string into .comment binary segment (if supported)
Definition bsls_ident.h:238
Definition balb_controlmanager.h:144
unsigned long long Uint64
Definition bsls_types.h:139