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

# 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 }