summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordakkar <dakkar@thenautilus.net>2016-08-05 10:52:49 +0100
committerdakkar <dakkar@thenautilus.net>2016-08-05 10:52:49 +0100
commit12186dd1104eba82c45edde100754cc9622b1447 (patch)
tree1d9b9cf41cda904655e34fb8cd6a93d80f477324
parentnow we even get a proper status! (diff)
downloadkeepon-eeg-12186dd1104eba82c45edde100754cc9622b1447.tar.gz
keepon-eeg-12186dd1104eba82c45edde100754cc9622b1447.tar.bz2
keepon-eeg-12186dd1104eba82c45edde100754cc9622b1447.zip
nicer queue implementation
head+length, not head+tail!
-rw-r--r--eeg.ino15
1 files changed, 7 insertions, 8 deletions
diff --git a/eeg.ino b/eeg.ino
index a7b928a..b228bf6 100644
--- a/eeg.ino
+++ b/eeg.ino
@@ -6,34 +6,33 @@
template <class E, int Len=10> class Queue {
private:
E queue[Len];
- byte qHead,qTail;
+ byte qHead,qLen;
public:
- Queue() : qHead(0), qTail(0) { }
+ Queue() : qHead(0), qLen(0) { }
bool empty() {
return length()==0;
}
bool full() {
- return length()==Len-1;
+ return length()==Len;
}
int length() {
- return (qTail+Len-qHead)%Len;
+ return qLen;
}
E* current() {
return &queue[qHead];
}
void remove() {
if (empty()) return;
- qHead++;
+ ++qHead;--qLen;
qHead %= Len;
}
void add(const E &value) {
if (full()) return;
- queue[qTail] = value;
+ queue[(qHead+qLen)%Len] = value;
- qTail++;
- qTail %= Len;
+ ++qLen;
}
};