-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathRingBuffer.h
More file actions
117 lines (104 loc) · 2.2 KB
/
Copy pathRingBuffer.h
File metadata and controls
117 lines (104 loc) · 2.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
/**
* @file RingBuffer.h
*
* Declaration of class RingBuffer
*
* @author Max Risler
*/
#pragma once
/**
* @class RingBuffer
*
* template class for cyclic buffering of the last n values of Type V
*/
template <class V, int n> class RingBuffer
{
public:
/** Constructor */
RingBuffer() {init();}
/**
* initializes the Ringbuffer
*/
inline void init() {current = n - 1; numberOfEntries = 0;}
/**
* adds an entry to the buffer
* \param v value to be added
*/
inline void add(const V& v)
{
add();
buffer[current] = v;
}
/**
* adds an entry to the buffer.
* The new head is not initialized, but can be changed afterwards.
*/
inline void add()
{
current++;
current %= n;
if(++numberOfEntries >= n) numberOfEntries = n;
}
/**
* removes the first added entry to the buffer
*/
inline void removeFirst()
{
--numberOfEntries;
}
/**
* returns an entry
* \param i index of entry counting from last added (last=0,...)
* \return a reference to the buffer entry
*/
inline V& getEntry(int i)
{
return buffer[(n + current - i) % n];
}
/**
* returns an const entry
* \param i index of entry counting from last added (last=0,...)
* \return a reference to the buffer entry
*/
inline const V& getEntry(int i) const
{
return buffer[(n + current - i) % n];
}
/**
* returns an entry
* \param i index of entry counting from last added (last=0,...)
* \return a reference to the buffer entry
*/
inline V& operator[](int i)
{
return buffer[(n + current - i) % n];
}
/**
* returns a constant entry.
* \param i index of entry counting from last added (last=0,...)
* \return a reference to the buffer entry
*/
inline const V& operator[](int i) const
{
return buffer[(n + current - i) % n];
}
/** Returns the number of elements that are currently in the ring buffer
* \return The number
*/
inline int getNumberOfEntries() const
{
return numberOfEntries;
}
/**
* Returns the maximum entry count.
* \return The maximum entry count.
*/
inline int getMaxEntries() const
{
return n;
}
private:
int current;
int numberOfEntries;
V buffer[n];
};