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

dkcBuffer.h

超簡易バッファールーチン [詳細]

#include "dkcOSIndependent.h"
#include "dkcStdio.h"

dkcBuffer.hのインクルード依存関係図

このグラフは、どのファイルから直接、間接的にインクルードされているかを示しています。

ソースコードを見る。

構成

struct  dkc_Buffer

型定義

typedef dkc_Buffer DKC_BUFFER

関数

DKC_EXTERN DKC_BUFFER *WINAPI dkcAllocBuffer (const void *data, size_t size)
 バッファ領域を得る。
DKC_EXTERN int WINAPI dkcFreeBuffer (DKC_BUFFER **ptr)
 dkcAllocBuffer()で確保したリスト領域と内部バッファを削除。dkcAllocBufferと対。
DKC_INLINE void dkcBufferInit (DKC_BUFFER *p, size_t size)
 dkcAllocBuffer()を使わないで初期化。
DKC_INLINE void dkcBufferUninit (DKC_BUFFER *p)
 dkcBufferInit()で初期化したものの終了処理
DKC_INLINE int dkcBufferCopy (DKC_BUFFER *p, const DKC_BUFFER *src)
DKC_INLINE void dkcBufferCopyShared (DKC_BUFFER *p, DKC_BUFFER *src)
DKC_EXTERN int WINAPI dkcBufferSet (DKC_BUFFER *ptr, const void *data, size_t size)
DKC_EXTERN int WINAPI dkcBufferSetOffset (DKC_BUFFER *ptr, const void *data, size_t size, size_t offset)
 バッファの先頭からoffset分の所にdataをぶち込む
DKC_EXTERN int WINAPI dkcBufferGet (DKC_BUFFER *ptr, void *data, size_t size)
DKC_EXTERN int WINAPI dkcBufferGetOffset (DKC_BUFFER *ptr, void *data, size_t size, size_t offset)
DKC_EXTERN int WINAPI dkcBufferResize (DKC_BUFFER *ptr, size_t size)
DKC_EXTERN DKC_BUFFER *WINAPI dkcAllocBufferCopy (const DKC_BUFFER *)
 C++で言うcopy constructor
DKC_EXTERN size_t WINAPI dkcBufferSize (DKC_BUFFER *p)
 バッファのサイズ
DKC_EXTERN BYTE *WINAPI dkcBufferPointer (DKC_BUFFER *p)
DKC_INLINE int WINAPI dkcBufferSet_INL (DKC_BUFFER *ptr, const void *data, size_t size)
DKC_INLINE int WINAPI dkcBufferSetOffset_INL (DKC_BUFFER *ptr, const void *data, size_t size, size_t offset)
DKC_INLINE int WINAPI dkcBufferGet_INL (DKC_BUFFER *ptr, void *data, size_t size)
DKC_INLINE int WINAPI dkcBufferGetOffset_INL (DKC_BUFFER *ptr, void *data, size_t size, size_t offset)
DKC_INLINE int WINAPI dkcBufferResize_INL (DKC_BUFFER *ptr, size_t size)
DKC_INLINE DKC_BUFFER *WINAPI dkcAllocBufferCopy_INL (const DKC_BUFFER *ptr)
DKC_INLINE size_t WINAPI dkcBufferSize_INL (DKC_BUFFER *p)
DKC_INLINE BYTE *WINAPI dkcBufferPointer_INL (DKC_BUFFER *p)


説明

超簡易バッファールーチン

作者:
d金魚
から:
2004/3/xx
覚え書き:
基本的に、プログラム側で操作するタイプのバッファー。 エラーを起こさないように注意しよう。

dkcBuffer.h で定義されています。


型定義

typedef struct dkc_Buffer DKC_BUFFER
 

バッファー構造体


関数

DKC_EXTERN DKC_BUFFER* WINAPI dkcAllocBuffer const void *  data,
size_t  size
 

バッファ領域を得る。

引数:
data[in] バッファへコピーしたいデータへのポインタ
size[in] バッファのサイズ(dataのサイズ)

dkcBuffer.c13 行で定義されています。

参照先 BYTE, dkcAllocate(), dkcBufferSet(), dkcFree(), dkc_Buffer::mBuff, dkc_Buffer::mSize, と NULL.

参照元 dkcAllocArrayOneByOne(), dkcAllocBufferCopy_INL(), dkcAllocDCF_Version01_SNOW2(), dkcAllocSingleListBuffer(), と dkcOpenFileWithSignature().

00013                                                                {
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 }

DKC_EXTERN DKC_BUFFER* WINAPI dkcAllocBufferCopy const DKC_BUFFER  ) 
 

