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