21 #include <type_traits> 33 template <
typename ReturnType>
38 const long double countf =
count;
39 return static_cast<ReturnType
>(sum / countf);
44 template <
typename ReturnType,
typename ValueType>
45 typename std::enable_if<
52 const double sumf = double(sum);
53 const double countf = double(count);
54 return static_cast<ReturnType
>(sumf / countf);
62 typename ReturnType = double,
63 typename Duration = std::chrono::seconds,
64 typename Interval = Duration>
76 typedef std::chrono::duration<
78 std::ratio<Duration::period::den, Duration::period::num>>
80 typedef std::chrono::duration<
82 std::ratio<Interval::period::den, Interval::period::num>>
85 NativeRate native(count / elapsed.count());
86 DesiredRate desired = std::chrono::duration_cast<DesiredRate>(native);
87 return desired.count();
120 template <
typename ReturnType>
122 return avgHelper<ReturnType>(
sum,
count);
std::atomic< int64_t > sum(0)
ReturnType avgHelper(long double sum, uint64_t count)
—— Concurrent Priority Queue Implementation ——
std::chrono::milliseconds Duration
Bucket & operator-=(const Bucket &o)
void add(const ValueType &s, uint64_t c)
Bucket & operator+=(const Bucket &o)
ReturnType rateHelper(ReturnType count, Duration elapsed)
uint64_t value(const typename LockFreeRingBuffer< T, Atom >::Cursor &rbcursor)