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

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

dkutil_cに対してMon Jan 16 00:39:45 2006に生成されました。  doxygen 1.4.4