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

dkcMemoryStream.h

可変長な配列をぶち込める。std::vectorみたいなもの。 [詳細]

#include "dkcOSIndependent.h"
#include "dkcDefined.h"
#include "dkcBuffer.h"
#include "dkcSerialize.h"

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

Include dependency graph

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

Included by dependency graph

ソースコードを見る。

構成

struct  dkc_MemoryStream
struct  dkc_MemoryStreamAdapter

マクロ定義

#define dkcMemoryStreamTell(tt)   dkcMemoryStreamGetSeekPoint(tt)
#define dkcMemoryStreamAdapterPushBackMacro(type, p, x)
 バッファオーバーフローする可能性があります。内部構造を知らないと危険です。

#define dkcMemoryStreamAdapterIsEnd(p)   ( (p)->mNowOffset >= (p)->mSize )

型定義

typedef dkc_MemoryStream DKC_MEMORYSTREAM
typedef dkc_MemoryStreamAdapter DKC_MEMORYSTREAM_ADAPTER

列挙型

enum  edkcMemoryStream { edkcMemoryStreamSeekCurrent = SEEK_CUR, edkcMemoryStreamSeekEnd = SEEK_END, edkcMemoryStreamSeekSet = SEEK_SET }

関数

DKC_EXTERN DKC_MEMORYSTREAM
*WINAPI 
dkcAllocMemoryStream (size_t size)
 ストリーム領域を得る。

DKC_EXTERN int WINAPI dkcFreeMemoryStream (DKC_MEMORYSTREAM **ptr)
 dkcAllocNewStream()で確保したストリーム領域を開放する

DKC_EXTERN int WINAPI dkcMemoryStreamSeek (DKC_MEMORYSTREAM *ptr, int offset, int origin)
 streamをシークする。fseekみたいなもの

DKC_EXTERN size_t WINAPI dkcMemoryStreamGetSeekPoint (DKC_MEMORYSTREAM *ptr)
 streamのシークポイントを返す。

DKC_EXTERN int WINAPI dkcMemoryStreamRead (DKC_MEMORYSTREAM *ptr, void *buffer, size_t size, size_t *readsize)
 streamをリードする。freadみたいなもの

DKC_EXTERN int WINAPI dkcMemoryStreamWrite (DKC_MEMORYSTREAM *ptr, const void *buffer, size_t size)
 streamをライトする。fwriteみたいなもの

DKC_EXTERN int WINAPI dkcMemoryStreamDynamicWrite (DKC_MEMORYSTREAM *ptr, const void *buffer, size_t size)
 streamをライトする。ライト出来なかったら内部で動的拡張する。

DKC_EXTERN int WINAPI dkcMemoryStreamResize (DKC_MEMORYSTREAM *ptr, size_t want_size)
 streamのバッファを拡張する。

DKC_EXTERN size_t WINAPI dkcMemoryStreamNowOffset (DKC_MEMORYSTREAM *p)
 今、どこまで書きこんでいるかのサイズを取得

DKC_EXTERN BYTE *WINAPI dkcMemoryStreamPointer (DKC_MEMORYSTREAM *p)
 内部バッファへのポインタを取得

DKC_EXTERN DKC_MEMORYSTREAM
*WINAPI 
dkcAllocMemoryStreamDeserialize (DKC_DESERIALIZE *se)
 DKC_SERIALIZEから新しいMemoryStreamを作る。.

DKC_EXTERN void dkcMemoryStreamSerialize (const DKC_MEMORYSTREAM *ptr, DKC_SERIALIZE *se)
 DKC_SERIALIZEにシリアライズデータをぶち込む.

