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

dkcBuffer.c

説明を見る。
00001 
00007 #define DKUTIL_C_BUFFER_C
00008 #include "dkcBuffer.h"
00009 
00010 
00011 
00013 DKC_BUFFER* WINAPI dkcAllocBuffer(const void *data,size_t size){
00014     DKC_BUFFER *p;
00015     
00016     if(0==size) return NULL;
00017 
00018     p = (DKC_BUFFER *)dkcAllocate(sizeof(DKC_BUFFER));
00019     if(NULL==p) return NULL;
00020     
00021 
00022     p->mBuff = (BYTE *)dkcAllocate(size);
00023     if(NULL==p->mBuff) goto Error;
00024     
00025     p->mSize = size;
00026 
00027     if(data){
00028         if(DKUTIL_FAILED(dkcBufferSet(p,data,size))){
00029             goto Error;
00030         }
00031     }else{
00032         
00033     }
00034     return p;
00035 Error:
00036     dkcFree((void **)&p);
00037     return NULL;
00038 }
00039 
00040 int WINAPI dkcFreeBuffer(DKC_BUFFER **ptr){
00041     if(NULL==ptr || NULL==*ptr) return edk_ArgumentException;
00042     dkcFree((void **)&(*ptr)->mBuff);
00043     dkcFree((void **)ptr);
00044     return edk_SUCCEEDED;
00045 }
00046 
00047 
00048 
00049 int WINAPI dkcBufferSet(DKC_BUFFER *ptr,const void *data,size_t size)
00050 {
00051     //if(NULL==ptr) return edk_ArgumentException;//
00052 
00053     return dkc_memcpy(ptr->mBuff,ptr->mSize,data,size);
00054 }
00055 
00056 
00057 int WINAPI dkcBufferSetOffset(DKC_BUFFER *ptr,
00058                                                             const void *data,size_t size,size_t offset){
00059     if(ptr->mSize < offset + size){
00060         return edk_BufferOverFlow;
00061     }
00062     return dkc_memcpy(
00063         ptr->mBuff + offset,
00064         ptr->mSize - offset
00065         ,data,size);
00066 }
00067 
00068 
00069 
00070 
00071 int WINAPI dkcBufferGet(DKC_BUFFER *ptr,void *data,size_t size){
00072     //if(NULL==ptr) return edk_ArgumentException;//fast
00073     return dkc_memcpy(data,size,ptr->mBuff,ptr->mSize);
00074 }
00075 
00076 int WINAPI dkcBufferGetOffset(DKC_BUFFER *ptr,
00077                                                             void *data,size_t size,size_t offset){
00078     if(ptr->mSize < offset + size){
00079         return edk_BufferOverFlow;
00080     }
00081     return dkc_memcpy(
00082         data,size,
00083         ptr->mBuff + offset,
00084         size
00085     );
00086 
00087 }
00088 
00089 int WINAPI dkcBufferResize(DKC_BUFFER *ptr,size_t size)
00090 {
00091     void *NewPtr;
00092     if(NULL==ptr || 0==size || NULL==ptr->mBuff) return edk_ArgumentException;
00093     if(DKUTIL_FAILED(dkcReallocate(&NewPtr,size,(void **)&(ptr->mBuff)))){
00094         return edk_FAILED;
00095     }
00096 
00097     ptr->mBuff = (BYTE *)NewPtr;
00098     ptr->mSize = size;
00099 
00100     return edk_SUCCEEDED;
00101 }
00102 
00103 
00104 
00105 DKC_BUFFER* WINAPI dkcAllocBufferCopy(const DKC_BUFFER *ptr){
00106     dkcmNOT_ASSERT(NULL==ptr || NULL==ptr->mBuff);
00107 
00108     return dkcAllocBuffer(ptr->mBuff,ptr->mSize);
00109 }
00110 
00111 size_t WINAPI dkcBufferSize(DKC_BUFFER *p){
00112     return p->mSize;
00113 }
00114 BYTE *WINAPI dkcBufferPointer(DKC_BUFFER *p){
00115     return p->mBuff;
00116 }

dkutil_cに対してSat Sep 10 09:23:55 2005に生成されました。  doxygen 1.4.4