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

# 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