C++で言うcopy constructor

dkcBuffer.c79 行で定義されています。

参照先 dkcAllocBufferCopy_INL().

00079                                                             {
00080     return dkcAllocBufferCopy_INL(ptr);
00081 }

DKC_INLINE DKC_BUFFER* WINAPI dkcAllocBufferCopy_INL const DKC_BUFFER ptr  ) 
 

dkcBuffer.h164 行で定義されています。

参照先 dkcAllocBuffer(), dkcmNOT_ASSERT, dkc_Buffer::mBuff, dkc_Buffer::mSize, と NULL.

参照元 dkcAllocBufferCopy().

00164                                                                            {
00165     dkcmNOT_ASSERT(NULL==ptr || NULL==ptr->mBuff);
00166 
00167     return dkcAllocBuffer(ptr->mBuff,ptr->mSize);
00168 }

DKC_INLINE int dkcBufferCopy DKC_BUFFER p,
const DKC_BUFFER src
 

dkcBuffer.h61 行で定義されています。

参照先 BYTE, dkcAllocate(), dkcFree(), dkc_Buffer::mBuff, dkc_Buffer::mSize, と NULL.

00061                                                                  {
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 }

DKC_INLINE void dkcBufferCopyShared DKC_BUFFER p,
DKC_BUFFER src
 

dkcBuffer.h73 行で定義されています。

参照先 dkc_Buffer::mBuff, と dkc_Buffer::mSize.

00073                                                                   {
00074     p->mBuff = src->mBuff;
00075     p->mSize = src->mSize;
00076 }

DKC_EXTERN int WINAPI dkcBufferGet DKC_BUFFER ptr,
void *  data,
size_t  size
 

バッファの先頭からsize分データをいただく

dkcBuffer.c63 行で定義されています。

参照先 dkcBufferGet_INL().

00063                                                                {
00064     return dkcBufferGet_INL(ptr,data,size);
00065 }

DKC_INLINE int WINAPI dkcBufferGet_INL DKC_BUFFER ptr,
void *  data,
size_t  size
 

dkcBuffer.h130 行で定義されています。

参照先 dkc_memcpy(), dkc_Buffer::mBuff, と dkc_Buffer::mSize.

参照元 dkcBufferGet().

00130                                                                               {
00131     //if(NULL==ptr) return edk_ArgumentException;//fast
00132     return dkc_memcpy(data,size,ptr->mBuff,ptr->mSize);
00133 }

DKC_EXTERN int WINAPI dkcBufferGetOffset DKC_BUFFER ptr,
void *  data,
size_t  size,
size_t  offset
 

dkcBuffer.c67 行で定義されています。

参照先 dkcBufferGetOffset_INL().

参照元 dkcArrayOneByOneReference().

00068                                                                                                  {
00069     return dkcBufferGetOffset_INL(ptr,data,size,offset);
00070 }

DKC_INLINE int WINAPI dkcBufferGetOffset_INL DKC_BUFFER ptr,
void *  data,
size_t  size,
size_t  offset
 

dkcBuffer.h135 行で定義されています。

参照先 dkc_memcpy(), dkc_Buffer::mBuff, と dkc_Buffer::mSize.

参照元 dkcBufferGetOffset().

00136                                                                                                  {
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 }

DKC_INLINE void dkcBufferInit DKC_BUFFER p,
size_t  size
 

dkcAllocBuffer()を使わないで初期化。

警告:
よってこの関数の使用にはメモリの状態遷移をしっかり頭に入れておく事が重要
覚え書き:
なお、InitおよびUninitはdkcRedBlackTree.hと密接にかかわっている。

dkcBuffer.h50 行で定義されています。

参照先 BYTE, dkcAllocate(), dkc_Buffer::mBuff, と dkc_Buffer::mSize.

00050                                                         {
00051     p->mBuff=(BYTE *)dkcAllocate(size);
00052     p->mSize = size;
00053 }

DKC_EXTERN BYTE* WINAPI dkcBufferPointer DKC_BUFFER p  ) 
 

dkcBuffer.c86 行で定義されています。

参照先 dkcBufferPointer_INL().

参照元 dkcFileWithSignatureCheckCheat(), と FileWithSignatureGetDigest().

00086                                             {
00087     return dkcBufferPointer_INL(p);
00088 }

DKC_INLINE BYTE* WINAPI dkcBufferPointer_INL DKC_BUFFER p  ) 
 

dkcBuffer.h173 行で定義されています。

参照先 dkc_Buffer::mBuff.