DKC_EXTERN int WINAPI dkcMemoryStreamClear (DKC_MEMORYSTREAM *ptr)
 stream内をmemset(0)する。(seek位置も最初に戻される。

DKC_EXTERN DKC_MEMORYSTREAM
*WINAPI 
dkcAllocMemoryStreamCopy (const DKC_MEMORYSTREAM *ptr)
DKC_EXTERN void WINAPI dkcMemoryStreamAdapterInit (DKC_MEMORYSTREAM_ADAPTER *p, BYTE *buff, size_t size)
DKC_EXTERN int WINAPI dkcMemoryStreamAdapterPushBack (DKC_MEMORYSTREAM_ADAPTER *p, const BYTE *buff, size_t size)
DKC_EXTERN int WINAPI dkcMemoryStreamAdapterPopBack (DKC_MEMORYSTREAM_ADAPTER *p, size_t size)
DKC_EXTERN BYTE *WINAPI dkcMemoryStreamAdapterPointer (DKC_MEMORYSTREAM_ADAPTER *p)
DKC_EXTERN size_t WINAPI dkcMemoryStreamAdapterSize (DKC_MEMORYSTREAM_ADAPTER *p)
DKC_EXTERN int WINAPI dkcMemoryStreamAdapterSetOffset (DKC_MEMORYSTREAM_ADAPTER *ptr, size_t offset)
DKC_EXTERN size_t WINAPI dkcMemoryStreamAdapterGetOffset (DKC_MEMORYSTREAM_ADAPTER *p)


説明

可変長な配列をぶち込める。std::vectorみたいなもの。

覚え書き:
dkcMemoryStreamSerializeのシリアライズ済みファイルデータ構造
DKC_MEMORYSTREAM構造体 BYTE DKC_MEMORYSTREAM::mSize個分。

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


マクロ定義

#define dkcMemoryStreamAdapterIsEnd  )     ( (p)->mNowOffset >= (p)->mSize )
 

dkcMemoryStream.h144 行で定義されています。

#define dkcMemoryStreamAdapterPushBackMacro type,
p,
 ) 
 

値:

{\
    *((type *)&( (p)->mBuff[(p)->mNowOffset])) = (type)x;(p)->mNowOffset += sizeof(type);\
}
バッファオーバーフローする可能性があります。内部構造を知らないと危険です。

dkcMemoryStream.h141 行で定義されています。

#define dkcMemoryStreamTell tt   )     dkcMemoryStreamGetSeekPoint(tt)
 

dkcMemoryStream.h77 行で定義されています。

参照元 dkcStreamTell().


型定義

typedef struct dkc_MemoryStream DKC_MEMORYSTREAM
 

メモリストリーム構造体。fopen fwrite freadをメモリ城で行うようなストリーム。 C言語でstd::vectorみたいな感じで使う。

参照元 dkcAllocMemoryStream(), dkcAllocMemoryStreamCopy(), dkcAllocMemoryStreamDeserialize(), dkcAllocStringDeserialize(), dkcFree2TreeWithVector(), dkcFreeMemoryStream(), dkcFreeStream(), dkcMemoryStreamAutoExpandResize(), dkcMemoryStreamClear(), dkcMemoryStreamDynamicWrite(), dkcMemoryStreamGetSeekPoint(), dkcMemoryStreamNowOffset(), dkcMemoryStreamPointer(), dkcMemoryStreamRead(), dkcMemoryStreamResize(), dkcMemoryStreamSeek(), dkcMemoryStreamSeekLogic(), dkcMemoryStreamSerialize(), dkcMemoryStreamWrite(), dkcStreamClear(), dkcStreamRead(), dkcStreamSeek(), dkcStreamTell(), と dkcStreamWrite().

typedef struct dkc_MemoryStreamAdapter DKC_MEMORYSTREAM_ADAPTER
 

参照元 dkcMemoryStreamAdapterGetOffset(), dkcMemoryStreamAdapterInit(), dkcMemoryStreamAdapterPointer(), dkcMemoryStreamAdapterPopBack(), dkcMemoryStreamAdapterPushBack(), dkcMemoryStreamAdapterSetOffset(), と dkcMemoryStreamAdapterSize().


列挙型

enum edkcMemoryStream
 

列挙型の値:
edkcMemoryStreamSeekCurrent  今の位置からシーク
edkcMemoryStreamSeekEnd  最後の位置からシーク
edkcMemoryStreamSeekSet  最初の位置からシーク

dkcMemoryStream.h40 行で定義されています。

