#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 }; |
|
ストリーム領域を得る。
参照元 dkcAllocReplace(), dkcAllocStreamEncouragementFileType(), dkcAllocStreamFileType(), dkcAllocStreamMemoryType(), と dkcNewCircularStream(). |
|
dkcAllocNewStream()で確保したストリーム領域を開放する
dkcStream.c の 160 行で定義されています。 参照先 DKC_MEMORYSTREAM, DKC_STREAM, dkcFClose(), dkcFree(), dkcFreeMemoryStream(), dkcmNOT_ASSERT, edk_FAILED, edkcStreamInitFile, edkcStreamInitMemory, dkc_Stream::mMode, dkc_Stream::mSig, と NULL. 参照元 dkcAllocReplace(), dkcCloseFileWithSignature(), dkcFreeReplace(), と dkcOpenFileWithSignature().
00160 { 00161 DKC_STREAM *t; 00162 if(NULL==p){ 00163 return edk_FAILED; 00164 } 00165 t = *p; 00166 if(NULL==t){ 00167 return edk_FAILED; 00168 } 00169 00170 switch(t->mMode){ 00171 case edkcStreamInitMemory: 00172 dkcFreeMemoryStream((DKC_MEMORYSTREAM **)&(t->mSig)); 00173 break; 00174 case edkcStreamInitFile: 00175 dkcFClose((FILE **)&(t->mSig)); 00176 break; 00177 #ifdef DEBUG 00178 default: 00179 dkcmNOT_ASSERT("dkcFreeStream FAILED"); 00180 #endif 00181 } 00182 return dkcFree((void **)p); 00183 } |
|
stream内をmemset(0)する。(seek位置も最初に戻される。
dkcStream.c の 738 行で定義されています。 参照先 DKC_MEMORYSTREAM, DKC_STREAM, dkcMemoryStreamClear(), dkcStreamWrite(), DKUTIL_FAILED, edk_FAILED, edk_SUCCEEDED, edkcStreamInitFile, edkcStreamInitMemory, dkc_Stream::mMode, と dkc_Stream::mSig.
00738 { 00739 //file size 00740 size_t fsize; 00741 //temp size 00742 size_t tsize; 00743 size_t write_size; 00744 FILE *fp; 00745 int r = edk_FAILED; 00746 char null_array[1024]; 00747 00748 00749 switch(ptr->mMode){ 00750 case edkcStreamInitMemory: 00751 r = dkcMemoryStreamClear( (DKC_MEMORYSTREAM *)ptr->mSig ); 00752 break; 00753 case edkcStreamInitFile: 00754 00755 memset(null_array,0,sizeof(null_array)); 00756 fp =(FILE *) ptr->mSig; 00757 00758 00759 fseek( fp, 0, SEEK_END ) ; 00760 fsize = ftell( fp ) ; 00761 fseek( fp, 0, SEEK_SET ) ; 00762 00763 if(fsize > sizeof(null_array)) 00764 {//ファイルのサイズがNULL配列より大きい場合 00765 00766 tsize = 0; 00767 write_size = sizeof(null_array); 00768 for(;;){ 00769 00770 r = dkcStreamWrite(ptr,null_array,write_size); 00771 00772 if(DKUTIL_FAILED(r)){ 00773 return r; 00774 } 00775 if(tsize >= fsize){ 00776 r = edk_SUCCEEDED; 00777 break; 00778 } 00779 00780 if(tsize + write_size > fsize){ 00781 write_size = fsize - tsize; 00782 }else{ 00783 tsize += write_size; 00784 00785 //こいつはいらないけど一応・・・ 00786 write_size = sizeof(null_array); 00787 } 00788 } 00789 }else{//ちっこいなら上書き上書き・・・ 00790 r = dkcStreamWrite(ptr,null_array,fsize); 00791 } 00792 00793 break; 00794 } 00795 return r; 00796 } |
|
streamをリードする。freadみたいなもの
dkcStream.c の 318 行で定義されています。 参照先 DKC_INLINE, DKC_MEMORYSTREAM, DKC_STREAM, dkcMemoryStreamRead(), dkcStreamReadObayAnOrder(), edk_BufferOverFlow, edk_FAILED, edk_SUCCEEDED, edkcStreamInitFile, edkcStreamInitMemory, edkcStreamProcessDefault, dkc_Stream::mMode, dkc_Stream::mProcessMode, dkc_Stream::mSig, と NULL. 参照元 dkcStreamRef(), ReadCallback(), と StreamRead().
00318 { 00319 int r = edk_FAILED; 00320 FILE *fp = (FILE *)ptr->mSig; 00321 size_t redsize = 0; 00322 00323 //readsize filter 00324 if(NULL==readsize){ 00325 readsize = &redsize; 00326 } 00327 00328 //エンディアンチェンジ指定されているよ〜〜。 00329 /*if(flag & edkcStreamReadErrorWhenEndianChange){ 00330 if(ptr->mChangeEndian){ 00331 return edk_Not_Satisfactory; 00332 } 00333 }*/ 00334 00335 switch(ptr->mMode){ 00336 case edkcStreamInitMemory: 00337 r = dkcMemoryStreamRead((DKC_MEMORYSTREAM *)ptr->mSig, 00338 buffer,size,readsize); 00339 break; 00340 case edkcStreamInitFile: 00341 00342 if(ptr->mProcessMode & edkcStreamProcessDefault){ 00343 00344 *readsize = fread(buffer,1,size,fp); 00345 00346 //set result 00347 if(feof(fp)){ 00348 r = edk_BufferOverFlow; 00349 }else if(!ferror(fp)){ 00350 r = edk_SUCCEEDED; 00351 } 00352 00353 }else{ 00354 r = dkcStreamReadObayAnOrder(ptr,buffer,size,readsize); 00355 } 00356 00357 00358 break; 00359 } 00360 return r; 00361 } |
|
streamをシークする。fseekみたいなもの
dkcStream.c の 188 行で定義されています。 参照先 DKC_MEMORYSTREAM, DKC_STREAM, dkcMemoryStreamSeek(), edk_FAILED, edkcStreamInitFile, edkcStreamInitMemory, dkc_Stream::mMode, と dkc_Stream::mSig. 参照元 dkcCircularStreamWrite(), dkcCloseFileWithSignature(), dkcOpenFileWithSignature(), dkcStreamRef(), dkcStreamRef16(), dkcStreamRef32(), と dkcStreamRef64().
00188 { 00189 int r = edk_FAILED; 00190 switch(ptr->mMode){ 00191 case edkcStreamInitMemory: 00192 r = dkcMemoryStreamSeek((DKC_MEMORYSTREAM *)ptr->mSig,offset,origin); 00193 break; 00194 case edkcStreamInitFile: 00195 //成功したら0 == edk_SUCCEEDED; 00196 r = fseek((FILE *)ptr->mSig,offset,origin); 00197 break; 00198 } 00199 return r; 00200 00201 } |
|