参照元 dkcBufferPointer().

00173                                                            {
00174     return p->mBuff;
00175 }

DKC_EXTERN int WINAPI dkcBufferResize DKC_BUFFER ptr,
size_t  size
 

バッファのサイズを変える。

dkcBuffer.c72 行で定義されています。

参照先 dkcBufferResize_INL().

参照元 BufferResize().

00073 {
00074     return dkcBufferResize_INL(ptr,size);
00075 }

DKC_INLINE int WINAPI dkcBufferResize_INL DKC_BUFFER ptr,
size_t  size
 

dkcBuffer.h148 行で定義されています。

参照先 BYTE, dkcReallocate(), dkc_Buffer::mBuff, dkc_Buffer::mSize, と NULL.

参照元 dkcBufferResize().

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 }

DKC_EXTERN int WINAPI dkcBufferSet DKC_BUFFER ptr,
const void *  data,
size_t  size
 

バッファの先頭にdataをぶち込む

dkcBuffer.c49 行で定義されています。

参照先 dkcBufferSet_INL().

参照元 dkcAllocBuffer().

00050 {
00051     return dkcBufferSet_INL(ptr,data,size);
00052 }

DKC_INLINE int WINAPI dkcBufferSet_INL DKC_BUFFER ptr,
const void *  data,
size_t  size
 

dkcBuffer.h108 行で定義されています。

参照先 dkc_memcpy(), dkc_Buffer::mBuff, と dkc_Buffer::mSize.

参照元 dkcBufferSet().

00109 {
00110     //if(NULL==ptr) return edk_ArgumentException;//
00111 
00112     return dkc_memcpy(ptr->mBuff,ptr->mSize,data,size);
00113 }

DKC_EXTERN int WINAPI dkcBufferSetOffset DKC_BUFFER ptr,
const void *  data,
size_t  size,
size_t  offset
 

バッファの先頭からoffset分の所にdataをぶち込む

dkcBuffer.c55 行で定義されています。

参照先 dkcBufferSetOffset_INL().

参照元 setData().

00056                                                                                                        {
00057     return dkcBufferSetOffset_INL(ptr,data,size,offset);
00058 }

DKC_INLINE int WINAPI dkcBufferSetOffset_INL DKC_BUFFER ptr,
const void *  data,
size_t  size,
size_t  offset
 

dkcBuffer.h116 行で定義されています。

参照先 dkc_memcpy(), dkc_Buffer::mBuff, と dkc_Buffer::mSize.

参照元 dkcBufferSetOffset().

00117                                                                                                        {
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 }

DKC_EXTERN size_t WINAPI dkcBufferSize DKC_BUFFER p  ) 
 

バッファのサイズ

dkcBuffer.c83 行で定義されています。

参照先 dkcBufferSize_INL().

参照元 BufferResize(), dkcFileWithSignatureCheckCheat(), と FileWithSignatureGetDigest().

00083                                           {
00084     return dkcBufferSize_INL(p);
00085 }

DKC_INLINE size_t WINAPI dkcBufferSize_INL DKC_BUFFER p  ) 
 

dkcBuffer.h170 行で定義されています。

参照先 dkc_Buffer::mSize.

参照元 dkcBufferSize().

00170                                                          {
00171     return p->mSize;
00172 }

DKC_INLINE void dkcBufferUninit DKC_BUFFER p  ) 
 

dkcBufferInit()で初期化したものの終了処理

dkcBuffer.h55 行で定義されています。

参照先 dkcFree(), dkc_Buffer::mBuff, と dkc_Buffer::mSize.

00055                                               {
00056     if(p->mBuff){
00057         dkcFree((void **)&p->mBuff);
00058     }
00059     p->mSize = 0;
00060 }

DKC_EXTERN int WINAPI dkcFreeBuffer DKC_BUFFER **  ptr  ) 
 

dkcAllocBuffer()で確保したリスト領域と内部バッファを削除。dkcAllocBufferと対。

DKC_BUFFERをデリート

覚え書き:
必ず使用したあとはこれを呼んでください。

dkcBuffer.c40 行で定義されています。

参照先 dkcFree(), と NULL.

参照元 dkcAllocArrayOneByOne(), dkcCloseFileWithSignature(), dkcFreeArrayOneByOne(), と dkcFreeDCF01().

00040                                           {
00041     if(NULL==ptr || NULL==*ptr) return edk_ArgumentException;
00042     dkcFree((void **)&(*ptr)->mBuff);
00043     dkcFree((void **)ptr);
00044     return edk_SUCCEEDED;
00045 }


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