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

dkcBuffer.h

説明を見る。
00001 
00011 #ifndef DKUTIL_C_BUFFER_H
00012 #define DKUTIL_C_BUFFER_H
00013 
00014 #include "dkcOSIndependent.h"
00015 #include "dkcStdio.h"
00016 
00020 typedef struct dkc_Buffer{
00022     BYTE *mBuff;
00024     size_t mSize;
00025 }DKC_BUFFER;
00026 
00027 
00028 
00029 
00034 
00035 DKC_EXTERN DKC_BUFFER* WINAPI dkcAllocBuffer(const void *data,size_t size);
00041 
00042 DKC_EXTERN int WINAPI dkcFreeBuffer(DKC_BUFFER **ptr);
00043 
00050 DKC_INLINE void dkcBufferInit(DKC_BUFFER *p,size_t size){
00051     p->mBuff=(BYTE *)dkcAllocate(size);
00052     p->mSize = size;
00053 }
00055 DKC_INLINE void dkcBufferUninit(DKC_BUFFER *p){
00056     if(p->mBuff){
00057         dkcFree((void **)&p->mBuff);
00058     }
00059     p->mSize = 0;
00060 }
00061 DKC_INLINE int dkcBufferCopy(DKC_BUFFER *p,const DKC_BUFFER *src){
00062     void *tp = p->mBuff;
00063     if(tp){//メモリが残っていたら削除するなり。
00064         dkcFree(&tp);
00065     }
00066     p->mBuff = (BYTE *)dkcAllocate(src->mSize);
00067     if(NULL==p->mBuff){
00068         return edk_OutOfMemory;
00069     }
00070     p->mSize = src->mSize;
00071     return edk_SUCCEEDED;
00072 }
00073 DKC_INLINE void dkcBufferCopyShared(DKC_BUFFER *p,DKC_BUFFER *src){
00074     p->mBuff = src->mBuff;
00075     p->mSize = src->mSize;
00076 }
00080 DKC_EXTERN int WINAPI dkcBufferSet(DKC_BUFFER *ptr,const void *data,size_t size);
00082 DKC_EXTERN int WINAPI dkcBufferSetOffset(DKC_BUFFER *ptr,
00083                                                                                  const void *data,size_t size,size_t offset);
00084 
00085 
00089 DKC_EXTERN int WINAPI dkcBufferGet(DKC_BUFFER *ptr,void *data,size_t size);
00090 
00091 DKC_EXTERN int WINAPI dkcBufferGetOffset(DKC_BUFFER *ptr,
00092                                                                                  void *data,size_t size,size_t offset);
00096 DKC_EXTERN int WINAPI dkcBufferResize(DKC_BUFFER *ptr,size_t size);
00098 DKC_EXTERN DKC_BUFFER* WINAPI dkcAllocBufferCopy(const DKC_BUFFER *);
00099 
00101 DKC_EXTERN size_t WINAPI dkcBufferSize(DKC_BUFFER *p);
00102 
00103 DKC_EXTERN BYTE *WINAPI dkcBufferPointer(DKC_BUFFER *p);
00104 
00105 
00106 //**********************************************************
00107 //inline 
00108 DKC_INLINE int WINAPI dkcBufferSet_INL(DKC_BUFFER *ptr,const void *data,size_t size)
00109 {
00110     //if(NULL==ptr) return edk_ArgumentException;//
00111 
00112     return dkc_memcpy(ptr->mBuff,ptr->mSize,data,size);
00113 }
00114 
00115 
00116 DKC_INLINE int WINAPI dkcBufferSetOffset_INL(DKC_BUFFER *ptr,
00117                                                             const void *data,size_t size,size_t offset){
00118     if(ptr->mSize < offset + size){
00119         return edk_BufferOverFlow;
00120     }
00121     return dkc_memcpy(
00122         ptr->mBuff + offset,
00123         ptr->mSize - offset
00124         ,data,size);
00125 }
00126 
00127 
00128 
00129 
00130 DKC_INLINE int WINAPI dkcBufferGet_INL(DKC_BUFFER *ptr,void *data,size_t size){
00131     //if(NULL==ptr) return edk_ArgumentException;//fast
00132     return dkc_memcpy(data,size,ptr->mBuff,ptr->mSize);
00133 }
00134 
00135 DKC_INLINE int WINAPI dkcBufferGetOffset_INL(DKC_BUFFER *ptr,
00136                                                             void *data,size_t size,size_t offset){
00137     if(ptr->mSize < offset + size){
00138         return edk_BufferOverFlow;
00139     }
00140     return dkc_memcpy(
00141         data,size,
00142         ptr->mBuff + offset,
00143         size
00144     );
00145 
00146 }
00147 
00148 DKC_INLINE int WINAPI dkcBufferResize_INL(DKC_BUFFER *ptr,size_t size)
00149 {
00150     void *NewPtr;
00151     if(NULL==ptr || 0==size || NULL==ptr->mBuff) return edk_ArgumentException;
00152     if(DKUTIL_FAILED(dkcReallocate(&NewPtr,size,(void **)&(ptr->mBuff)))){
00153         return edk_FAILED;
00154     }
00155 
00156     ptr->mBuff = (BYTE *)NewPtr;
00157     ptr->mSize = size;
00158 
00159     return edk_SUCCEEDED;
00160 }
00161 
00162 
00163 
00164 DKC_INLINE DKC_BUFFER* WINAPI dkcAllocBufferCopy_INL(const DKC_BUFFER *ptr){
00165     dkcmNOT_ASSERT(NULL==ptr || NULL==ptr->mBuff);
00166 
00167     return dkcAllocBuffer(ptr->mBuff,ptr->mSize);
00168 }
00169 
00170 DKC_INLINE size_t WINAPI dkcBufferSize_INL(DKC_BUFFER *p){
00171     return p->mSize;
00172 }
00173 DKC_INLINE BYTE *WINAPI dkcBufferPointer_INL(DKC_BUFFER *p){
00174     return p->mBuff;
00175 }
00176 
00177 #if !defined( DKUTIL_C_BUFFER_C ) &&  defined(USE_DKC_INDEPENDENT_INCLUDE)
00178 #   include "dkcBuffer.c"
00179 #endif
00180 
00181 
00182 #endif //end of include once

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