00040                      {
00042     edkcMemoryStreamSeekCurrent = SEEK_CUR,
00044     edkcMemoryStreamSeekEnd = SEEK_END,
00046     edkcMemoryStreamSeekSet = SEEK_SET,
00047 };


関数

DKC_EXTERN DKC_MEMORYSTREAM* WINAPI dkcAllocMemoryStream size_t  size  ) 
 

ストリーム領域を得る。

引数:
flag[in] edkcMemoryStreamにある、StreamInit系のものを渡す
size[in] ストリームの初期化時のサイズ
filename[in] edkcMemoryStreamInitFileをflagに渡した場合、その保存するファイルの名前 flagにedkcMemoryStreamInitFile以外の値を渡した場合はNULLでOK
mode[in] fopenのモード flagにedkcMemoryStreamInitFile以外の値を渡した場合はNULLでOK
戻り値:
DKC_MEMORYSTREAM *のストリームデータ。

dkcMemoryStream.c16 行で定義されています。

参照先 BYTE, DKC_MEMORYSTREAM, dkcAllocate(), dkcFree(), dkc_MemoryStream::mBuffer, dkc_MemoryStream::mNowOffset, dkc_MemoryStream::mSize, と NULL.

参照元 dkcAllocDeserialize(), dkcAllocMemoryStreamCopy(), dkcAllocMemoryStreamDeserialize(), dkcAllocSerialize(), dkcAllocStream(), dkcAllocString(), dkcAllocUniqueID(), と dkcFree2TreeWithVector().

00016                                                            {
00017     DKC_MEMORYSTREAM *p;
00018     if(0==size) return NULL;
00019 
00020     p = (DKC_MEMORYSTREAM *)dkcAllocate(sizeof(DKC_MEMORYSTREAM));
00021 
00022     if(NULL==p) return NULL;
00023     p->mBuffer = (BYTE *)dkcAllocate(size);
00024     if(NULL==p->mBuffer) goto Error;
00025 
00026     p->mSize = size;
00027     p->mNowOffset = 0;
00028     return p;
00029 Error:
00030     dkcFree((void **)&p);
00031     return NULL;
00032 
00033 }

DKC_EXTERN DKC_MEMORYSTREAM* WINAPI dkcAllocMemoryStreamCopy const DKC_MEMORYSTREAM ptr  ) 
 

戻り値:
成功したらそのオブジェクトへのポインタが返る。失敗したらNULLが返る。
覚え書き:
C++で言うコピーコンストラクタ。

dkcMemoryStream.c281 行で定義されています。

参照先 DKC_MEMORYSTREAM, dkcAllocMemoryStream(), dkcMemoryStreamSeek(), dkcMemoryStreamWrite(), dkcmNOT_ASSERT, edkcMemoryStreamSeekSet, dkc_MemoryStream::mBuffer, dkc_MemoryStream::mNowOffset, と NULL.

00282 {
00283     DKC_MEMORYSTREAM *tp = NULL;
00284 
00285     dkcmNOT_ASSERT(NULL==ptr);
00286 
00287     tp = dkcAllocMemoryStream(ptr->mSize);
00288     if(NULL==tp) return NULL;
00289 
00290     dkcMemoryStreamWrite(tp,ptr->mBuffer,ptr->mSize);
00291 
00292     //内部オフセット変更                                    /* 先頭から */
00293     dkcMemoryStreamSeek(tp,ptr->mNowOffset,edkcMemoryStreamSeekSet);
00294     return tp;
00295 }

DKC_EXTERN DKC_MEMORYSTREAM* WINAPI dkcAllocMemoryStreamDeserialize DKC_DESERIALIZE se  ) 
 

DKC_SERIALIZEから新しいMemoryStreamを作る。.

dkcMemoryStream.c300 行で定義されています。

参照先 DKC_DESERIALIZE, DKC_MEMORYSTREAM, dkcAllocMemoryStream(), dkcDeserializeRead(), dkcmNOT_ASSERT, dkc_MemoryStream::mBuffer, dkc_MemoryStream::mNowOffset, と NULL.

参照元 dkcAllocStringDeserialize().

