XBee API mode library
Diff: RingBuffer.h
- Revision:
- 17:2f728fd13bc0
- Parent:
- 16:cdfcb63b2c4b
--- a/RingBuffer.h Wed Mar 20 00:28:27 2013 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,72 +0,0 @@ -/* -Copyright (c) 2013, Senio Networks, Inc. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -*/ - -#ifndef RING_BUFFER_H -#define RING_BUFFER_H - -#include <stdio.h> -template <typename T, size_t SIZE> -class RingBuffer { -public: - RingBuffer() : head(0), tail(0) { - } - - int writable() { - return head < tail ? tail - head - 1 : tail - head + (sizeof(buf) / sizeof(T)) - 1; - } - - int readable() { - return tail <= head ? head - tail : head - tail + (sizeof(buf) / sizeof(T)) - 1; - } - - T putc(T c) { - if (!writable()) - return (T) -1; - - buf[head] = c; - head = (head + 1) % (sizeof(buf) / sizeof(T)); - - return c; - } - - int getc() { - if (readable()) { - T c = buf[tail]; - tail = (tail + 1) % (sizeof(buf) / sizeof(T)); - return c; - } - return -1; - } - - T operator=(T c) { - return putc(c); - } - - operator int() { - return (int) getc(); - } - - int head, tail; - T buf[SIZE]; -}; - -#endif \ No newline at end of file