メインページ | アルファベット順一覧 | 構成 | ファイル一覧 | 構成メンバ | ファイルメンバ | 関連ページ

# dkcCircularMemoryStream.h

説明を見る。

    00001
    00007 #ifndef DKUTIL_C_CIRCULAR_MEMORYSTREAM_H
    00008 #define DKUTIL_C_CIRCULAR_MEMORYSTREAM_H
    00009
    00010
    00011 #include "dkcMemoryStream.h"
    00012
    00013
    00014 enum edkcCirculerMemoryStream{
    00016     edkcCirculerMemoryStreamSeekCurrent = edkcSeekCurrent,
    00018     edkcCirculerMemoryStreamSeekEnd = edkcSeekEnd,
    00020     edkcCirculerMemoryStreamSeekSet = edkcSeekSet,
    00021
    00022
    00023 };
    00024 /*
    00025 enum edkcCircularMemoryStream{
    00026     edkcCircularMemoryStreamInitBuffer = edkcStreamInitBuffer,
    00027     edkcCircularMemoryStreamInitFile = edkcStreamInitFile,
    00029     edkcCircularMemoryStreamDumpAll,
    00031     edkcCircularMemoryStreamDumpEnable,
    00032
    00033 };
    00034 */
    00038 typedef struct dkc_CircularMemoryStream{
    00040     BYTE *mBuffer;
    00042     size_t mSize ;
    00044     size_t mStart,mEnd;
    00046     size_t mEnableLength ;
    00047
    00048 } DKC_CIRCULAR_MEMORYSTREAM;
    00049
    00050 DKC_EXTERN DKC_CIRCULAR_MEMORYSTREAM * WINAPI dkcAllocCircularMemoryStream(size_t size);
    00051
    00052 DKC_EXTERN int WINAPI dkcFreeCircularMemoryStream(DKC_CIRCULAR_MEMORYSTREAM **ptr);
    00053
    00063
    00064 DKC_EXTERN int WINAPI dkcCircularMemoryStreamRead(DKC_CIRCULAR_MEMORYSTREAM *ptr,void *buffer,size_t size,size_t *readsize);
    00065
    00067 DKC_EXTERN int WINAPI dkcCircularMemoryStreamReference(DKC_CIRCULAR_MEMORYSTREAM *ptr,void *buffer,size_t size,size_t *readsize);
    00068
    00077
    00078 DKC_EXTERN int WINAPI dkcCircularMemoryStreamWrite(DKC_CIRCULAR_MEMORYSTREAM *ptr,const void *buffer,size_t size);
    00079
    00081 DKC_EXTERN int WINAPI dkcCircularMemoryStreamClear(DKC_CIRCULAR_MEMORYSTREAM *ptr);
    00082
    00087 DKC_EXTERN DKC_CIRCULAR_MEMORYSTREAM *WINAPI
    00088     dkcAllocCircularMemoryStreamCopy(const DKC_CIRCULAR_MEMORYSTREAM *ptr);
    00089
    00090 DKC_INLINE size_t dkcCirculerMemoryStreamTell(DKC_CIRCULAR_MEMORYSTREAM *ptr)
    00091 {
    00092     return ptr->mStart;
    00093 }
    00094 DKC_INLINE size_t dkcCirculerMemoryStreamSize(DKC_CIRCULAR_MEMORYSTREAM *ptr)
    00095 {
    00096     return ptr->mEnableLength;
    00097 }
    00098 DKC_INLINE size_t dkcCirculerMemoryStreamEOF(DKC_CIRCULAR_MEMORYSTREAM *ptr)
    00099 {
    00100     return ptr->mSize == ptr->mEnd;
    00101 }
    00102
    00104 DKC_INLINE int dkcCirculerMemoryStreamSeek(DKC_CIRCULAR_MEMORYSTREAM *ptr,long offset,long origin)
    00105 {
    00106     long point;
    00107     size_t change;
    00108     switch(origin){
    00109     case edkcCirculerMemoryStreamSeekCurrent:
    00110         point = ptr->mStart;
    00111         break;
    00112     case edkcCirculerMemoryStreamSeekEnd:
    00113         point = ptr->mEnd;
    00114         break;
    00115     case edkcCirculerMemoryStreamSeekSet:
    00116         point = 0;
    00117         break;
    00118     default:
    00119         return edk_ArgumentException;
    00120     }
    00121     //有効なリングバッファ内に収まるサイズになるように
    00122     change = offset % ptr->mEnableLength;
    00123     change = (point + change);
    00124
    00125     if(TRUE==dkcCheckOverflow32(ptr->mStart ,change)){
    00126         return edk_FAILED;
    00127     }
    00128     /*//if(!(ptr->mSize > change)){
    00129     if(!(ptr->mSize >= change)){
    00130         return edk_FAILED;
    00131     }*/
    00132     if( ptr->mStart + change > ptr->mEnd)
    00133     {
    00134         return edk_FAILED;
    00135     }
    00136     ptr->mSize += change;
    00137     return edk_SUCCEEDED;
    00138 }
    00139
    00140 //stream内のものをバッファにコピーする。
    00141 //DKC_EXTERN int WINAPI dkcCircularMemoryStreamToBuffer(
    00142 //  const DKC_CIRCULAR_MEMORYSTREAM *ptr,char *buff,size_t size,size_t want_size);
    00143
    00144 /*
    00145 #ifndef DKUTIL_C_CIRCULAR_MEMORYSTREAM_H
    00146 #   include "dkcCircularMemoryStream.c"
    00147 #endif
    00148 */
    00149
    00150 #endif