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 RingBuffer by
RingBuffer.cpp@0:db7fa84ff50e, 2012-08-31 (annotated)
- Committer:
- ykuroda
- Date:
- Fri Aug 31 10:13:15 2012 +0000
- Revision:
- 0:db7fa84ff50e
- Child:
- 1:1c3a10f2eb04
1st implement
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| ykuroda | 0:db7fa84ff50e | 1 | /* |
| ykuroda | 0:db7fa84ff50e | 2 | * ringbuffer.c |
| ykuroda | 0:db7fa84ff50e | 3 | * |
| ykuroda | 0:db7fa84ff50e | 4 | * 2009.11.12 ... Y.Kuroda |
| ykuroda | 0:db7fa84ff50e | 5 | */ |
| ykuroda | 0:db7fa84ff50e | 6 | #include "string.h" |
| ykuroda | 0:db7fa84ff50e | 7 | #include "RingBuffer.h" |
| ykuroda | 0:db7fa84ff50e | 8 | |
| ykuroda | 0:db7fa84ff50e | 9 | |
| ykuroda | 0:db7fa84ff50e | 10 | /* |
| ykuroda | 0:db7fa84ff50e | 11 | * Machine Independent Area |
| ykuroda | 0:db7fa84ff50e | 12 | */ |
| ykuroda | 0:db7fa84ff50e | 13 | RingBuffer::RingBuffer(int _bufsize) |
| ykuroda | 0:db7fa84ff50e | 14 | : bufsize(_bufsize) |
| ykuroda | 0:db7fa84ff50e | 15 | { |
| ykuroda | 0:db7fa84ff50e | 16 | buf = new unsigned char [bufsize+1]; |
| ykuroda | 0:db7fa84ff50e | 17 | |
| ykuroda | 0:db7fa84ff50e | 18 | sp = ep = (unsigned int)buf; |
| ykuroda | 0:db7fa84ff50e | 19 | memset(buf,0,bufsize); |
| ykuroda | 0:db7fa84ff50e | 20 | } |
| ykuroda | 0:db7fa84ff50e | 21 | |
| ykuroda | 0:db7fa84ff50e | 22 | RingBuffer::~RingBuffer() |
| ykuroda | 0:db7fa84ff50e | 23 | { |
| ykuroda | 0:db7fa84ff50e | 24 | delete [] buf; |
| ykuroda | 0:db7fa84ff50e | 25 | } |
| ykuroda | 0:db7fa84ff50e | 26 | |
| ykuroda | 0:db7fa84ff50e | 27 | int |
| ykuroda | 0:db7fa84ff50e | 28 | RingBuffer::save(unsigned char c) |
| ykuroda | 0:db7fa84ff50e | 29 | { |
| ykuroda | 0:db7fa84ff50e | 30 | if( (ep==sp-1)|| |
| ykuroda | 0:db7fa84ff50e | 31 | ((sp==(unsigned int)buf)&& |
| ykuroda | 0:db7fa84ff50e | 32 | (ep==(unsigned int)buf+bufsize-1)) ) /* buffer full */ |
| ykuroda | 0:db7fa84ff50e | 33 | return 0; |
| ykuroda | 0:db7fa84ff50e | 34 | |
| ykuroda | 0:db7fa84ff50e | 35 | *(unsigned char*)ep = c; |
| ykuroda | 0:db7fa84ff50e | 36 | ep++; |
| ykuroda | 0:db7fa84ff50e | 37 | |
| ykuroda | 0:db7fa84ff50e | 38 | if(ep > (unsigned int)buf+bufsize) |
| ykuroda | 0:db7fa84ff50e | 39 | ep = (unsigned int)buf; |
| ykuroda | 0:db7fa84ff50e | 40 | return 1; |
| ykuroda | 0:db7fa84ff50e | 41 | } |
| ykuroda | 0:db7fa84ff50e | 42 | |
| ykuroda | 0:db7fa84ff50e | 43 | unsigned char |
| ykuroda | 0:db7fa84ff50e | 44 | RingBuffer::read(void) |
| ykuroda | 0:db7fa84ff50e | 45 | { |
| ykuroda | 0:db7fa84ff50e | 46 | unsigned char ret; |
| ykuroda | 0:db7fa84ff50e | 47 | |
| ykuroda | 0:db7fa84ff50e | 48 | if(sp == ep) |
| ykuroda | 0:db7fa84ff50e | 49 | return 0; /* buffer empty */ |
| ykuroda | 0:db7fa84ff50e | 50 | |
| ykuroda | 0:db7fa84ff50e | 51 | ret = *(unsigned char*)sp; |
| ykuroda | 0:db7fa84ff50e | 52 | *(unsigned char*)sp = 0; |
| ykuroda | 0:db7fa84ff50e | 53 | sp++; |
| ykuroda | 0:db7fa84ff50e | 54 | |
| ykuroda | 0:db7fa84ff50e | 55 | if(sp> (unsigned int)buf+bufsize) |
| ykuroda | 0:db7fa84ff50e | 56 | sp = (unsigned int)buf; |
| ykuroda | 0:db7fa84ff50e | 57 | return ret; |
| ykuroda | 0:db7fa84ff50e | 58 | } |
| ykuroda | 0:db7fa84ff50e | 59 | |
| ykuroda | 0:db7fa84ff50e | 60 | int |
| ykuroda | 0:db7fa84ff50e | 61 | RingBuffer::check(void) |
| ykuroda | 0:db7fa84ff50e | 62 | { |
| ykuroda | 0:db7fa84ff50e | 63 | int n = ep-sp; |
| ykuroda | 0:db7fa84ff50e | 64 | if(n<0) |
| ykuroda | 0:db7fa84ff50e | 65 | n = bufsize-n; |
| ykuroda | 0:db7fa84ff50e | 66 | |
| ykuroda | 0:db7fa84ff50e | 67 | return n; |
| ykuroda | 0:db7fa84ff50e | 68 | } |
| ykuroda | 0:db7fa84ff50e | 69 |
