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

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 *のストリームデータ。

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

DKC_EXTERN int WINAPI dkcFreeStream DKC_STREAM **  ptr  ) 
 

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

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

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

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

DKC_EXTERN int WINAPI dkcStreamClear DKC_STREAM ptr  ) 
 

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

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

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

参照元 dkcCircularStreamZero().

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 }

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,

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

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

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

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

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

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

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

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

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

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

参照先 DKC_INLINE, 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().

00341 {
00342     int r = edk_FAILED;
00343 
00344     UINT proc_flag = ptr->mProcessMode;
00346     if(proc_flag & edkcStreamWriteErrorWhenEndianChange){
00347         if(ptr->mChangeEndian){
00348             return edk_Not_Satisfactory;
00349         }
00350     }
00351 
00352     switch(ptr->mMode){
00353     case edkcStreamInitMemory:
00354         r =  dkcMemoryStreamWrite(ptr->mSig,buffer,size);
00355         break;
00356     case edkcStreamInitFile:
00357         r = dkcStreamWriteObayAnOrder(ptr,buffer,size);
00358         break;
00359     }
00360 
00361     return r;
00362 }


dkutil_cに対してSun Jul 18 22:46:26 2004に生成されました。 doxygen 1.3.6