#include "myirc/ratelimit.hpp" #include namespace myirc { using namespace std::literals; using ms = std::chrono::milliseconds; auto Rfc1459RateLimit::query(size_t want_to_send) -> std::pair { const auto now = clock::now(); if (horizon_ < now) horizon_ = now; auto gap = std::chrono::floor(now + allowance_ - horizon_); auto send = gap / cost_; if (std::cmp_greater(send, want_to_send)) send = want_to_send; if (send > 0) { horizon_ += send * cost_; return {0ms, send}; } else { horizon_ += cost_; return {cost_ - gap, 1}; } } } // namespace myirc