00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef __libutilxx__sella__algo__TokenBucket_H__
00010 #define __libutilxx__sella__algo__TokenBucket_H__
00011
00012 #include "../../common.h"
00013
00014 #include <stdint.h>
00015
00016 #include <memory>
00017
00018 namespace sella {
00019 namespace algo {
00020 class TokenBucket;
00021 }
00022 }
00023
00024 class sella::algo::TokenBucket {
00025 public:
00026 TokenBucket(const TokenBucket & chain, double limit) throw ();
00027 TokenBucket(double limit) throw ();
00028
00029 bool sub(double value, bool blocking = false) throw ();
00030 bool add(double value) throw ();
00031
00032 private:
00033 std::shared_ptr<TokenBucket> chain;
00034
00035 uint64_t stamp;
00036
00037 double limit;
00038 double value;
00039 };
00040
00041 #endif
00042
00043
00044
00045