This repository has been archived on 2020-04-08. You can view files and clone it, but cannot push or open issues or pull requests.
Files
Indoor/data/HistoryTS.h
kazu d40032ca74 interface changes
added new data-strcutures for new sensors
new helper methods
fixed some issues
2017-05-24 09:23:27 +02:00

69 lines
1.1 KiB
C++
Executable File

#ifndef HISTORYTS_H
#define HISTORYTS_H
#include <vector>
#include "Timestamp.h"
#include <algorithm>
/**
* keep the history of values for a given amount of time
*/
template <typename T> class HistoryTS {
private:
/** timestamp -> value combination */
struct Entry {
Timestamp ts;
T value;
Entry(const Timestamp ts, const T& value) : ts(ts), value(value) {;}
};
/** the time-window to keep */
Timestamp window;
/** the value history for the window-size */
std::vector<Entry> history;
public:
/** ctor with the time-window to keep */
HistoryTS(const Timestamp window) : window(window) {
}
/** add a new entry */
void add(const Timestamp ts, const T& data) {
// append to history
history.push_back(Entry(ts, data));
// remove too-old history entries
const Timestamp oldest = ts - window;
while(history.front().ts < oldest) {
// remove from history
history.erase(history.begin());
}
}
/** get the most recent entry */
T getMostRecent() const {
return history.back().value;
}
/** get the oldest entry available */
T getOldest() const {
return history.front().value;
}
};
#endif // HISTORYTS_H