1
0
Fork 0
mirror of https://github.com/transmission/transmission synced 2024-12-27 01:57:52 +00:00
transmission/libtransmission/history.h
Jordan Lee f2b4a59eda (trunk libT) #4051 "Use composition for the tr_history fields in tr_peer" -- fixed.
If we use composition on these objects we can save a handful of pointers per peer. This isn't a big deal, but it's an easy/safe change to do.
2011-02-23 06:01:16 +00:00

69 lines
2.1 KiB
C

/*
* This file Copyright (C) Mnemosyne LLC
*
* This file is licensed by the GPL version 2. Works owned by the
* Transmission project are granted a special exemption to clause 2(b)
* so that the bulk of its code can remain under the MIT license.
* This exemption does not extend to derived works not owned by
* the Transmission project.
*
* $Id$
*/
#ifndef __TRANSMISSION__
#error only libtransmission should #include this header.
#endif
#ifndef TR_RECENT_HISTORY_H
#define TR_RECENT_HISTORY_H
/**
* 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.
*/
struct tr_history_slice
{
unsigned int n;
time_t date;
};
typedef struct tr_recentHistory
{
/* these are PRIVATE IMPLEMENTATION details included for composition only.
* Don't access these directly! */
int newest;
int sliceCount;
unsigned int precision;
struct tr_history_slice * slices;
}
tr_recentHistory;
/**
* @brief construct a new tr_recentHistory object
* @param seconds how many seconds of history this object should remember
* @param precision how precise the history should be, in seconds
* For a precision of 10 seconds and a history of 2 minutes, makes 12 bins.
*/
void tr_historyConstruct( tr_recentHistory *, unsigned int seconds, unsigned int precision );
/** @brief destruct an existing tr_recentHistory object. */
void tr_historyDestruct( 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( const tr_recentHistory *, time_t when, unsigned int seconds );
#endif