#include "dkcCircularMemoryStream.h"#include "dkcStdio.h"dkcCircularMemoryStream.cのインクルード依存関係図

マクロ定義 | |
| #define | DKUTIL_C_CIRCULAR_MEMORYSTREAM_C |
関数 | |
| DKC_CIRCULAR_MEMORYSTREAM *WINAPI | dkcAllocCircularMemoryStream (size_t size) |
| int WINAPI | dkcFreeCircularMemoryStream (DKC_CIRCULAR_MEMORYSTREAM **ptr) |
| DKC_INLINE BOOL | isDoubleProcess (size_t start, size_t data_length, size_t border_size) |
| int WINAPI | dkcCircularMemoryStreamReadLogic (DKC_CIRCULAR_MEMORYSTREAM *RingBuf, void *Buf, size_t Len, size_t *readsize, BOOL PeekFlag) |
| int WINAPI | dkcCircularMemoryStreamRead (DKC_CIRCULAR_MEMORYSTREAM *ptr, void *buffer, size_t size, size_t *readsize) |
| streamをリードする。freadみたいなもの | |
| int WINAPI | dkcCircularMemoryStreamReference (DKC_CIRCULAR_MEMORYSTREAM *ptr, void *buffer, size_t size, size_t *readsize) |
| 中を覗き見るだけ。引数についてはdkcCircularMemoryStreamRead()を見るべし。 | |
| int WINAPI | dkcCircularMemoryStreamWrite (DKC_CIRCULAR_MEMORYSTREAM *ptr, const void *buffer, size_t size) |
| streamをライトする。fwriteみたいなもの | |
| int WINAPI | dkcCircularMemoryStreamClear (DKC_CIRCULAR_MEMORYSTREAM *ptr) |
| stream内のカウンタを0にして事実上すべてクリアーにする。 | |
| int WINAPI | dkcCircularMemoryStreamToBuffer (const DKC_CIRCULAR_MEMORYSTREAM *ptr, char *buff, size_t size, size_t want_size) |
| DKC_CIRCULAR_MEMORYSTREAM *WINAPI | dkcAllocCircularMemoryStreamCopy (const DKC_CIRCULAR_MEMORYSTREAM *ptr) |
dkcCircularMemoryStream.c で定義されています。
|
|
dkcCircularMemoryStream.c の 6 行で定義されています。 |
|
|
dkcCircularMemoryStream.c の 11 行で定義されています。 参照先 DKC_CIRCULAR_MEMORYSTREAM, dkcAllocate(), dkcFree(), dkc_CircularMemoryStream::mBuffer, dkc_CircularMemoryStream::mEnableLength, dkc_CircularMemoryStream::mEnd, dkc_CircularMemoryStream::mSize, dkc_CircularMemoryStream::mStart, と NULL. 参照元 dkcAllocCircularMemoryStreamCopy().
00012 {
00013 DKC_CIRCULAR_MEMORYSTREAM *p = NULL;
00014
00015 p = (DKC_CIRCULAR_MEMORYSTREAM *)dkcAllocate(sizeof(DKC_CIRCULAR_MEMORYSTREAM));
00016 if(NULL==p) return NULL;
00017
00018 p->mBuffer = dkcAllocate(size);
00019 if(NULL==p->mBuffer) goto Error;
00020
00021 p->mStart = 0;
00022 p->mEnd = 0;
00023 p->mEnableLength = 0;
00024 p->mSize = size;
00025
00026 return p;
00027 Error:
00028 dkcFree((void **)&p);
00029 return NULL;
00030 }
|
|
|
DKC_CIRCULAR_MEMORYSTREAMをコピーする。 C++で言うコピーコンストラクタみたいなもの^^; dkcCircularMemoryStream.c の 170 行で定義されています。 参照先 DKC_CIRCULAR_MEMORYSTREAM, dkc_memcpy(), dkcAllocCircularMemoryStream(), dkcmNOT_ASSERT, dkc_CircularMemoryStream::mBuffer, dkc_CircularMemoryStream::mEnableLength, dkc_CircularMemoryStream::mEnd, dkc_CircularMemoryStream::mSize, dkc_CircularMemoryStream::mStart, と NULL.
00171 {
00172 DKC_CIRCULAR_MEMORYSTREAM *p;
00173
00174 dkcmNOT_ASSERT(NULL==ptr);
00175
00176 p = dkcAllocCircularMemoryStream(ptr->mSize);
00177
00178
00179 if(NULL==p) return NULL;//強制終了したい気分!!
00180
00181 dkcmNOT_ASSERT(DKUTIL_FAILED(
00182 dkc_memcpy(p->mBuffer,p->mSize,ptr->mBuffer,ptr->mSize)
00183 ));
00184
00185 p->mEnableLength = ptr->mEnableLength;
00186 p->mEnd = p->mEnd;
00187 p->mStart = p->mStart;
00188
00189
00190 return p;
00191 }
|
|
|
stream内のカウンタを0にして事実上すべてクリアーにする。
dkcCircularMemoryStream.c の 148 行で定義されています。 参照先 DKC_CIRCULAR_MEMORYSTREAM, dkc_CircularMemoryStream::mBuffer, dkc_CircularMemoryStream::mEnableLength, dkc_CircularMemoryStream::mEnd, dkc_CircularMemoryStream::mStart, と NULL.
|
|
||||||||||||||||||||
|
streamをリードする。freadみたいなもの
dkcCircularMemoryStream.c の 105 行で定義されています。 参照先 DKC_CIRCULAR_MEMORYSTREAM, dkcCircularMemoryStreamReadLogic(), と FALSE.
00106 {
00107 return dkcCircularMemoryStreamReadLogic(ptr,buffer,size,readsize,FALSE);
00108 }
|
|
||||||||||||||||||||||||
|
dkcCircularMemoryStream.c の 46 行で定義されています。 参照先 BOOL, DKC_CIRCULAR_MEMORYSTREAM, FALSE, isDoubleProcess(), dkc_CircularMemoryStream::mBuffer, dkc_CircularMemoryStream::mEnableLength, dkc_CircularMemoryStream::mSize, dkc_CircularMemoryStream::mStart, と NULL. 参照元 dkcCircularMemoryStreamRead(), と dkcCircularMemoryStreamReference().
00048 {
00049 if(NULL==RingBuf || NULL==RingBuf->mBuffer || NULL==readsize)
00050 return edk_ArgumentException;
00051
00052 if( RingBuf->mEnableLength==0) return edk_FAILED;
00053
00054 if( RingBuf->mEnableLength < Len )
00055 { // 存在するデータ量より多かったら
00056 //return edk_FAILED ;
00057 //とりあえず、ありったけのデータをもらおう。
00058 Len = RingBuf->mEnableLength;
00059
00060 }else{
00061
00062
00063 }
00064 //読み込むデータはこのくらいあるのだ!
00065 *readsize = Len;
00066
00067 // 2回に別けなければいけないかどうかで処理を分岐
00068 if( isDoubleProcess(RingBuf->mStart, Len, RingBuf->mSize) /*RingBuf->mStart + Len > RingBuf->mSize*/ )
00069 {
00070 // 2回に別ける場合の処理
00071 memcpy( Buf,
00072 (char *)RingBuf->mBuffer + RingBuf->mStart,
00073 RingBuf->mSize - RingBuf->mStart ) ;
00074 memcpy( (char *)Buf + ( RingBuf->mSize - RingBuf->mStart ),
00075 RingBuf->mBuffer,
00076 Len - ( RingBuf->mSize - RingBuf->mStart ) ) ;
00077
00078 //最初からシーク
00079 /*dkcStreamToBuffer(RingBuf->mBuffer,edkcStreamSeekSet,
00080 RingBuf->mStart, RingBuf->mSize - RingBuf->mStart,Buf,Len);
00081
00082 dkcStreamToBuffer(RingBuf->mBuffer,edkcStreamSeekSet,
00083 0 ,Len - ( RingBuf->mSize - RingBuf->mStart ),
00084 (char *)Buf + ( RingBuf->mSize - RingBuf->mStart ),Len);
00085 */
00086 if( PeekFlag == FALSE ) RingBuf->mStart = Len - ( RingBuf->mSize - RingBuf->mStart ) ;
00087 }
00088 else
00089 {
00090 // 1回で格納する場合の処理
00091 memcpy( Buf, (char *)RingBuf->mBuffer + RingBuf->mStart, Len ) ;
00092
00093 /*dkcStreamToBuffer(RingBuf->mBuffer,edkcStreamSeekSet,
00094 RingBuf->mStart,Len,Buf,Len);
00095 */
00096 if( PeekFlag == FALSE ) RingBuf->mStart += Len ;
00097 }
00098
00099 // データの量を減らす
00100 if( PeekFlag == FALSE ) RingBuf->mEnableLength -= Len ;
00101 return edk_SUCCEEDED;
00102 }
|
|
||||||||||||||||||||
|
中を覗き見るだけ。引数についてはdkcCircularMemoryStreamRead()を見るべし。
dkcCircularMemoryStream.c の 110 行で定義されています。 参照先 DKC_CIRCULAR_MEMORYSTREAM, dkcCircularMemoryStreamReadLogic(), と TRUE.
00111 {
00112 return dkcCircularMemoryStreamReadLogic(ptr,buffer,size,readsize,TRUE);
00113 }
|
|
||||||||||||||||||||
|
dkcCircularMemoryStream.c の 162 行で定義されています。 参照先 DKC_CIRCULAR_MEMORYSTREAM.
00164 {
00165
00166 return edk_SUCCEEDED;
00167 }
|
|
||||||||||||||||
|
streamをライトする。fwriteみたいなもの
dkcCircularMemoryStream.c の 117 行で定義されています。 参照先 DKC_CIRCULAR_MEMORYSTREAM, isDoubleProcess(), dkc_CircularMemoryStream::mBuffer, dkc_CircularMemoryStream::mEnableLength, dkc_CircularMemoryStream::mEnd, dkc_CircularMemoryStream::mSize, と NULL.
00117 {
00118 if(NULL==ptr || NULL==buffer || 0==size ) return edk_ArgumentException;
00119 //DxLibを参考にしました。この場をお借りしてお礼申し上げます。m(_ _)m
00120
00121 //error check
00122 if(ptr->mSize - ptr->mEnableLength < size) return edk_FAILED;
00123
00124 // 2回に分けて格納しなければならないかどうかで処理を分岐
00125 if(isDoubleProcess(ptr->mEnd,size,ptr->mSize))
00126 {
00127 // 2回に別けて格納する場合の処理
00128 memcpy( (char *)ptr->mBuffer + ptr->mEnd, buffer, ptr->mSize - ptr->mEnd ) ;
00129 memcpy( ptr->mBuffer, (char *)buffer + ( ptr->mSize - ptr->mEnd ), size - ( ptr->mSize - ptr->mEnd ) ) ;
00130 //dkcStreamWrite(ptr->mBuffer,buffer,ptr->mSize - ptr->mEnd);
00131 //dkcStreamSeek(ptr->mBuffer,0,edkcStreamSeekSet);//オフセットを最初にする。
00132 //dkcStreamWrite(ptr->mBuffer,(char *)buffer + ( ptr->mSize - ptr->mEnd ),size - ( ptr->mSize - ptr->mEnd ));
00133 ptr->mEnd = size - ( ptr->mSize - ptr->mEnd ) ;
00134 }else{
00135 // 1回で格納する場合の処理
00136 memcpy( (char *)ptr->mBuffer + ptr->mEnd, buffer, size ) ;
00137 //dkcStreamWrite(ptr->mBuffer,buffer,size);
00138 ptr->mEnd += size ;
00139 }
00140
00141
00142 // 格納しているデータの量を増やす
00143 ptr->mEnableLength += size;
00144 return edk_SUCCEEDED;
00145 }
|
|
|
dkcCircularMemoryStream.c の 32 行で定義されています。 参照先 DKC_CIRCULAR_MEMORYSTREAM, dkcFree(), と NULL.
|
|
||||||||||||||||
|
dkcCircularMemoryStream.c の 39 行で定義されています。 参照先 BOOL.
00040 {
00041 return (start + data_length > border_size);
00042 }
|
1.3.6