/* vim: set expandtab ts=4 sw=4: */
/*
* You may redistribute this program and/or modify it under the terms of
* the GNU General Public License as published by the Free Software Foundation,
* either version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
#ifndef AverageRoller_pvt_H
#define AverageRoller_pvt_H
#include "util/AverageRoller.h"
#include "util/events/EventBase.h"
#include "util/Linker.h"
Linker_require("util/AverageRoller.c")
/** Used to represent the sum and entry count for a given second. */
struct AverageRoller_SumAndEntryCount
{
/** Sum of all entries. */
uint32_t sum;
/** Number of entries. */
uint32_t entryCount;
};
/**
* A structure for helping calculate a rolling average over some number of seconds.
* Each element in "seconds" array is responsable for 1 second and it is a circular array.
*/
struct AverageRoller_pvt
{
struct AverageRoller pub;
/** The average will be calculated over this number of seconds. */
const uint32_t windowSeconds;
/** The number of seconds since the epoch when the average was last updated. */
uint32_t lastUpdateTime;
/** The index of the array when the roller was last updated. */
uint32_t lastUpdateIndex;
/** The sum of every entry in the last windowSeconds seconds. */
uint32_t sum;
/** The total number of entries in the last windowSeconds seconds. */
uint32_t entryCount;
/** A stored value equal to the sum divided by the entry count. */
uint32_t average;
/** Means of getting the current time. */
EventBase_t* eventBase;
Identity
/**
* An array of entries containing sum and entry count for each second
* in the seconds prior to the last update.
* This array pretends to contain one entry but actually contans windowSeconds entries.
*/
struct AverageRoller_SumAndEntryCount seconds[1];
};
#endif