Dash Core  0.12.2.1
P2P Digital Currency
timedata.h
Go to the documentation of this file.
1 // Copyright (c) 2014 The Bitcoin Core developers
2 // Distributed under the MIT software license, see the accompanying
3 // file COPYING or http://www.opensource.org/licenses/mit-license.php.
4 
5 #ifndef BITCOIN_TIMEDATA_H
6 #define BITCOIN_TIMEDATA_H
7 
8 #include <algorithm>
9 #include <assert.h>
10 #include <stdint.h>
11 #include <vector>
12 
13 class CNetAddr;
14 
19 template <typename T>
21 {
22 private:
23  std::vector<T> vValues;
24  std::vector<T> vSorted;
25  unsigned int nSize;
26 
27 public:
28  CMedianFilter(unsigned int size, T initial_value) : nSize(size)
29  {
30  vValues.reserve(size);
31  vValues.push_back(initial_value);
32  vSorted = vValues;
33  }
34 
35  void input(T value)
36  {
37  if (vValues.size() == nSize) {
38  vValues.erase(vValues.begin());
39  }
40  vValues.push_back(value);
41 
42  vSorted.resize(vValues.size());
43  std::copy(vValues.begin(), vValues.end(), vSorted.begin());
44  std::sort(vSorted.begin(), vSorted.end());
45  }
46 
47  T median() const
48  {
49  int size = vSorted.size();
50  assert(size > 0);
51  if (size & 1) // Odd number of elements
52  {
53  return vSorted[size / 2];
54  } else // Even number of elements
55  {
56  return (vSorted[size / 2 - 1] + vSorted[size / 2]) / 2;
57  }
58  }
59 
60  int size() const
61  {
62  return vValues.size();
63  }
64 
65  std::vector<T> sorted() const
66  {
67  return vSorted;
68  }
69 };
70 
72 int64_t GetTimeOffset();
73 int64_t GetAdjustedTime();
74 void AddTimeData(const CNetAddr& ip, int64_t nTime);
75 
76 #endif // BITCOIN_TIMEDATA_H
void AddTimeData(const CNetAddr &ip, int64_t nTime)
Definition: timedata.cpp:45
int size() const
Definition: timedata.h:60
T median() const
Definition: timedata.h:47
CMedianFilter(unsigned int size, T initial_value)
Definition: timedata.h:28
void input(T value)
Definition: timedata.h:35
unsigned int nSize
Definition: timedata.h:25
int64_t GetTimeOffset()
Definition: timedata.cpp:27
int64_t GetAdjustedTime()
Definition: timedata.cpp:33
std::vector< T > sorted() const
Definition: timedata.h:65
std::vector< T > vSorted
Definition: timedata.h:24
std::vector< T > vValues
Definition: timedata.h:23