00301 {
00302     DKC_MEMORYSTREAM *p;
00303     DKC_MEMORYSTREAM t;
00304     size_t read;
00305     //dkcmNOT_ASSERT(NULL==se);
00306     
00307 
00308     dkcDeserializeRead(se,&t,sizeof(t),&read);
00309     
00310     p = dkcAllocMemoryStream(t.mSize);
00311     if(NULL==p) return NULL;
00312 
00313     /* シリアライズデータと同じにしないと^^; */
00314 
00315     dkcDeserializeRead(se,p->mBuffer,t.mSize,&read);
00316     
00317     dkcmNOT_ASSERT(read != t.mSize);
00318 
00319     
00320     p->mNowOffset = t.mNowOffset;
00321     
00322     return p;
00323 }

DKC_EXTERN int WINAPI dkcFreeMemoryStream DKC_MEMORYSTREAM **  ptr  ) 
 

dkcAllocNewStream()で確保したストリーム領域を開放する

引数:
ptr[in][out] 削除するストリームデータ。入れたデータはNULLになる。

dkcMemoryStream.c36 行で定義されています。

参照先 DKC_MEMORYSTREAM, dkcFree(), と NULL.

参照元 dkcAllocDeserialize(), dkcAllocSerialize(), dkcAllocStringDeserialize(), dkcFreeDeserialize(), dkcFreeSerialize(), dkcFreeStream(), dkcFreeString(), と dkcFreeUniqueID().

00036                                                       {
00037     if(NULL==ptr || NULL==*ptr) return edk_ArgumentException;
00038     if(NULL==(*ptr)->mBuffer) return edk_FAILED;
00039 
00040     dkcFree((void **)&((*ptr)->mBuffer));
00041     return dkcFree((void **)ptr);
00042 }

DKC_EXTERN size_t WINAPI dkcMemoryStreamAdapterGetOffset DKC_MEMORYSTREAM_ADAPTER p  ) 
 

dkcMemoryStream.c388 行で定義されています。

参照先 DKC_MEMORYSTREAM_ADAPTER, と dkc_MemoryStreamAdapter::mNowOffset.

00388                                                                           {
00389     return p->mNowOffset;
00390 }

DKC_EXTERN void WINAPI dkcMemoryStreamAdapterInit DKC_MEMORYSTREAM_ADAPTER p,
BYTE buff,
size_t  size
 

dkcMemoryStream.c338 行で定義されています。

参照先 BYTE, DKC_MEMORYSTREAM_ADAPTER, dkc_MemoryStreamAdapter::mBuff, dkc_MemoryStreamAdapter::mNowOffset, と dkc_MemoryStreamAdapter::mSize.

00339 {
00340     p->mBuff = buff;
00341     p->mSize = size;
00342     p->mNowOffset = 0;
00343 
00344 }

DKC_EXTERN BYTE* WINAPI dkcMemoryStreamAdapterPointer DKC_MEMORYSTREAM_ADAPTER p  ) 
 

dkcMemoryStream.c372 行で定義されています。

参照先 BYTE, DKC_MEMORYSTREAM_ADAPTER, と dkc_MemoryStreamAdapter::mBuff.

00372                                                                        {
00373  return p->mBuff;
00374 }

DKC_EXTERN int WINAPI dkcMemoryStreamAdapterPopBack DKC_MEMORYSTREAM_ADAPTER p,
size_t  size
 

dkcMemoryStream.c363 行で定義されています。

参照先 DKC_MEMORYSTREAM_ADAPTER, と dkc_MemoryStreamAdapter::mNowOffset.

00364 {
00365     if(size > p->mNowOffset){
00366         return edk_FAILED;
00367     }
00368     p->mNowOffset -= size;
00369     return edk_SUCCEEDED;
00370 }

DKC_EXTERN int WINAPI dkcMemoryStreamAdapterPushBack DKC_MEMORYSTREAM_ADAPTER p,
const BYTE buff,
size_t  size
 

dkcMemoryStream.c346 行で定義されています。

参照先 BYTE, DKC_MEMORYSTREAM_ADAPTER, dkcCheckOverflowULONG(), dkc_MemoryStreamAdapter::mBuff, dkc_MemoryStreamAdapter::mNowOffset, と dkc_MemoryStreamAdapter::mSize.

