#include <stdio.h>
#include "dkcOSIndependent.h"
#include "dkcDefined.h"
trash/dkcStream.hのインクルード依存関係図
このグラフは、どのファイルから直接、間接的にインクルードされているかを示しています。
構成 | |
struct | dkc_Stream |
汎用型ストリーム [詳細] | |
型定義 | |
typedef dkc_Stream | DKC_STREAM |
汎用型ストリーム | |
列挙型 | |
enum | edkcStream { edkcStreamSeekCurrent = SEEK_CUR, edkcStreamSeekEnd = SEEK_END, edkcStreamSeekSet = SEEK_SET, edkcStreamInitMemory = 0, edkcStreamInitFile } |
関数 | |
DKC_EXTERN DKC_STREAM *WINAPI | dkcAllocStream (int flag, const char *filename, const char *mode) |
ストリーム領域を得る。 | |
DKC_EXTERN int WINAPI | dkcFreeStream (DKC_STREAM **ptr) |
dkcAllocNewStream()で確保したストリーム領域を開放する | |
DKC_EXTERN int WINAPI | dkcStreamSeek (DKC_STREAM *ptr, int offset, int origin) |
streamをシークする。fseekみたいなもの | |
DKC_EXTERN int WINAPI | dkcStreamRead (DKC_STREAM *ptr, void *buffer, size_t size, size_t *readsize) |
streamをリードする。freadみたいなもの | |
DKC_EXTERN int WINAPI | dkcStreamWrite (DKC_STREAM *ptr, const void *buffer, size_t size) |
streamをライトする。fwriteみたいなもの | |
DKC_EXTERN int WINAPI | dkcStreamClear (DKC_STREAM *ptr) |
stream内をmemset(0)する。(seek位置も最初に戻される。 |
|
汎用型ストリーム
|
|
trash/dkcStream.h の 30 行で定義されています。
00030 { 00032 edkcStreamSeekCurrent = SEEK_CUR, 00034 edkcStreamSeekEnd = SEEK_END, 00036 edkcStreamSeekSet = SEEK_SET, 00038 edkcStreamInitMemory = 0, 00040 edkcStreamInitFile, 00041 }; |
|
ストリーム領域を得る。
参照元 dkcAllocStreamFileType(), dkcAllocStreamMemoryType(), と dkcNewCircularStream(). |
|
dkcAllocNewStream()で確保したストリーム領域を開放する
dkcStream.c の 141 行で定義されています。 参照先 DKC_MEMORYSTREAM, DKC_STREAM, dkcFClose(), dkcFree(), dkcFreeMemoryStream(), dkcmNOT_ASSERT, edk_FAILED, edkcStreamInitFile, edkcStreamInitMemory, dkc_Stream::mMode, dkc_Stream::mSig, と NULL. 参照元 dkcCloseFileWithSignature(), と dkcOpenFileWithSignature().
00141 { 00142 DKC_STREAM *t; 00143 if(NULL==p){ 00144 return edk_FAILED; 00145 } 00146 t = *p; 00147 if(NULL==t){ 00148 return edk_FAILED; 00149 } 00150 00151 switch(t->mMode){ 00152 case edkcStreamInitMemory: 00153 dkcFreeMemoryStream((DKC_MEMORYSTREAM **)&(t->mSig)); 00154 break; 00155 case edkcStreamInitFile: 00156 dkcFClose((FILE **)&(t->mSig)); 00157 break; 00158 #ifdef DEBUG 00159 default: 00160 dkcmNOT_ASSERT("dkcFreeStream FAILED"); 00161 #endif 00162 } 00163 return dkcFree(p); 00164 } |
|
stream内をmemset(0)する。(seek位置も最初に戻される。
dkcStream.c の 531 行で定義されています。 参照先 DKC_STREAM, dkcMemoryStreamClear(), dkcStreamWrite(), DKUTIL_FAILED, edk_FAILED, edk_SUCCEEDED, edkcStreamInitFile, edkcStreamInitMemory, dkc_Stream::mMode, と dkc_Stream::mSig.
00531 { 00532 //file size 00533 size_t fsize; 00534 //temp size 00535 size_t tsize; 00536 size_t write_size; 00537 FILE *fp; 00538 int r = edk_FAILED; 00539 char null_array[1024]; 00540 00541 00542 switch(ptr->mMode){ 00543 case edkcStreamInitMemory: 00544 r = dkcMemoryStreamClear( ptr->mSig ); 00545 break; 00546 case edkcStreamInitFile: 00547 00548 memset(null_array,0,sizeof(null_array)); 00549 fp = ptr->mSig; 00550 00551 00552 fseek( fp, 0, SEEK_END ) ; 00553 fsize = ftell( fp ) ; 00554 fseek( fp, 0, SEEK_SET ) ; 00555 00556 if(fsize > sizeof(null_array)) 00557 {//ファイルのサイズがNULL配列より大きい場合 00558 00559 tsize = 0; 00560 write_size = sizeof(null_array); 00561 for(;;){ 00562 00563 r = dkcStreamWrite(ptr,null_array,write_size); 00564 00565 if(DKUTIL_FAILED(r)){ 00566 return r; 00567 } 00568 if(tsize >= fsize){ 00569 r = edk_SUCCEEDED; 00570 break; 00571 } 00572 00573 if(tsize + write_size > fsize){ 00574 write_size = fsize - tsize; 00575 }else{ 00576 tsize += write_size; 00577 00578 //こいつはいらないけど一応・・・ 00579 write_size = sizeof(null_array); 00580 } 00581 } 00582 }else{//ちっこいなら上書き上書き・・・ 00583 r = dkcStreamWrite(ptr,null_array,fsize); 00584 } 00585 00586 break; 00587 } 00588 return r; 00589 } |
|
streamをリードする。freadみたいなもの
dkcStream.c の 257 行で定義されています。 参照先 DKC_INLINE, DKC_STREAM, dkcMemoryStreamRead(), dkcStreamReadObayAnOrder(), edk_FAILED, edk_SUCCEEDED, edkcStreamInitFile, edkcStreamInitMemory, edkcStreamProcessDefault, dkc_Stream::mMode, dkc_Stream::mProcessMode, dkc_Stream::mSig, と NULL. 参照元 ReadCallback().
00257 { 00258 int r = edk_FAILED; 00259 FILE *fp = ptr->mSig; 00260 size_t redsize = 0; 00261 if(NULL==readsize){ 00262 readsize = &redsize; 00263 } 00264 00265 //エンディアンチェンジ指定されているよ~~。 00266 /*if(flag & edkcStreamReadErrorWhenEndianChange){ 00267 if(ptr->mChangeEndian){ 00268 return edk_Not_Satisfactory; 00269 } 00270 }*/ 00271 00272 switch(ptr->mMode){ 00273 case edkcStreamInitMemory: 00274 r = dkcMemoryStreamRead(ptr->mSig, 00275 buffer,size,readsize); 00276 break; 00277 case edkcStreamInitFile: 00278 00279 if(ptr->mProcessMode & edkcStreamProcessDefault){ 00280 *readsize = fread(buffer,1,size,fp); 00281 if(!ferror(fp)){ 00282 r = edk_SUCCEEDED; 00283 } 00284 }else{ 00285 r = dkcStreamReadObayAnOrder(ptr,buffer,size,readsize); 00286 } 00287 00288 00289 break; 00290 } 00291 return r; 00292 } |
|
streamをシークする。fseekみたいなもの
dkcStream.c の 169 行で定義されています。 参照先 DKC_STREAM, dkcMemoryStreamSeek(), edk_FAILED, edkcStreamInitFile, edkcStreamInitMemory, dkc_Stream::mMode, と dkc_Stream::mSig. 参照元 dkcCircularStreamWrite(), dkcCloseFileWithSignature(), と dkcOpenFileWithSignature().
00169 { 00170 int r = edk_FAILED; 00171 switch(ptr->mMode){ 00172 case edkcStreamInitMemory: 00173 r = dkcMemoryStreamSeek(ptr->mSig,offset,origin); 00174 break; 00175 case edkcStreamInitFile: 00176 r = fseek(ptr->mSig,offset,origin); 00177 break; 00178 } 00179 return r; 00180 00181 } |
|