Stride Reference Manual  1.0
Influence.h
Go to the documentation of this file.
1 #pragma once
2 
8 #include <deque>
9 #include <cmath>
10 #include <algorithm>
11 #include <string>
12 
13 using namespace std;
14 
15 namespace stride {
16 
17 using uint = unsigned int;
18 
19 class ClusterSaver;
20 
21 class Influence {
22 public:
23  Influence(uint size, double speed, double minimum) : m_deque(deque<uint>(size, 0)), m_speed(speed),
24  m_minimum(minimum) {
25  if (minimum <= 0.0) {
26  throw runtime_error(string(__func__) + string("Influence minimum <= 0.0"));
27  }
28  }
29 
30  void addRecord(uint record) {
31  m_deque.push_front(record);
32  m_deque.pop_back();
33  }
34 
35  void addToFront(uint amount) {
36  m_deque.front() = m_deque.front() + amount;
37  }
38 
39  double getInfluence() const {
40  uint score = 0;
41 
42  for (const auto& current_score: m_deque) {
43  score += current_score;
44  }
45 
46  if (score <= 1)
47  return m_minimum;
48  else
49  return max(m_speed * log10(score), m_minimum);
50  }
51 
52  uint getScore() const {
53  uint score = 0;
54 
55  for (const auto& current_score: m_deque) {
56  score += current_score;
57  }
58 
59  return score;
60  }
61 
62 private:
63  Influence();
64 
65  deque<uint> m_deque;
66  double m_speed;
67  double m_minimum;
68 
69  friend class ClusterSaver;
70 };
71 
72 }
uint getScore() const
Definition: Influence.h:52
unsigned int uint
Definition: Influence.h:17
double m_minimum
Definition: Influence.h:67
void addRecord(uint record)
Definition: Influence.h:30
Influence(uint size, double speed, double minimum)
Definition: Influence.h:23
Time Dependent Person DataType.
Definition: NoBehaviour.h:17
deque< uint > m_deque
Definition: Influence.h:65
STL namespace.
double getInfluence() const
Definition: Influence.h:39
void addToFront(uint amount)
Definition: Influence.h:35