00347 {
00348     size_t offset = p->mNowOffset;
00349     BYTE *tb = p->mBuff;
00350     if(dkcCheckOverflowULONG(offset,size)){
00351         return edk_FAILED;
00352     }
00353     if(offset + size >= p->mSize){
00354         return edk_BufferOverFlow;
00355     }
00356     memcpy(&tb[offset],buff,size);
00357 
00358     p->mNowOffset += size;
00359 
00360     return edk_SUCCEEDED;
00361 }

DKC_EXTERN int WINAPI dkcMemoryStreamAdapterSetOffset DKC_MEMORYSTREAM_ADAPTER ptr,
size_t  offset
 

dkcMemoryStream.c381 行で定義されています。

参照先 DKC_MEMORYSTREAM_ADAPTER, dkc_MemoryStreamAdapter::mNowOffset, と dkc_MemoryStreamAdapter::mSize.

00381                                                                                      {
00382     if(offset > p->mSize){
00383         return edk_FAILED;
00384     }
00385     p->mNowOffset = offset;
00386     return edk_SUCCEEDED;
00387 }

DKC_EXTERN size_t WINAPI dkcMemoryStreamAdapterSize DKC_MEMORYSTREAM_ADAPTER p  ) 
 

dkcMemoryStream.c376 行で定義されています。

参照先 DKC_MEMORYSTREAM_ADAPTER, と dkc_MemoryStreamAdapter::mSize.

00376                                                                      {
00377     return p->mSize;
00378 
00379 }

DKC_EXTERN int WINAPI dkcMemoryStreamClear DKC_MEMORYSTREAM ptr  ) 
 

stream内をmemset(0)する。(seek位置も最初に戻される。

dkcMemoryStream.c264 行で定義されています。

参照先 DKC_MEMORYSTREAM, dkcmNOT_ASSERT, と NULL.

参照元 dkcStreamClear(), と dkcStringCopy().

00264                                                       {
00265     dkcmNOT_ASSERT(NULL==ptr);
00266     //if(NULL==ptr) return edk_ArgumentException;
00267     memset(ptr->mBuffer,0,ptr->mSize);
00268     ptr->mNowOffset = 0;
00269     return edk_SUCCEEDED;
00270 }

DKC_EXTERN int WINAPI dkcMemoryStreamDynamicWrite DKC_MEMORYSTREAM ptr,
const void *  buffer,
size_t  size
 

streamをライトする。ライト出来なかったら内部で動的拡張する。

dkcMemoryStream.c238 行で定義されています。

参照先 DKC_MEMORYSTREAM, dkcMemoryStreamAutoExpandResize(), dkcMemoryStreamWrite(), dkc_MemoryStream::mNowOffset, dkc_MemoryStream::mSize, と NULL.

参照元 dkcSerializeWrite(), dkcStringConcatenate(), と dkcStringCopy().

00238                                                                                             {
00239     int result;
00240     size_t want_size;
00241 
00242     if(NULL==ptr) return edk_ArgumentException;
00243 
00244     want_size =  ptr->mNowOffset + size;
00245 
00246     if(ptr->mSize < want_size)
00247     {
00248         result = dkcMemoryStreamAutoExpandResize(ptr,size);
00249         //result = dkcMemoryStreamResize(ptr,want_size);
00250         if(DKUTIL_FAILED(result)) return edk_FAILED;
00251     }
00252 
00253     return dkcMemoryStreamWrite(ptr,buffer,size);
00254 }

DKC_EXTERN size_t WINAPI dkcMemoryStreamGetSeekPoint DKC_MEMORYSTREAM ptr  ) 
 

streamのシークポイントを返す。

dkcMemoryStream.c92 行で定義されています。

参照先 DKC_MEMORYSTREAM, と dkc_MemoryStream::mNowOffset.

参照元 dkcStringInsert().

00093 {
00094     return ptr->mNowOffset;
00095 }

DKC_EXTERN size_t WINAPI dkcMemoryStreamNowOffset DKC_MEMORYSTREAM p  ) 
 

