00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #include "buffer.h"
00019
00020
00021
00022
00023
00024 void bufferInit(cBuffer* buffer, unsigned char *start, unsigned short size)
00025 {
00026
00027 buffer->dataptr = start;
00028 buffer->size = size;
00029
00030 buffer->dataindex = 0;
00031 buffer->datalength = 0;
00032 }
00033
00034
00035 unsigned char bufferGetFromFront(cBuffer* buffer)
00036 {
00037 unsigned char data = 0;
00038
00039
00040 if(buffer->datalength)
00041 {
00042
00043 data = buffer->dataptr[buffer->dataindex];
00044
00045 buffer->dataindex++;
00046 if(buffer->dataindex >= buffer->size)
00047 {
00048 buffer->dataindex %= buffer->size;
00049 }
00050 buffer->datalength--;
00051 }
00052
00053 return data;
00054 }
00055
00056 void bufferDumpFromFront(cBuffer* buffer, unsigned short numbytes)
00057 {
00058
00059
00060 if(numbytes < buffer->datalength)
00061 {
00062
00063 buffer->dataindex += numbytes;
00064 if(buffer->dataindex >= buffer->size)
00065 {
00066 buffer->dataindex %= buffer->size;
00067 }
00068 buffer->datalength -= numbytes;
00069 }
00070 else
00071 {
00072
00073 buffer->datalength = 0;
00074 }
00075 }
00076
00077 unsigned char bufferGetAtIndex(cBuffer* buffer, unsigned short index)
00078 {
00079
00080 return buffer->dataptr[(buffer->dataindex+index)%(buffer->size)];
00081 }
00082
00083 unsigned char bufferAddToEnd(cBuffer* buffer, unsigned char data)
00084 {
00085
00086 if(buffer->datalength < buffer->size)
00087 {
00088
00089 buffer->dataptr[(buffer->dataindex + buffer->datalength) % buffer->size] = data;
00090
00091 buffer->datalength++;
00092
00093 return -1;
00094 }
00095 else return 0;
00096 }
00097
00098 unsigned char bufferIsNotFull(cBuffer* buffer)
00099 {
00100
00101
00102 return (buffer->datalength < buffer->size);
00103 }
00104
00105 void bufferFlush(cBuffer* buffer)
00106 {
00107
00108 buffer->datalength = 0;
00109 }
00110