#include <stdio.h>
#include "dkcOSIndependent.h"
#include "dkcDefined.h"
#include "dkcBuffer.h"
#include "dkcSerialize.h"
dkcMemoryStream.hのインクルード依存関係図

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

構成 | |
| struct | dkc_MemoryStream |
マクロ定義 | |
| #define | dkcMemoryStreamTell(tt) dkcMemoryStreamGetSeekPoint(tt) |
型定義 | |
| typedef dkc_MemoryStream | DKC_MEMORYSTREAM |
列挙型 | |
| 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 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) |
dkcMemoryStream.h で定義されています。
|
|
dkcMemoryStream.h の 77 行で定義されています。 参照元 dkcStreamTell(). |
|
|
メモリストリーム構造体。fopen fwrite freadをメモリ城で行うようなストリーム。 C言語でstd::vectorみたいな感じで使う。 参照元 dkcAllocMemoryStream(), dkcAllocMemoryStreamCopy(), dkcAllocMemoryStreamDeserialize(), dkcAllocStringDeserialize(), dkcFreeMemoryStream(), dkcFreeStream(), dkcMemoryStreamAutoExpandResize(), dkcMemoryStreamClear(), dkcMemoryStreamDynamicWrite(), dkcMemoryStreamGetSeekPoint(), dkcMemoryStreamRead(), dkcMemoryStreamResize(), dkcMemoryStreamSeek(), dkcMemoryStreamSeekLogic(), dkcMemoryStreamSerialize(), と dkcMemoryStreamWrite(). |
|
|
dkcMemoryStream.h の 40 行で定義されています。
00040 {
00042 edkcMemoryStreamSeekCurrent = SEEK_CUR,
00044 edkcMemoryStreamSeekEnd = SEEK_END,
00046 edkcMemoryStreamSeekSet = SEEK_SET,
00047 };
|
|
|
ストリーム領域を得る。 d金魚
dkcMemoryStream.c の 16 行で定義されています。 参照先 DKC_MEMORYSTREAM, dkcAllocate(), dkcFree(), dkc_MemoryStream::mBuffer, dkc_MemoryStream::mNowOffset, dkc_MemoryStream::mSize, と NULL. 参照元 dkcAllocDeserialize(), dkcAllocMemoryStreamCopy(), dkcAllocMemoryStreamDeserialize(), dkcAllocSerialize(), dkcAllocStream(), dkcAllocString(), と dkcAllocUniqueID().
00016 {
00017 DKC_MEMORYSTREAM *p;
00018 if(0==size) return NULL;
00019
00020 p = dkcAllocate(sizeof(DKC_MEMORYSTREAM));
00021
00022 if(NULL==p) return NULL;
00023 p->mBuffer = 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(&p);
00031 return NULL;
00032
00033 }
|
|
|
dkcMemoryStream.c の 266 行で定義されています。 参照先 DKC_MEMORYSTREAM, dkcAllocMemoryStream(), dkcMemoryStreamSeek(), dkcMemoryStreamWrite(), dkcmNOT_ASSERT, edkcMemoryStreamSeekSet, dkc_MemoryStream::mBuffer, dkc_MemoryStream::mNowOffset, と NULL.
00267 {
00268 DKC_MEMORYSTREAM *tp = NULL;
00269
00270 dkcmNOT_ASSERT(NULL==ptr);
00271
00272 tp = dkcAllocMemoryStream(ptr->mSize);
00273 if(NULL==tp) return NULL;
00274
00275 dkcMemoryStreamWrite(tp,ptr->mBuffer,ptr->mSize);
00276
00277 //内部オフセット変更 /* 先頭から */
00278 dkcMemoryStreamSeek(tp,ptr->mNowOffset,edkcMemoryStreamSeekSet);
00279 return tp;
00280 }
|
|
|
DKC_SERIALIZEから新しいMemoryStreamを作る。.
dkcMemoryStream.c の 285 行で定義されています。 参照先 DKC_DESERIALIZE, DKC_MEMORYSTREAM, dkcAllocMemoryStream(), dkcDeserializeRead(), dkcmNOT_ASSERT, dkc_MemoryStream::mBuffer, dkc_MemoryStream::mNowOffset, と NULL. 参照元 dkcAllocStringDeserialize().
00286 {
00287 DKC_MEMORYSTREAM *p;
00288 DKC_MEMORYSTREAM t;
00289 size_t read;
00290 //dkcmNOT_ASSERT(NULL==se);
00291
00292
00293 dkcDeserializeRead(se,&t,sizeof(t),&read);
00294
00295 p = dkcAllocMemoryStream(t.mSize);
00296 if(NULL==p) return NULL;
00297
00298 /* シリアライズデータと同じにしないと^^; */
00299
00300 dkcDeserializeRead(se,p->mBuffer,t.mSize,&read);
00301
00302 dkcmNOT_ASSERT(read != t.mSize);
00303
00304
00305 p->mNowOffset = t.mNowOffset;
00306
00307 return p;
00308 }
|
|
|
dkcAllocNewStream()で確保したストリーム領域を開放する
dkcMemoryStream.c の 36 行で定義されています。 参照先 DKC_MEMORYSTREAM, dkcFree(), edk_ArgumentException, edk_FAILED, と 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(&((*ptr)->mBuffer));
00041 return dkcFree(ptr);
00042 }
|
|
|
stream内をmemset(0)する。(seek位置も最初に戻される。
dkcMemoryStream.c の 257 行で定義されています。 参照先 DKC_MEMORYSTREAM, dkcmNOT_ASSERT, edk_SUCCEEDED, と NULL. 参照元 dkcStreamClear(), と dkcStringCopy().
00257 {
00258 dkcmNOT_ASSERT(NULL==ptr);
00259 //if(NULL==ptr) return edk_ArgumentException;
00260 memset(ptr->mBuffer,0,ptr->mSize);
00261 ptr->mNowOffset = 0;
00262 return edk_SUCCEEDED;
00263 }
|
|
||||||||||||||||
|
streamをライトする。ライト出来なかったら内部で動的拡張する。
dkcMemoryStream.c の 231 行で定義されています。 参照先 DKC_MEMORYSTREAM, dkcMemoryStreamAutoExpandResize(), dkcMemoryStreamWrite(), DKUTIL_FAILED, edk_ArgumentException, edk_FAILED, dkc_MemoryStream::mNowOffset, dkc_MemoryStream::mSize, と NULL. 参照元 dkcSerializeWrite(), dkcStringConcatenate(), と dkcStringCopy().
00231 {
00232 int result;
00233 size_t want_size;
00234
00235 if(NULL==ptr) return edk_ArgumentException;
00236
00237 want_size = ptr->mNowOffset + size;
00238
00239 if(ptr->mSize < want_size)
00240 {
00241 result = dkcMemoryStreamAutoExpandResize(ptr,size);
00242 //result = dkcMemoryStreamResize(ptr,want_size);
00243 if(DKUTIL_FAILED(result)) return edk_FAILED;
00244 }
00245
00246 return dkcMemoryStreamWrite(ptr,buffer,size);
00247 }
|
|
|
streamのシークポイントを返す。
dkcMemoryStream.c の 92 行で定義されています。 参照先 DKC_MEMORYSTREAM, と dkc_MemoryStream::mNowOffset. 参照元 dkcStringInsert().
00093 {
00094 return ptr->mNowOffset;
00095 }
|
|
||||||||||||||||||||
|
streamをリードする。freadみたいなもの
dkcMemoryStream.c の 97 行で定義されています。 参照先 dkc_memcpy(), DKC_MEMORYSTREAM, dkcmNOT_ASSERT, edk_ArgumentException, edk_BufferOverFlow, edk_FAILED, edk_SUCCEEDED, 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
00126
00127 //update...
00128 ptr->mNowOffset += f_read;
00129 *readsize = f_read;
00130
00131 return edk_SUCCEEDED;
00132 }
|
|
||||||||||||
|
streamのバッファを拡張する。
dkcMemoryStream.c の 135 行で定義されています。 参照先 DKC_MEMORYSTREAM, dkcReallocate(), DKUTIL_FAILED, edk_ArgumentException, edk_FAILED, edk_SUCCEEDED, dkc_MemoryStream::mBuffer, dkc_MemoryStream::mSize, と NULL.
00136 {
00137 int ra_r = 0;
00138 void *NewPtr = NULL;
00139 void *OldPtr = NULL;
00140
00141 //error check
00142 if(NULL==ptr) return edk_ArgumentException;
00143
00144
00145 //process
00146 OldPtr = ptr->mBuffer;
00147
00148 ra_r = dkcReallocate(&NewPtr,want_size,&OldPtr);
00149 if(DKUTIL_FAILED(ra_r)){
00150 return edk_FAILED;
00151 }
00152
00153 //update...
00154 ptr->mBuffer = NewPtr;
00155 ptr->mSize = want_size;
00156
00157
00158 return edk_SUCCEEDED;
00159 }
|
|
||||||||||||||||
|
streamをシークする。fseekみたいなもの
dkcMemoryStream.c の 71 行で定義されています。 参照先 DKC_MEMORYSTREAM, dkcMemoryStreamSeekLogic(), edk_ArgumentException, edk_FAILED, 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_SERIALIZEにシリアライズデータをぶち込む.
dkcMemoryStream.c の 312 行で定義されています。 参照先 DKC_MEMORYSTREAM, DKC_SERIALIZE, dkcmNOT_ASSERT, dkcSerializeWrite(), と NULL. 参照元 dkcStringSerialize().
00313 {
00314 dkcmNOT_ASSERT(NULL==ptr);
00315
00316 dkcSerializeWrite(se,ptr,sizeof(*ptr));
00317 dkcSerializeWrite(se,ptr->mBuffer,ptr->mSize);
00318
00319 }
|
|
||||||||||||||||
|
streamをライトする。fwriteみたいなもの
dkcMemoryStream.c の 210 行で定義されています。 参照先 BYTE, dkc_memcpy(), DKC_MEMORYSTREAM, dkcmNOT_ASSERT, DKUTIL_FAILED, edk_ArgumentException, edk_FAILED, edk_SUCCEEDED, dkc_MemoryStream::mBuffer, dkc_MemoryStream::mNowOffset, dkc_MemoryStream::mSize, と NULL. 参照元 dkcAllocMemoryStreamCopy(), dkcMemoryStreamDynamicWrite(), と dkcStreamWrite().
00210 {
00211 size_t rest;
00212
00213 if(NULL==ptr) return edk_ArgumentException;
00214
00215
00216 if(ptr->mSize < ptr->mNowOffset + size){return edk_FAILED;}
00217 rest = ptr->mSize - ptr->mNowOffset;
00218
00219 dkcmNOT_ASSERT(DKUTIL_FAILED(dkc_memcpy(
00220 (void *)((BYTE *)ptr->mBuffer + ptr->mNowOffset),
00221 rest,
00222 buffer,size)
00223 ));
00224
00225 ptr->mNowOffset += size;
00226
00227 return edk_SUCCEEDED;
00228 }
|
1.3.6