XBee API mode library

Committer:
yamaguch
Date:
Tue Jan 29 14:18:18 2013 +0000
Revision:
9:850306f22153
Parent:
8:776b8dc51932
added copyright

Who changed what in which revision?

UserRevisionLine numberNew contents of line
yamaguch 9:850306f22153 1 /*
yamaguch 9:850306f22153 2 Copyright (c) 2013, Senio Networks, Inc.
yamaguch 9:850306f22153 3
yamaguch 9:850306f22153 4 Permission is hereby granted, free of charge, to any person obtaining a copy
yamaguch 9:850306f22153 5 of this software and associated documentation files (the "Software"), to deal
yamaguch 9:850306f22153 6 in the Software without restriction, including without limitation the rights
yamaguch 9:850306f22153 7 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
yamaguch 9:850306f22153 8 copies of the Software, and to permit persons to whom the Software is
yamaguch 9:850306f22153 9 furnished to do so, subject to the following conditions:
yamaguch 9:850306f22153 10
yamaguch 9:850306f22153 11 The above copyright notice and this permission notice shall be included in
yamaguch 9:850306f22153 12 all copies or substantial portions of the Software.
yamaguch 9:850306f22153 13
yamaguch 9:850306f22153 14 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
yamaguch 9:850306f22153 15 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
yamaguch 9:850306f22153 16 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
yamaguch 9:850306f22153 17 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
yamaguch 9:850306f22153 18 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
yamaguch 9:850306f22153 19 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
yamaguch 9:850306f22153 20 THE SOFTWARE.
yamaguch 9:850306f22153 21 */
yamaguch 9:850306f22153 22
yamaguch 8:776b8dc51932 23 #ifndef RING_BUFFER_H
yamaguch 8:776b8dc51932 24 #define RING_BUFFER_H
yamaguch 8:776b8dc51932 25
yamaguch 8:776b8dc51932 26 #include <stdio.h>
yamaguch 8:776b8dc51932 27 template <typename T, size_t SIZE>
yamaguch 9:850306f22153 28 class RingBuffer {
yamaguch 8:776b8dc51932 29 public:
yamaguch 8:776b8dc51932 30 RingBuffer() : head(0), tail(0) {
yamaguch 8:776b8dc51932 31 }
yamaguch 8:776b8dc51932 32
yamaguch 8:776b8dc51932 33 int writable() {
yamaguch 8:776b8dc51932 34 return head < tail ? tail - head - 1 : tail - head + (sizeof(buf) / sizeof(T)) - 1;
yamaguch 8:776b8dc51932 35 }
yamaguch 8:776b8dc51932 36
yamaguch 8:776b8dc51932 37 int readable() {
yamaguch 8:776b8dc51932 38 return tail <= head ? head - tail : head - tail + (sizeof(buf) / sizeof(T)) - 1;
yamaguch 8:776b8dc51932 39 }
yamaguch 8:776b8dc51932 40
yamaguch 8:776b8dc51932 41 T putc(T c) {
yamaguch 8:776b8dc51932 42 if (!writable())
yamaguch 8:776b8dc51932 43 return (T) -1;
yamaguch 8:776b8dc51932 44
yamaguch 8:776b8dc51932 45 buf[head] = c;
yamaguch 8:776b8dc51932 46 head = (head + 1) % (sizeof(buf) / sizeof(T));
yamaguch 8:776b8dc51932 47
yamaguch 8:776b8dc51932 48 return c;
yamaguch 8:776b8dc51932 49 }
yamaguch 8:776b8dc51932 50
yamaguch 8:776b8dc51932 51 int getc() {
yamaguch 8:776b8dc51932 52 if (readable()) {
yamaguch 8:776b8dc51932 53 T c = buf[tail];
yamaguch 8:776b8dc51932 54 tail = (tail + 1) % (sizeof(buf) / sizeof(T));
yamaguch 8:776b8dc51932 55 return c;
yamaguch 8:776b8dc51932 56 }
yamaguch 8:776b8dc51932 57 return -1;
yamaguch 8:776b8dc51932 58 }
yamaguch 8:776b8dc51932 59
yamaguch 8:776b8dc51932 60 T operator=(T c) {
yamaguch 8:776b8dc51932 61 return putc(c);
yamaguch 8:776b8dc51932 62 }
yamaguch 8:776b8dc51932 63
yamaguch 8:776b8dc51932 64 operator int() {
yamaguch 8:776b8dc51932 65 return (int) getc();
yamaguch 8:776b8dc51932 66 }
yamaguch 8:776b8dc51932 67
yamaguch 8:776b8dc51932 68 int head, tail;
yamaguch 8:776b8dc51932 69 T buf[SIZE];
yamaguch 8:776b8dc51932 70 };
yamaguch 8:776b8dc51932 71
yamaguch 8:776b8dc51932 72 #endif