XBee API mode library

Committer:
yamaguch
Date:
Tue Jan 29 13:46:41 2013 +0000
Revision:
8:776b8dc51932
Child:
9:850306f22153
rtos support

Who changed what in which revision?

UserRevisionLine numberNew contents of line
yamaguch 8:776b8dc51932 1 #ifndef RING_BUFFER_H
yamaguch 8:776b8dc51932 2 #define RING_BUFFER_H
yamaguch 8:776b8dc51932 3
yamaguch 8:776b8dc51932 4 #include <stdio.h>
yamaguch 8:776b8dc51932 5 template <typename T, size_t SIZE>
yamaguch 8:776b8dc51932 6 class RingBuffer
yamaguch 8:776b8dc51932 7 {
yamaguch 8:776b8dc51932 8 public:
yamaguch 8:776b8dc51932 9 RingBuffer() : head(0), tail(0) {
yamaguch 8:776b8dc51932 10 }
yamaguch 8:776b8dc51932 11
yamaguch 8:776b8dc51932 12 int writable() {
yamaguch 8:776b8dc51932 13 return head < tail ? tail - head - 1 : tail - head + (sizeof(buf) / sizeof(T)) - 1;
yamaguch 8:776b8dc51932 14 }
yamaguch 8:776b8dc51932 15
yamaguch 8:776b8dc51932 16 int readable() {
yamaguch 8:776b8dc51932 17 return tail <= head ? head - tail : head - tail + (sizeof(buf) / sizeof(T)) - 1;
yamaguch 8:776b8dc51932 18 }
yamaguch 8:776b8dc51932 19
yamaguch 8:776b8dc51932 20 T putc(T c) {
yamaguch 8:776b8dc51932 21 if (!writable())
yamaguch 8:776b8dc51932 22 return (T) -1;
yamaguch 8:776b8dc51932 23
yamaguch 8:776b8dc51932 24 buf[head] = c;
yamaguch 8:776b8dc51932 25 head = (head + 1) % (sizeof(buf) / sizeof(T));
yamaguch 8:776b8dc51932 26
yamaguch 8:776b8dc51932 27 return c;
yamaguch 8:776b8dc51932 28 }
yamaguch 8:776b8dc51932 29
yamaguch 8:776b8dc51932 30 int getc() {
yamaguch 8:776b8dc51932 31 if (readable()) {
yamaguch 8:776b8dc51932 32 T c = buf[tail];
yamaguch 8:776b8dc51932 33 tail = (tail + 1) % (sizeof(buf) / sizeof(T));
yamaguch 8:776b8dc51932 34 return c;
yamaguch 8:776b8dc51932 35 }
yamaguch 8:776b8dc51932 36 return -1;
yamaguch 8:776b8dc51932 37 }
yamaguch 8:776b8dc51932 38
yamaguch 8:776b8dc51932 39 T operator=(T c) {
yamaguch 8:776b8dc51932 40 return putc(c);
yamaguch 8:776b8dc51932 41 }
yamaguch 8:776b8dc51932 42
yamaguch 8:776b8dc51932 43 operator int() {
yamaguch 8:776b8dc51932 44 return (int) getc();
yamaguch 8:776b8dc51932 45 }
yamaguch 8:776b8dc51932 46
yamaguch 8:776b8dc51932 47 int head, tail;
yamaguch 8:776b8dc51932 48 T buf[SIZE];
yamaguch 8:776b8dc51932 49 };
yamaguch 8:776b8dc51932 50
yamaguch 8:776b8dc51932 51 #endif