-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcircular_buffer.h
More file actions
66 lines (54 loc) · 1.21 KB
/
Copy pathcircular_buffer.h
File metadata and controls
66 lines (54 loc) · 1.21 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
//edited in stepperController branch
#ifndef CIRCULARBUFFER_H
#define CIRCULARBUFFER_H
#include <Arduino.h>
template <typename T, size_t Size>
class CircularBuffer {
public:
CircularBuffer() : head(0), tail(0), count(0) {}
bool isFull() const {
return count == Size;
}
bool isEmpty() const {
return count == 0;
}
size_t size() const {
return count;
}
bool push(const T& item) {
if (isFull()) {
return false; // Buffer is full, cannot push
}
buffer[head] = item;
head = (head + 1) % Size;
count++;
return true;
}
bool pop(T& item) {
if (isEmpty()) {
return false; // Buffer is empty, cannot pop
}
item = buffer[tail];
tail = (tail + 1) % Size;
count--;
return true;
}
bool peek(T& item) const {
if (isEmpty()) {
return false; // Buffer is empty, cannot peek
}
item = buffer[tail];
return true;
}
void clear() {
head = 0;
tail = 0;
count = 0;
}
private:
T buffer[Size];
size_t head;
size_t tail;
size_t count;
};
#endif // CIRCULARBUFFER_H