メインページ | 構成 | ファイル一覧 | 構成メンバ | ファイルメンバ | 関連ページ

dkcStream.h

#include <stdio.h>
#include "dkcOSIndependent.h"
#include "dkcDefined.h"

trash/dkcStream.hのインクルード依存関係図

Include dependency graph

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

Included by dependency graph

ソースコードを見る。

構成

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位置も最初に戻される。


型定義

typedef struct dkc_Stream DKC_STREAM
 

汎用型ストリーム


列挙型

enum edkcStream
 

列挙型の値:
edkcStreamSeekCurrent  今の位置からシーク
edkcStreamSeekEnd  最後の位置からシーク
edkcStreamSeekSet  最初の位置からシーク
edkcStreamInitMemory  バッファとして初期化
edkcStreamInitFile  バッファはfopenで初期化

trash/dkcStream.h30 行で定義されています。

00030                {
00032     edkcStreamSeekCurrent = SEEK_CUR,
00034     edkcStreamSeekEnd = SEEK_END,
00036     edkcStreamSeekSet = SEEK_SET,
00038     edkcStreamInitMemory = 0,
00040     edkcStreamInitFile,
00041 };


関数

DKC_EXTERN DKC_STREAM* WINAPI dkcAllocStream int  flag,
const char *  filename,
const char *  mode
 

ストリーム領域を得る。

引数:
flag[in] edkcStreamにある、StreamInit系のものを渡す
size[in] ストリームの初期化時のサイズ
filename[in] edkcStreamInitFileをflagに渡した場合、その保存するファイルの名前 flagにedkcStreamInitFile以外の値を渡した場合はNULLでOK
mode[in] fopenのモード flagにedkcStreamInitFile以外の値を渡した場合はNULLでOK
戻り値:
DKC_STREAM *のストリームデータ。

参照元 dkcAllocReplace(), dkcAllocStreamEncouragementFileType(), dkcAllocStreamFileType(), dkcAllocStreamMemoryType(), と dkcNewCircularStream().

DKC_EXTERN int WINAPI dkcFreeStream DKC_STREAM **  ptr  ) 
 

dkcAllocNewStream()で確保したストリーム領域を開放する

引数:
ptr[in][out] 削除するストリームデータ。入れたデータはNULLになる。
覚え書き:

dkcStream.c160 行で定義されています。

参照先 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 }

DKC_EXTERN int WINAPI dkcStreamClear DKC_STREAM ptr  ) 
 

stream内をmemset(0)する。(seek位置も最初に戻される。

dkcStream.c738 行で定義されています。

参照先 DKC_MEMORYSTREAM, DKC_STREAM, dkcMemoryStreamClear(), dkcStreamWrite(), DKUTIL_FAILED, edk_FAILED, edk_SUCCEEDED, edkcStreamInitFile, edkcStreamInitMemory, dkc_Stream::mMode, と dkc_Stream::mSig.

参照元 dkcCircularStreamZero().

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 }

DKC_EXTERN int WINAPI dkcStreamRead DKC_STREAM ptr,
void *  buffer,
size_t  size,
size_t *  readsize
 

streamをリードする。freadみたいなもの

引数:
readsize[out] 実際に読んだサイズを返す。NULLを渡してもOK.
覚え書き:
指定したサイズ(size)よりもストリームバッファのサイズが小さかった場合 readsizeに実際に読んだサイズを入れます。
戻り値:
edkcStreamInitMemoryが指定されていた場合、 dkcMemoryStreamRead()を見てください。 edkcStreamInitFileが指定されていた場合、 ferror()だったらedk_FAILED , feof()だったらedk_BufferOverFlow, edkcStreamWriteErrorWhenEndianChangeが指定されていた場合、 edk_Not_Satisfactoryを返す。この場合はdkcStreamRead8()を使用する事

dkcStream.c318 行で定義されています。

参照先 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 }

DKC_EXTERN int WINAPI dkcStreamSeek DKC_STREAM ptr,
int  offset,
int  origin
 

streamをシークする。fseekみたいなもの

dkcStream.c188 行で定義されています。

参照先 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 }

DKC_EXTERN int WINAPI dkcStreamWrite DKC_STREAM ptr,
const void *  buffer,
size_t  size
 

streamをライトする。fwriteみたいなもの

書き込み指定がこうなっているので・・・。

dkcStream.c538 行で定義されています。

参照先 DKC_INLINE, DKC_MEMORYSTREAM, DKC_STREAM, dkcMemoryStreamWrite(), dkcStreamWriteObayAnOrder(), edk_FAILED, edk_Not_Satisfactory, edkcStreamInitFile, edkcStreamInitMemory, edkcStreamWriteErrorWhenEndianChange, dkc_Stream::mChangeEndian, dkc_Stream::mMode, dkc_Stream::mProcessMode, と dkc_Stream::mSig.

参照元 dkcAllocStream(), dkcCircularStreamWrite(), dkcFileWithSignatureWrite(), dkcOpenFileWithSignature(), dkcStreamClear(), HeaderWrite(), と StreamWrite().

00539 {
00540     int r = edk_FAILED;
00541 
00542     UINT proc_flag = ptr->mProcessMode;
00544     if(proc_flag & edkcStreamWriteErrorWhenEndianChange){
00545         if(ptr->mChangeEndian){
00546             return edk_Not_Satisfactory;
00547         }
00548     }
00549 
00550     switch(ptr->mMode){
00551     case edkcStreamInitMemory:
00552         r =  dkcMemoryStreamWrite((DKC_MEMORYSTREAM *)ptr->mSig,buffer,size);
00553         break;
00554     case edkcStreamInitFile:
00555         r = dkcStreamWriteObayAnOrder(ptr,buffer,size);
00556         break;
00557     }
00558 
00559     return r;
00560 }


dkutil_cに対してTue Oct 19 03:36:54 2004に生成されました。 doxygen 1.3.6