1 #include "hmbdc/Copyright.hpp" 4 #include "hmbdc/Exception.hpp" 5 #include "hmbdc/time/Time.hpp" 10 namespace hmbdc {
namespace time {
20 Rater(
Duration duration,
size_t times,
size_t burst,
bool enabled =
true)
21 : drop_(duration / (times?times:1ul))
22 , bucket_(drop_ * burst)
23 , currentLevel_(bucket_)
25 , enabled_(enabled?times != 0:
false)
28 bool check(
size_t n = 1u) {
29 if (!enabled_)
return true;
31 auto now = SysTime::now();
32 currentLevel_ += now - previousCheck_;
34 if (currentLevel_ > bucket_) currentLevel_ = bucket_;
35 return currentLevel_ >= drop_ * n;
39 currentLevel_ -= drop_ * n_;