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.
libT/portable/tringbuffer.h@0:e0ec137da369, 2010-12-18 (annotated)
- Committer:
- tosihisa
- Date:
- Sat Dec 18 11:17:21 2010 +0000
- Revision:
- 0:e0ec137da369
1st release
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| tosihisa | 0:e0ec137da369 | 1 | |
| tosihisa | 0:e0ec137da369 | 2 | #ifndef __TRINGBUFFER_H |
| tosihisa | 0:e0ec137da369 | 3 | #define __TRINGBUFFER_H |
| tosihisa | 0:e0ec137da369 | 4 | |
| tosihisa | 0:e0ec137da369 | 5 | #include "tversion.h" |
| tosihisa | 0:e0ec137da369 | 6 | |
| tosihisa | 0:e0ec137da369 | 7 | namespace libT { |
| tosihisa | 0:e0ec137da369 | 8 | |
| tosihisa | 0:e0ec137da369 | 9 | template <class T> |
| tosihisa | 0:e0ec137da369 | 10 | class tRingBuffer : public tVersion |
| tosihisa | 0:e0ec137da369 | 11 | { |
| tosihisa | 0:e0ec137da369 | 12 | public: |
| tosihisa | 0:e0ec137da369 | 13 | |
| tosihisa | 0:e0ec137da369 | 14 | tRingBuffer(void) : tVersion(0x20100721/* 2010-07-21 */,0x00000001UL),wp(0),rp(0) {} |
| tosihisa | 0:e0ec137da369 | 15 | |
| tosihisa | 0:e0ec137da369 | 16 | inline void reset(void){wp = rp = 0;} |
| tosihisa | 0:e0ec137da369 | 17 | |
| tosihisa | 0:e0ec137da369 | 18 | inline int writable(void) const |
| tosihisa | 0:e0ec137da369 | 19 | { |
| tosihisa | 0:e0ec137da369 | 20 | return (inc(wp) != rp) ? 1 : 0; |
| tosihisa | 0:e0ec137da369 | 21 | } |
| tosihisa | 0:e0ec137da369 | 22 | |
| tosihisa | 0:e0ec137da369 | 23 | inline int write(T _c) |
| tosihisa | 0:e0ec137da369 | 24 | { |
| tosihisa | 0:e0ec137da369 | 25 | int retval = -1; /* Ringbuffer FULL */ |
| tosihisa | 0:e0ec137da369 | 26 | if(writable()){ |
| tosihisa | 0:e0ec137da369 | 27 | array[wp] = _c; |
| tosihisa | 0:e0ec137da369 | 28 | wp = inc(wp); |
| tosihisa | 0:e0ec137da369 | 29 | retval = 0; /* OK */ |
| tosihisa | 0:e0ec137da369 | 30 | } |
| tosihisa | 0:e0ec137da369 | 31 | return retval; |
| tosihisa | 0:e0ec137da369 | 32 | } |
| tosihisa | 0:e0ec137da369 | 33 | |
| tosihisa | 0:e0ec137da369 | 34 | inline int readable(void) const |
| tosihisa | 0:e0ec137da369 | 35 | { |
| tosihisa | 0:e0ec137da369 | 36 | return (rp != wp) ? 1 : 0; |
| tosihisa | 0:e0ec137da369 | 37 | } |
| tosihisa | 0:e0ec137da369 | 38 | |
| tosihisa | 0:e0ec137da369 | 39 | inline int read(T *_c) |
| tosihisa | 0:e0ec137da369 | 40 | { |
| tosihisa | 0:e0ec137da369 | 41 | int retval = -1; /* Ringbuffer empty or _c is invalid*/ |
| tosihisa | 0:e0ec137da369 | 42 | if((readable()) && (_c != 0)){ |
| tosihisa | 0:e0ec137da369 | 43 | *_c = array[rp]; |
| tosihisa | 0:e0ec137da369 | 44 | rp = inc(rp); |
| tosihisa | 0:e0ec137da369 | 45 | retval = 0; /* OK */ |
| tosihisa | 0:e0ec137da369 | 46 | } |
| tosihisa | 0:e0ec137da369 | 47 | return retval; |
| tosihisa | 0:e0ec137da369 | 48 | } |
| tosihisa | 0:e0ec137da369 | 49 | |
| tosihisa | 0:e0ec137da369 | 50 | private: |
| tosihisa | 0:e0ec137da369 | 51 | enum {TRINGBUFFER_SIZE=0x200}; |
| tosihisa | 0:e0ec137da369 | 52 | inline unsigned short inc(unsigned short _p) const |
| tosihisa | 0:e0ec137da369 | 53 | { |
| tosihisa | 0:e0ec137da369 | 54 | return static_cast<unsigned short>(static_cast<unsigned short>(_p + 1) & (sizeof(array)-1)); |
| tosihisa | 0:e0ec137da369 | 55 | } |
| tosihisa | 0:e0ec137da369 | 56 | volatile unsigned short wp; |
| tosihisa | 0:e0ec137da369 | 57 | volatile unsigned short rp; |
| tosihisa | 0:e0ec137da369 | 58 | volatile T array[TRINGBUFFER_SIZE]; |
| tosihisa | 0:e0ec137da369 | 59 | }; |
| tosihisa | 0:e0ec137da369 | 60 | |
| tosihisa | 0:e0ec137da369 | 61 | }; |
| tosihisa | 0:e0ec137da369 | 62 | |
| tosihisa | 0:e0ec137da369 | 63 | #endif /* __TRINGBUFFER_H */ |
| tosihisa | 0:e0ec137da369 | 64 |