今、どこまで書きこんでいるかのサイズを取得

dkcMemoryStream.c272 行で定義されています。

参照先 DKC_MEMORYSTREAM, と dkc_MemoryStream::mNowOffset.

参照元 dkcFree2TreeWithVector().

00272                                                                       {
00273     return p->mNowOffset;
00274 }

DKC_EXTERN BYTE* WINAPI dkcMemoryStreamPointer DKC_MEMORYSTREAM p  ) 
 

内部バッファへのポインタを取得

dkcMemoryStream.c276 行で定義されています。

参照先 BYTE, DKC_MEMORYSTREAM, と dkc_MemoryStream::mBuffer.

参照元 dkcFree2TreeWithVector().

00276                                                                    {
00277     return p->mBuffer;
00278 
00279 }

DKC_EXTERN int WINAPI dkcMemoryStreamRead DKC_MEMORYSTREAM ptr,
void *  buffer,
size_t  size,
size_t *  readsize
 

streamをリードする。freadみたいなもの

引数:
readsize[out] 実際に読んだサイズを返す。NULLを渡してもOK.
覚え書き:
指定したサイズ(size)よりもストリームバッファのサイズが小さかった場合 readsizeに実際に読んだサイズを入れます。

dkcMemoryStream.c97 行で定義されています。

参照先 dkc_memcpy(), DKC_MEMORYSTREAM, dkc_MemoryStream::mBuffer, dkc_MemoryStream::mNowOffset, dkc_MemoryStream::mSize, と NULL.

参照元 dkcDeserializeRead(), と dkcStreamRead().

00097                                                                                                {
00098 
00099     
00100     size_t f_read = 0;
00101     //error check
00102 
00103     if(NULL==ptr || NULL==readsize) return edk_ArgumentException;
00104 
00105     //Read = (int)(ptr->mNowOffset + size); 
00106     //Read = (int)(ptr->mSize - Read); 
00107     //if(Read < 0) return edk_BufferOverFlow;
00108     
00109     //process...
00110 
00111     f_read = ptr->mNowOffset + size;
00112 
00113     if(ptr->mSize <= f_read){
00114         f_read = ptr->mSize - ptr->mNowOffset;
00115         if(0==f_read) return edk_BufferOverFlow;
00116     }else{
00117         f_read = size;
00118     }
00119 
00120 
00121     //酷バグ:まずい、酷いバグだ。
00122     /*dkcmNOT_ASSERT(edk_FAILED==dkc_memcpy(buffer,size,
00123         ptr->mBuffer + ptr->mNowOffset,f_read
00124     ));*/
00125     if(DKUTIL_FAILED(dkc_memcpy(buffer,size,ptr->mBuffer + ptr->mNowOffset,f_read)))
00126     {
00127         return edk_FAILED;
00128     }
00129 
00130     //update...
00131     ptr->mNowOffset += f_read;
00132     *readsize = f_read;
00133     
00134     return edk_SUCCEEDED;
00135 }

DKC_EXTERN int WINAPI dkcMemoryStreamResize DKC_MEMORYSTREAM ptr,
size_t  want_size
 

streamのバッファを拡張する。

dkcMemoryStream.c138 行で定義されています。

参照先 BYTE, DKC_MEMORYSTREAM, dkcReallocate(), dkc_MemoryStream::mBuffer, dkc_MemoryStream::mSize, と NULL.

00139 {
00140     int ra_r = 0;
00141     void *NewPtr = NULL;
00142     void *OldPtr = NULL;
00143     
00144     //error check
00145     if(NULL==ptr) return edk_ArgumentException;
00146 
00147 
00148     //process
00149     OldPtr = ptr->mBuffer;
00150 
00151     ra_r = dkcReallocate(&NewPtr,want_size,&OldPtr);
00152     if(DKUTIL_FAILED(ra_r)){
00153         return edk_FAILED;
00154     }
00155 
00156     //update...
00157     ptr->mBuffer = (BYTE *)NewPtr;
00158     ptr->mSize = want_size;
00159 
00160 
00161     return edk_SUCCEEDED;
00162 }

