#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 }
|
|
||||||||||||||||
1.3.6