#include "dkcOSIndependent.h"#include "dkcMemoryStream.h"dkcStream.hのインクルード依存関係図

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

構成 | |
| struct | dkc_Stream |
| 汎用型ストリーム [詳細] | |
型定義 | |
| typedef dkc_Stream | DKC_STREAM |
| 汎用型ストリーム | |
| typedef int(WINAPI * | DKC_STREAM_PROCESS_TYPE )(DKC_STREAM *p, void *buffer, size_t size, void *data) |
列挙型 | |
| enum | edkcStream { edkcStreamSeekCurrent = SEEK_CUR, edkcStreamSeekEnd = SEEK_END, edkcStreamSeekSet = SEEK_SET, edkcStreamInitMemory = 1, edkcStreamInitFile = 2, edkcStreamDefaultEndian = 4, edkcStreamBigEndian = 8, edkcStreamLittleEndian = 16, edkcStreamProcessDefault = 32, edkcStreamProcessAsOrdered = 64, edkcStreamWriteErrorWhenEndianChange = 128 } |
関数 | |
| DKC_EXTERN DKC_STREAM *WINAPI | dkcAllocStream (UINT flag, const void *default_data, size_t size, const char *filename, const char *mode) |
| ストリーム領域を得る。 | |
| DKC_EXTERN DKC_STREAM *WINAPI | dkcAllocStreamMemoryType (UINT flag, const void *default_data, size_t size) |
| DKC_EXTERN DKC_STREAM *WINAPI | dkcAllocStreamFileType (UINT 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 long WINAPI | dkcStreamTell (DKC_STREAM *ptr) |
| streamの位置を取得する。 | |
| DKC_EXTERN int WINAPI | dkcStreamRead (DKC_STREAM *ptr, void *buffer, size_t size, size_t *readsize) |
| streamをリードする。freadみたいなもの | |
| DKC_EXTERN int WINAPI | dkcStreamSwapRead16 (DKC_STREAM *ptr, void *buffer, size_t size, UINT flag, size_t *readsize) |
| DKC_EXTERN int WINAPI | dkcStreamSwapRead32 (DKC_STREAM *ptr, void *buffer, size_t size, UINT flag, size_t *readsize) |
| DKC_EXTERN int WINAPI | dkcStreamSwapRead64 (DKC_STREAM *ptr, void *buffer, size_t size, UINT flag, size_t *readsize) |
| DKC_EXTERN int WINAPI | dkcStreamWrite (DKC_STREAM *ptr, const void *buffer, size_t size) |
| streamをライトする。fwriteみたいなもの | |
| DKC_EXTERN int WINAPI | dkcStreamWrite16 (DKC_STREAM *ptr, const void *buffer, size_t size) |
| DKC_EXTERN int WINAPI | dkcStreamWrite32 (DKC_STREAM *ptr, const void *buffer, size_t size) |
| DKC_EXTERN int WINAPI | dkcStreamWrite64 (DKC_STREAM *ptr, const void *buffer, size_t size) |
| DKC_EXTERN int WINAPI | dkcStreamProcess (DKC_STREAM *ptr, void *buffer, size_t size, DKC_STREAM_PROCESS_TYPE write_t, void *data) |
| DKC_EXTERN int WINAPI | dkcStreamProcess16 (DKC_STREAM *ptr, void *buffer, size_t size, DKC_STREAM_PROCESS_TYPE write_t, void *data) |
| DKC_EXTERN int WINAPI | dkcStreamProcess32 (DKC_STREAM *ptr, void *buffer, size_t size, DKC_STREAM_PROCESS_TYPE write_t, void *data) |
| DKC_EXTERN int WINAPI | dkcStreamProcess64 (DKC_STREAM *ptr, void *buffer, size_t size, DKC_STREAM_PROCESS_TYPE write_t, void *data) |
| DKC_EXTERN int WINAPI | dkcStreamClear (DKC_STREAM *ptr) |
| stream内をmemset(0)する。(seek位置も最初に戻される。 | |
|
|
|
dkcStream.h の 145 行で定義されています。 参照元 dkcStreamProcess(), dkcStreamProcess16(), dkcStreamProcess32(), と dkcStreamProcess64(). |
|
|
dkcStream.h の 38 行で定義されています。
00038 {
00040 edkcStreamSeekCurrent = SEEK_CUR,
00042 edkcStreamSeekEnd = SEEK_END,
00044 edkcStreamSeekSet = SEEK_SET,
00046 edkcStreamInitMemory = 1,
00048 edkcStreamInitFile = 2,
00050 edkcStreamDefaultEndian = 4,
00052 edkcStreamBigEndian = 8,
00054 edkcStreamLittleEndian = 16,
00056 edkcStreamProcessDefault = 32,
00058 edkcStreamProcessAsOrdered = 64,
00062 edkcStreamWriteErrorWhenEndianChange = 128,
00063
00064
00065 };
|
|
||||||||||||||||||||||||
|
ストリーム領域を得る。
dkcStream.c の 89 行で定義されています。 参照先 DKC_STREAM, dkcAllocate(), dkcAllocMemoryStream(), dkcFOpen(), dkcFree(), dkcStreamWrite(), DKUTIL_FAILED, edkcStreamInitFile, edkcStreamInitMemory, dkc_Stream::mMode, dkc_Stream::mSig, NULL, と SetStreamInfo().
00092 {
00093
00094 DKC_STREAM *p;
00095 void *psig;
00096
00097
00098 p = dkcAllocate(sizeof(DKC_STREAM));
00099 if(NULL==p){
00100 return NULL;
00101 }
00102
00103 if(DKUTIL_FAILED(SetStreamInfo(p,flag))){
00104 goto Error;
00105 }
00106
00107 switch(p->mMode){
00108 case edkcStreamInitMemory:
00109 psig = (void *)dkcAllocMemoryStream(size);
00110 if(NULL==psig){
00111 goto Error;
00112 }
00113 //update
00114 p->mSig = psig;
00115 //write default data
00116 dkcStreamWrite(p,default_data,size);
00117 break;
00118 case edkcStreamInitFile:
00119 psig = (void *)dkcFOpen(filename,mode);
00120 if(NULL==psig){
00121 goto Error;
00122 }
00123 //update
00124 p->mSig = psig;
00125
00126 break;
00127 default:
00128 goto Error;
00129 }
00130
00131
00132 //p->mEndianMode = endianmode
00133
00134 return p;
00135 Error:
00136 dkcFree(&p);
00137 return NULL;
00138 }
|
|
||||||||||||||||
|
dkcStream.c の 83 行で定義されています。 参照先 DKC_STREAM, dkcAllocStream(), DKUTIL_FLAG_DOWN, DKUTIL_FLAG_UP, edkcStreamInitFile, edkcStreamInitMemory, と NULL. 参照元 dkcOpenFileWithSignature().
00083 {
00084 DKUTIL_FLAG_DOWN(flag,edkcStreamInitMemory);
00085 DKUTIL_FLAG_UP(flag,edkcStreamInitFile);
00086 return dkcAllocStream(flag,NULL,0,filename,mode);
00087 }
|
|
||||||||||||||||
|
dkcStream.c の 76 行で定義されています。 参照先 DKC_STREAM, dkcAllocStream(), DKUTIL_FLAG_DOWN, DKUTIL_FLAG_UP, edkcStreamInitFile, edkcStreamInitMemory, と NULL.
00076 {
00077 DKUTIL_FLAG_DOWN(flag,edkcStreamInitFile);
00078 DKUTIL_FLAG_UP(flag,edkcStreamInitMemory);
00079 return dkcAllocStream(flag,default_data,size,NULL,NULL);
00080
00081 }
|
|
|
dkcAllocNewStream()で確保したストリーム領域を開放する
dkcStream.c の 141 行で定義されています。
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 行で定義されています。
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 } |
|
||||||||||||||||||||||||
|
dkcStream.c の 408 行で定義されています。 参照先 DKC_STREAM, と DKC_STREAM_PROCESS_TYPE. 参照元 dkcFileWithSignatureWrite(), dkcFileWithSignatureWrite16(), dkcFileWithSignatureWrite32(), dkcFileWithSignatureWrite64(), と FileWithSignatureReadLogic().
00410 {
00411 return write_t(ptr,buffer,size,data);
00412 }
|
|
||||||||||||||||||||||||
|
dkcStream.c の 416 行で定義されています。 参照先 DKC_STREAM, DKC_STREAM_PROCESS_TYPE, dkcReverseEndian16(), edk_ArgumentException, edk_FAILED, dkc_Stream::mChangeEndian, と NULL. 参照元 dkcStreamWrite16().
00417 {
00418 int r;
00419 USHORT *pb;
00420 size_t elem_num,pause = 16;
00421 size_t i;
00422
00423 if(size % pause != 0){
00424 return edk_ArgumentException;
00425 }
00426 if(ptr->mChangeEndian)
00427 {//エンディアンチェンジが必要
00428 pb = (USHORT *)malloc(size);
00429 if(NULL==pb){
00430 return edk_FAILED;
00431 }
00432
00433 //メモリコピー
00434 memcpy(pb,buffer,size);
00435 elem_num = size / pause;
00436
00437 //エンディアンをチェンジさせる。
00438 for(i=0;i<elem_num;i++){
00439 pb[i] = dkcReverseEndian16(pb[i]);
00440 }
00441 //書き込む
00442 r = write_t(ptr,pb,size,data);
00443
00444 free(pb);
00445 }else{
00446 r = write_t(ptr,buffer,size,data);
00447 }
00448 return r;
00449 }
|
|
||||||||||||||||||||||||
|
dkcStream.c の 450 行で定義されています。 参照先 DKC_STREAM, DKC_STREAM_PROCESS_TYPE, dkcReverseEndian32(), edk_ArgumentException, edk_FAILED, dkc_Stream::mChangeEndian, と NULL. 参照元 dkcStreamWrite32().
00451 {
00452 int r;
00453 ULONG *pb;
00454 size_t elem_num,pause = 32;
00455 size_t i;
00456
00457 if(size % pause != 0){
00458 return edk_ArgumentException;
00459 }
00460 if(ptr->mChangeEndian)
00461 {//エンディアンチェンジが必要
00462 pb = (ULONG *)malloc(size);
00463 if(NULL==pb){
00464 return edk_FAILED;
00465 }
00466
00467 //メモリコピー
00468 memcpy(pb,buffer,size);
00469 elem_num = size / pause;
00470
00471 //エンディアンをチェンジさせる。
00472 for(i=0;i<elem_num;i++){
00473 pb[i] = dkcReverseEndian32(pb[i]);
00474 }
00475 //書き込む
00476 r = write_t(ptr,pb,size,data);
00477
00478 free(pb);
00479 }else{
00480 r = write_t(ptr,buffer,size,data);
00481 }
00482 return r;
00483
00484 }
|
|
||||||||||||||||||||||||
|
dkcStream.c の 493 行で定義されています。 参照先 DKC_STREAM, DKC_STREAM_PROCESS_TYPE, dkcReverseEndian64(), edk_ArgumentException, edk_FAILED, dkc_Stream::mChangeEndian, NULL, と ULONGLONG. 参照元 dkcStreamWrite64().
00494 {
00495 int r;
00496 ULONGLONG *pb;
00497 size_t elem_num,pause = 64;
00498 size_t i;
00499
00500 if(size % pause != 0){
00501 return edk_ArgumentException;
00502 }
00503 if(ptr->mChangeEndian)
00504 {//エンディアンチェンジが必要
00505 pb = (ULONGLONG *)malloc(size);
00506 if(NULL==pb){
00507 return edk_FAILED;
00508 }
00509
00510 //メモリコピー
00511 memcpy(pb,buffer,size);
00512 elem_num = size / pause;
00513
00514 //エンディアンをチェンジさせる。
00515 for(i=0;i<elem_num;i++){
00516 pb[i] = dkcReverseEndian64(pb[i]);
00517 }
00518 //書き込む
00519 r = write_t(ptr,pb,size,data);
00520
00521 free(pb);
00522 }else{
00523 r = write_t(ptr,buffer,size,data);
00524 }
00525 return r;
00526 }
|
|
||||||||||||||||||||
|
streamをリードする。freadみたいなもの
dkcStream.c の 257 行で定義されています。
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 行で定義されています。
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 }
|
|
||||||||||||||||||||||||
|
|
|
||||||||||||||||||||||||
|
|
|
||||||||||||||||||||||||
|
|
|
|
streamの位置を取得する。
dkcStream.c の 184 行で定義されています。 参照先 DKC_STREAM, dkcMemoryStreamTell, edk_FAILED, edkcStreamInitFile, edkcStreamInitMemory, dkc_Stream::mMode, と dkc_Stream::mSig. 参照元 dkcCloseFileWithSignature(), dkcFileWithSignatureCheckCheat(), dkcFileWithSignatureRead(), と ReadEOFCheck().
00184 {
00185 int r = edk_FAILED;
00186 switch(ptr->mMode){
00187 case edkcStreamInitMemory:
00188 r = dkcMemoryStreamTell(ptr->mSig);
00189 case edkcStreamInitFile:
00190 r = ftell(ptr->mSig);
00191 }
00192 return r;
00193 //dkcmNOT_ASSERT("dkcStreamTell failed");
00194 }
|
|
||||||||||||||||
|
streamをライトする。fwriteみたいなもの 書き込み指定がこうなっているので・・・。 dkcStream.c の 340 行で定義されています。
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 }
|
|
||||||||||||||||
|
dkcStream.c の 390 行で定義されています。 参照先 DKC_STREAM, dkcStreamProcess16(), NULL, と StreamWrite(). 参照元 dkcFileWithSignatureWrite16().
00390 {
00391 return dkcStreamProcess16(ptr,(void *)buffer,size,StreamWrite,NULL);
00392 }
|
|
||||||||||||||||
|
dkcStream.c の 394 行で定義されています。 参照先 DKC_STREAM, dkcStreamProcess32(), NULL, と StreamWrite(). 参照元 dkcFileWithSignatureWrite32().
00394 {
00395 return dkcStreamProcess32(ptr,(void *)buffer,size,StreamWrite,NULL);
00396
00397 }
|
|
||||||||||||||||
|
dkcStream.c の 401 行で定義されています。 参照先 DKC_STREAM, dkcStreamProcess64(), NULL, と StreamWrite(). 参照元 dkcFileWithSignatureWrite64().
00401 {
00402 return dkcStreamProcess64(ptr,(void *)buffer,size,StreamWrite,NULL);
00403 }
|
1.3.6