DKC_EXTERN int WINAPI dkcMemoryStreamSeek DKC_MEMORYSTREAM ptr,
int  offset,
int  origin
 

streamをシークする。fseekみたいなもの

dkcMemoryStream.c71 行で定義されています。

参照先 DKC_MEMORYSTREAM, dkcMemoryStreamSeekLogic(), edkcMemoryStreamSeekCurrent, edkcMemoryStreamSeekEnd, edkcMemoryStreamSeekSet, dkc_MemoryStream::mNowOffset, dkc_MemoryStream::mSize, と NULL.

参照元 dkcAllocMemoryStreamCopy(), dkcStreamSeek(), dkcStringCopy(), と dkcStringErase().

00071                                                                            {
00072     int result = edk_FAILED;
00073     if(NULL==ptr) return edk_ArgumentException;
00074     switch(origin)
00075     {
00076     case edkcMemoryStreamSeekCurrent://今の位置からシーク
00077         result = dkcMemoryStreamSeekLogic(ptr,offset,ptr->mNowOffset,origin);
00078         break;
00079     case edkcMemoryStreamSeekEnd://最後の位置からシーク
00080         result = dkcMemoryStreamSeekLogic(ptr,offset,0,origin);
00081         break;
00082     case edkcMemoryStreamSeekSet://最初の位置からシーク
00083         result = dkcMemoryStreamSeekLogic(ptr,offset,ptr->mSize /*- 1*/,origin);
00084         break;
00085     default:
00086         //変な引数入れるな!
00087         return edk_ArgumentException;
00088     }
00089     return result;
00090 }

DKC_EXTERN void dkcMemoryStreamSerialize const DKC_MEMORYSTREAM ptr,
DKC_SERIALIZE se
 

DKC_SERIALIZEにシリアライズデータをぶち込む.

dkcMemoryStream.c327 行で定義されています。

参照先 DKC_MEMORYSTREAM, DKC_SERIALIZE, dkcmNOT_ASSERT, dkcSerializeWrite(), と NULL.

参照元 dkcStringSerialize().

00328 {
00329     dkcmNOT_ASSERT(NULL==ptr);
00330 
00331     dkcSerializeWrite(se,ptr,sizeof(*ptr));
00332     dkcSerializeWrite(se,ptr->mBuffer,ptr->mSize);
00333 
00334 }

DKC_EXTERN int WINAPI dkcMemoryStreamWrite DKC_MEMORYSTREAM ptr,
const void *  buffer,
size_t  size
 

streamをライトする。fwriteみたいなもの

覚え書き:
内部ストリームバッファは動的拡張です。気にせずどんどんぶち込みましょう。 C言語版のSTLのstd::vectorみたいなものですね。(といいますか、車輪の再開発してるし・・・。

dkcMemoryStream.c213 行で定義されています。

参照先 BYTE, dkc_memcpy(), DKC_MEMORYSTREAM, dkc_MemoryStream::mBuffer, dkc_MemoryStream::mNowOffset, dkc_MemoryStream::mSize, と NULL.

参照元 dkcAllocMemoryStreamCopy(), dkcFree2TreeWithVector(), dkcMemoryStreamDynamicWrite(), と dkcStreamWrite().

00213                                                                                      {
00214     size_t rest;
00215 
00216     if(NULL==ptr) return edk_ArgumentException;
00217     
00218 
00219     if(ptr->mSize < ptr->mNowOffset + size){return edk_FAILED;}
00220     rest = ptr->mSize - ptr->mNowOffset;
00221     
00222     //酷バグ:dkcmNOT_ASSERTはDEBUGモード時にしか展開されない。
00223     /*dkcmNOT_ASSERT(
00224     ));*/
00225     if(DKUTIL_FAILED(dkc_memcpy(
00226         (void *)((BYTE *)ptr->mBuffer + ptr->mNowOffset),
00227         rest,
00228         buffer,size))){
00229         return edk_FAILED;
00230     }
00231     
00232     ptr->mNowOffset += size;
00233     
00234     return edk_SUCCEEDED;
00235 }


dkutil_cに対してTue Feb 22 02:02:32 2005に生成されました。 doxygen 1.3.6