diff options
author | dakkar <dakkar@thenautilus.net> | 2016-08-05 10:52:49 +0100 |
---|---|---|
committer | dakkar <dakkar@thenautilus.net> | 2016-08-05 10:52:49 +0100 |
commit | 12186dd1104eba82c45edde100754cc9622b1447 (patch) | |
tree | 1d9b9cf41cda904655e34fb8cd6a93d80f477324 | |
parent | now we even get a proper status! (diff) | |
download | keepon-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.ino | 15 |
1 files changed, 7 insertions, 8 deletions
@@ -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; } }; |