* along with this program. If not, see <http://www.gnu.org/licenses/>.\r
*\r
* For further information please contact.\r
- * http://nyatla.jp/\r
- * <airmail(at)ebony.plala.or.jp> or <nyatla(at)nyatla.jp>\r
+ * http://nyatla.jp/\r
+ * <airmail(at)ebony.plala.or.jp> or <nyatla(at)nyatla.jp>\r
*\r
*********************************************************************************/\r
#include "NyLPC_cRingBuffer.h"\r
#elif NyLPC_ARCH==NyLPC_ARCH_WIN32\r
void NyLPC_cRingBuffer_dump(NyLPC_TcRingBuffer_t* i_inst)\r
{\r
- NyLPC_TUInt8* s=((NyLPC_TUInt8*)(i_inst+1));//バッファ開始位置\r
- int i;\r
- if(i_inst->ro<=i_inst->wo){\r
- for(i=0;i<i_inst->ro;i++){\r
- printf("-- ");\r
- }\r
- for(i=i_inst->ro;i<i_inst->wo;i++){\r
- printf("%02X ",*(s+i));\r
- }\r
- for(i=i_inst->wo;i<i_inst->bl;i++){\r
- printf("-- ");\r
- }\r
- }else{\r
- for(i=0;i<i_inst->wo;i++){\r
- printf("%02X ",*(s+i));\r
- }\r
- for(i=i_inst->wo;i<i_inst->ro;i++){\r
- printf("-- ");\r
- }\r
- for(i=i_inst->ro;i<i_inst->bl;i++){\r
- printf("%02X ",*(s+i));\r
- }\r
- }\r
- printf("\n");\r
+ NyLPC_TUInt8* s=((NyLPC_TUInt8*)(i_inst+1));//バッファ開始位置\r
+ int i;\r
+ if(i_inst->ro<=i_inst->wo){\r
+ for(i=0;i<i_inst->ro;i++){\r
+ printf("-- ");\r
+ }\r
+ for(i=i_inst->ro;i<i_inst->wo;i++){\r
+ printf("%02X ",*(s+i));\r
+ }\r
+ for(i=i_inst->wo;i<i_inst->bl;i++){\r
+ printf("-- ");\r
+ }\r
+ }else{\r
+ for(i=0;i<i_inst->wo;i++){\r
+ printf("%02X ",*(s+i));\r
+ }\r
+ for(i=i_inst->wo;i<i_inst->ro;i++){\r
+ printf("-- ");\r
+ }\r
+ for(i=i_inst->ro;i<i_inst->bl;i++){\r
+ printf("%02X ",*(s+i));\r
+ }\r
+ }\r
+ printf("\n");\r
}\r
#else\r
#endif\r
\r
void NyLPC_cRingBuffer_reset(NyLPC_TcRingBuffer_t* i_inst)\r
{\r
- i_inst->ro=i_inst->wo=0;\r
+ i_inst->ro=i_inst->wo=0;\r
}\r
\r
NyLPC_TInt16 NyLPC_cRingBuffer_getReadableSize(NyLPC_TcRingBuffer_t* i_inst)\r
{\r
- volatile NyLPC_TUInt16 wo=(i_inst)->wo;\r
- volatile NyLPC_TUInt16 ro=(i_inst)->ro;\r
- if(wo>=ro)\r
- {\r
- return wo-ro;\r
- }else{\r
- return (i_inst)->bl-ro;\r
- }\r
+ volatile NyLPC_TUInt16 wo=(i_inst)->wo;\r
+ volatile NyLPC_TUInt16 ro=(i_inst)->ro;\r
+ if(wo>=ro)\r
+ {\r
+ return wo-ro;\r
+ }else{\r
+ return (i_inst)->bl-ro;\r
+ }\r
}\r
\r
NyLPC_TInt16 NyLPC_cRingBuffer_getWritableSize(const NyLPC_TcRingBuffer_t* i_inst)\r
{\r
- volatile NyLPC_TUInt16 wo=(i_inst)->wo;\r
- volatile NyLPC_TUInt16 ro=(i_inst)->ro;\r
- if(wo>=ro){\r
- //書込み可能サイズの計算\r
- return i_inst->bl-(wo-ro)-1;\r
- }else{\r
- return ro-wo-1;\r
- }\r
+ volatile NyLPC_TUInt16 wo=(i_inst)->wo;\r
+ volatile NyLPC_TUInt16 ro=(i_inst)->ro;\r
+ if(wo>=ro){\r
+ //書込み可能サイズの計算\r
+ return i_inst->bl-(wo-ro)-1;\r
+ }else{\r
+ return ro-wo-1;\r
+ }\r
\r
}\r
\r
void NyLPC_cRingBuffer_initialize(NyLPC_TcRingBuffer_t* i_inst,void* i_buf,NyLPC_TUInt16 sizeof_buf)\r
{\r
- //バッファの開始位置と終了位置の計算\r
- i_inst->bl=sizeof_buf;\r
- i_inst->ro=0;\r
- i_inst->wo=0;\r
- i_inst->buf=i_buf;\r
+ //バッファの開始位置と終了位置の計算\r
+ i_inst->bl=sizeof_buf;\r
+ i_inst->ro=0;\r
+ i_inst->wo=0;\r
+ i_inst->buf=i_buf;\r
}\r
\r
int NyLPC_cRingBuffer_write(NyLPC_TcRingBuffer_t* i_inst,NyLPC_TUInt8* i_data,const int i_len)\r
{\r
- NyLPC_TUInt8* s=(NyLPC_TUInt8*)i_inst->buf;\r
- NyLPC_TUInt8* p;\r
- NyLPC_TUInt16 wo=i_inst->wo;\r
- NyLPC_TUInt16 ro=i_inst->ro;\r
- NyLPC_TUInt16 wsize;//書込み可能サイズ\r
- int l,i;\r
- NyLPC_TUInt16 rw;\r
+ NyLPC_TUInt8* s=(NyLPC_TUInt8*)i_inst->buf;\r
+ NyLPC_TUInt8* p;\r
+ NyLPC_TUInt16 wo=i_inst->wo;\r
+ NyLPC_TUInt16 ro=i_inst->ro;\r
+ NyLPC_TUInt16 wsize;//書込み可能サイズ\r
+ int l,i;\r
+ NyLPC_TUInt16 rw;\r
\r
- if(wo>=ro){\r
- //書込み可能サイズの計算\r
- wsize=i_inst->bl-(wo-ro)-1;\r
- if(wsize<1){\r
- return 0;\r
- }\r
- //書込みサイズの調整\r
- if(wsize>i_len){\r
- wsize=i_len;\r
- }\r
- //右側の書込みサイズの計算\r
- rw=i_inst->bl-wo;\r
- l=(wsize<rw)?wsize:rw;\r
- //書込みポインタを設定\r
- p=(s+wo);\r
- for(i=l-1;i>=0;i--){\r
- *(p++)=*(i_data++);\r
- }\r
- //書込み位置の調整\r
- wo=(wo+l)%i_inst->bl;\r
- l=wsize-l;//lに左側の書込みサイズストア\r
- }else{\r
- wsize=ro-wo-1;\r
- if(wsize>i_len){\r
- wsize=i_len;\r
- }\r
- l=wsize;\r
- }\r
- if(l>0){\r
- //左側の書込み\r
- p=(s+wo);\r
- for(i=l-1;i>=0;i--){\r
- *(p++)=*(i_data++);\r
- }\r
- wo+=l;\r
- }\r
- i_inst->wo=wo;\r
- return wsize;\r
+ if(wo>=ro){\r
+ //書込み可能サイズの計算\r
+ wsize=i_inst->bl-(wo-ro)-1;\r
+ if(wsize<1){\r
+ return 0;\r
+ }\r
+ //書込みサイズの調整\r
+ if(wsize>i_len){\r
+ wsize=i_len;\r
+ }\r
+ //右側の書込みサイズの計算\r
+ rw=i_inst->bl-wo;\r
+ l=(wsize<rw)?wsize:rw;\r
+ //書込みポインタを設定\r
+ p=(s+wo);\r
+ for(i=l-1;i>=0;i--){\r
+ *(p++)=*(i_data++);\r
+ }\r
+ //書込み位置の調整\r
+ wo=(wo+l)%i_inst->bl;\r
+ l=wsize-l;//lに左側の書込みサイズストア\r
+ }else{\r
+ wsize=ro-wo-1;\r
+ if(wsize>i_len){\r
+ wsize=i_len;\r
+ }\r
+ l=wsize;\r
+ }\r
+ if(l>0){\r
+ //左側の書込み\r
+ p=(s+wo);\r
+ for(i=l-1;i>=0;i--){\r
+ *(p++)=*(i_data++);\r
+ }\r
+ wo+=l;\r
+ }\r
+ i_inst->wo=wo;\r
+ return wsize;\r
}\r
//読出しポインタを得る。\r
NyLPC_TUInt8* NyLPC_cRingBuffer_pread(NyLPC_TcRingBuffer_t* i_inst,NyLPC_TUInt16 *len)\r
{\r
- NyLPC_TUInt16 ro=i_inst->ro;\r
- *len=NyLPC_cRingBuffer_getReadableSize(i_inst);\r
- return ((NyLPC_TUInt8*)(i_inst->buf))+ro;\r
+ NyLPC_TUInt16 ro=i_inst->ro;\r
+ *len=NyLPC_cRingBuffer_getReadableSize(i_inst);\r
+ return ((NyLPC_TUInt8*)(i_inst->buf))+ro;\r
}\r
\r
//前方シークする。\r
void NyLPC_cRingBuffer_preadSeek(NyLPC_TcRingBuffer_t* i_inst,NyLPC_TUInt16 i_seek)\r
{\r
- NyLPC_Assert(NyLPC_cRingBuffer_getReadableSize(i_inst)>=i_seek);\r
- i_inst->ro=(i_inst->ro+i_seek)%i_inst->bl;\r
+ NyLPC_Assert(NyLPC_cRingBuffer_getReadableSize(i_inst)>=i_seek);\r
+ i_inst->ro=(i_inst->ro+i_seek)%i_inst->bl;\r
}\r
\r
#define TEST\r
#ifndef TEST\r
void main(void)\r
{\r
- NyLPC_TUInt16 l;\r
- NyLPC_TUInt8* b;\r
- int c;\r
- char buf[sizeof(NyLPC_TcRingBuffer_t)+5];\r
- NyLPC_TcRingBuffer_t* s;\r
- s=NyLPC_cRingBuffer_initialize(buf,sizeof(buf));\r
- for(;;){\r
- b=NyLPC_cRingBuffer_getReadPtr(s,&l);\r
- printf("readable:%d\n",l);\r
- c=NyLPC_cRingBuffer_write(s,"0123456789",3);\r
- NyLPC_cRingBuffer_dump(s);\r
- b=NyLPC_cRingBuffer_getReadPtr(s,&l);\r
- printf("readable:%d\n",l);\r
- NyLPC_cRingBuffer_seekReadPtr(s,(l>1)?l-1:1);\r
- printf("read:%d\n",(l>1)?l-1:1);\r
- NyLPC_cRingBuffer_dump(s);\r
- }\r
+ NyLPC_TUInt16 l;\r
+ NyLPC_TUInt8* b;\r
+ int c;\r
+ char buf[sizeof(NyLPC_TcRingBuffer_t)+5];\r
+ NyLPC_TcRingBuffer_t* s;\r
+ s=NyLPC_cRingBuffer_initialize(buf,sizeof(buf));\r
+ for(;;){\r
+ b=NyLPC_cRingBuffer_getReadPtr(s,&l);\r
+ printf("readable:%d\n",l);\r
+ c=NyLPC_cRingBuffer_write(s,"0123456789",3);\r
+ NyLPC_cRingBuffer_dump(s);\r
+ b=NyLPC_cRingBuffer_getReadPtr(s,&l);\r
+ printf("readable:%d\n",l);\r
+ NyLPC_cRingBuffer_seekReadPtr(s,(l>1)?l-1:1);\r
+ printf("read:%d\n",(l>1)?l-1:1);\r
+ NyLPC_cRingBuffer_dump(s);\r
+ }\r
\r
}\r
#endif\r