/* * This file Copyright (C) 2010-2014 Mnemosyne LLC * * It may be used under the GNU GPL versions 2 or 3 * or any future license endorsed by Mnemosyne LLC. * */ #pragma once #ifndef __TRANSMISSION__ #error only libtransmission should #include this header. #endif /** * A generic short-term memory object that remembers how many times * something happened over the last N seconds. * * For example, it could count how many are bytes transferred * to estimate the speed over the last N seconds. */ enum { TR_RECENT_HISTORY_PERIOD_SEC = 60 }; typedef struct tr_recentHistory { /* these are PRIVATE IMPLEMENTATION details included for composition only. * Don't access these directly! */ int newest; struct { unsigned int n; time_t date; } slices[TR_RECENT_HISTORY_PERIOD_SEC]; } tr_recentHistory; /** * @brief add a counter to the recent history object. * @param when the current time in sec, such as from tr_time() * @param n how many items to add to the history's counter */ void tr_historyAdd(tr_recentHistory*, time_t when, unsigned int n); /** * @brief count how many events have occurred in the last N seconds. * @param when the current time in sec, such as from tr_time() * @param seconds how many seconds to count back through. */ unsigned int tr_historyGet(tr_recentHistory const*, time_t when, unsigned int seconds);