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

# 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.c の 13 行で定義されています。 参照先 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.c の 79 行で定義されています。 参照先 dkcAllocBufferCopy_INL().
    00079                                                             {
    00080     return dkcAllocBufferCopy_INL(ptr);
    00081 }

DKC_INLINE DKC_BUFFER* WINAPI dkcAllocBufferCopy_INL | ( | const DKC_BUFFER * | ptr | ) |

| dkcBuffer.h の 164 行で定義されています。 参照先 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.h の 61 行で定義されています。 参照先 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.h の 73 行で定義されています。 参照先 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.c の 63 行で定義されています。 参照先 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.h の 130 行で定義されています。 参照先 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.c の 67 行で定義されています。 参照先 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.h の 135 行で定義されています。 参照先 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.h の 50 行で定義されています。 参照先 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.c の 86 行で定義されています。 参照先 dkcBufferPointer_INL(). 参照元 dkcFileWithSignatureCheckCheat(), と FileWithSignatureGetDigest().
    00086                                             {
    00087     return dkcBufferPointer_INL(p);
    00088 }

DKC_INLINE BYTE* WINAPI dkcBufferPointer_INL | ( | DKC_BUFFER * | p | ) |

| dkcBuffer.h の 173 行で定義されています。 参照先 dkc_Buffer::mBuff. 参照元 dkcBufferPointer().
    00173                                                            {
    00174     return p->mBuff;
    00175 }

DKC_EXTERN int WINAPI dkcBufferResize | ( | DKC_BUFFER * | ptr,
|  | size_t | size
| ) |

| バッファのサイズを変える。 dkcBuffer.c の 72 行で定義されています。 参照先 dkcBufferResize_INL(). 参照元 BufferResize().
    00073 {
    00074     return dkcBufferResize_INL(ptr,size);
    00075 }

DKC_INLINE int WINAPI dkcBufferResize_INL | ( | DKC_BUFFER * | ptr,
|  | size_t | size
| ) |

| dkcBuffer.h の 148 行で定義されています。 参照先 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.c の 49 行で定義されています。 参照先 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.h の 108 行で定義されています。 参照先 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.c の 55 行で定義されています。 参照先 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.h の 116 行で定義されています。 参照先 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.c の 83 行で定義されています。 参照先 dkcBufferSize_INL(). 参照元 BufferResize(), dkcFileWithSignatureCheckCheat(), と FileWithSignatureGetDigest().
    00083                                           {
    00084     return dkcBufferSize_INL(p);
    00085 }

DKC_INLINE size_t WINAPI dkcBufferSize_INL | ( | DKC_BUFFER * | p | ) |

| dkcBuffer.h の 170 行で定義されています。 参照先 dkc_Buffer::mSize. 参照元 dkcBufferSize().
    00170                                                          {
    00171     return p->mSize;
    00172 }

DKC_INLINE void dkcBufferUninit | ( | DKC_BUFFER * | p | ) |

| dkcBufferInit()で初期化したものの終了処理 dkcBuffer.h の 55 行で定義されています。 参照先 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.c の 40 行で定義されています。 参照先 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 }