Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of GSwifi_old by
RingBuffer.cpp
00001 /* 00002 * mbed library for RingBuffer 00003 * Copyright (c) 2010 Hiroshi Suga 00004 * Released under the MIT License: http://mbed.org/license/mit 00005 */ 00006 00007 /* @file 00008 * @brief Ring Buffer 00009 */ 00010 00011 #include "RingBuffer.h" 00012 00013 RingBuffer::RingBuffer (int p_size) { 00014 size = p_size + 1; 00015 buf = new char[size]; 00016 addr_w = 0; 00017 addr_r = 0; 00018 } 00019 00020 RingBuffer::~RingBuffer () { 00021 delete [] buf; 00022 } 00023 00024 int RingBuffer::put (char dat) { 00025 int next; 00026 00027 next = (addr_w + 1) % size; 00028 if (next == addr_r) { 00029 return -1; 00030 } 00031 buf[addr_w] = dat; 00032 addr_w = next; 00033 return -1; 00034 } 00035 00036 int RingBuffer::put (char *dat, int len) { 00037 int next, i; 00038 00039 00040 for (i = 0; i < len; i ++) { 00041 next = (addr_w + 1) % size; 00042 if (next == addr_r) { 00043 break; 00044 } 00045 buf[addr_w] = dat[i]; 00046 addr_w = next; 00047 } 00048 return i; 00049 } 00050 00051 int RingBuffer::get (char *dat) { 00052 if (addr_r == addr_w) { 00053 return -1; 00054 } 00055 *dat = buf[addr_r]; 00056 addr_r = (addr_r + 1) % size; 00057 return 0; 00058 } 00059 00060 int RingBuffer::get (char *dat, int len) { 00061 int i; 00062 00063 for (i = 0; i < len; i ++) { 00064 if (addr_r == addr_w) { 00065 break; 00066 } 00067 dat[i] = buf[addr_r]; 00068 addr_r = (addr_r + 1) % size; 00069 } 00070 return i; 00071 } 00072 00073 int RingBuffer::available () { 00074 if (addr_w < addr_r) { 00075 return addr_r - addr_w - 1; 00076 } else { 00077 return (size - addr_w) + addr_r - 1; 00078 } 00079 } 00080 00081 int RingBuffer::use () { 00082 return size - available() - 1; 00083 } 00084 00085 void RingBuffer::clear () { 00086 addr_w = 0; 00087 addr_r = 0; 00088 }
Generated on Mon Jul 18 2022 14:21:01 by
