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