1 // Copyright (c) 2014 The Bitcoin developers
2 // Distributed under the MIT/X11 software license, see the accompanying
3 // file COPYING or http://www.opensource.org/licenses/mit-license.php.
5 #ifndef NOVACOIN_TIMEDATA_H
6 #define NOVACOIN_TIMEDATA_H
14 /** Median filter over a stream of values.
15 * Returns the median of the last N numbers
17 template <typename T> class CMedianFilter
20 std::vector<T> vValues;
21 std::vector<T> vSorted;
24 CMedianFilter(unsigned int size, T initial_value):
27 vValues.reserve(size);
28 vValues.push_back(initial_value);
34 if(vValues.size() == nSize)
36 vValues.erase(vValues.begin());
38 vValues.push_back(value);
40 vSorted.resize(vValues.size());
41 std::copy(vValues.begin(), vValues.end(), vSorted.begin());
42 std::sort(vSorted.begin(), vSorted.end());
47 size_t size = vSorted.size();
49 if(size & 1) // Odd number of elements
51 return vSorted[size/2];
53 else // Even number of elements
55 return (vSorted[size/2-1] + vSorted[size/2]) / 2;
61 return static_cast<int>(vValues.size());
64 std::vector<T> sorted () const
70 // Functions to keep track of adjusted P2P time
71 int64_t GetAdjustedTime();
72 int64_t GetTimeOffset();
73 int64_t GetNodesOffset();
74 void AddTimeData(const CNetAddr& ip, int64_t nTime);
76 #endif // NOVACOIN_TIMEDATA_H